delphi如何把json传递过来的base64值转成图片
<p>资料来原:</p><p>https://blog.csdn.net/red_eye/article/details/129634709 delphi如何把json传递过来的base64值转成图片</p>
<p>https://blog.csdn.net/zisongjia/article/details/103423915 Delphi 读取PNG base64编码文件生成图片</p>
<p> </p>
<p><strong>delphi如何把json传递过来的base64值转成图片</strong></p>
<p>在Delphi中,您可以使用TNetEncoding.Base64.DecodeString方法将JSON传递过来的Base64编码字符串转换为原始二进制数据。然后,您可以将该二进制数据保存为图像文件或将其加载到TImage组件中以显示图像。</p>
<p>以下是一个示例代码,假设Base64编码的图像数据存储在JSON字符串的“image”字段中:</p>
<p>copy codeuses<br>System.NetEncoding, System.Classes, Vcl.Imaging.jpeg, Vcl.Graphics;<br> <br>procedure Base64ToImage(const ABase64String: string; const AFileName: string);<br>var<br>InputBytes: TBytes;<br>OutputStream: TMemoryStream;<br>JPEGImage: TJPEGImage;<br>begin<br>// 将Base64编码的字符串转换为原始二进制数据<br>InputBytes := TNetEncoding.Base64.DecodeString(ABase64String);<br> <br>// 将二进制数据保存到文件<br>OutputStream := TMemoryStream.Create;<br>try<br> OutputStream.WriteBuffer(InputBytes, Length(InputBytes));<br> OutputStream.SaveToFile(AFileName);<br>finally<br> OutputStream.Free;<br>end;<br> <br>// 或者将二进制数据加载到TImage组件中<br>JPEGImage := TJPEGImage.Create;<br>try<br> JPEGImage.LoadFromStream(TBytesStream.Create(InputBytes));<br> Image1.Picture.Assign(JPEGImage);<br>finally<br> JPEGImage.Free;<br>end;<br>end;<br>您可以调用此过程,将Base64编码的字符串转换为图像文件或TImage组件中的图像。例如:</p>
<p>copy codeBase64ToImage('iVBORw0KGgoAAAANSUhEUgAAAAUAAAAAVCAYAAABv8r...', 'image.jpg');<br>其中,第一个参数是Base64编码的字符串,第二个参数是要保存的文件名。如果您想将图像加载到TImage组件中,则将第二个参数设置为''。<br><br></p>
<p> </p>
<p><strong>Delphi 读取PNG base64编码文件生成图片</strong></p>
<p><br>uses NetEncoding,PNGImage;</p>
<p>procedure TForm1.FormCreate(Sender: TObject);</p>
<p>var</p>
<p>LInputStream: TFileStream;</p>
<p>LOutputStream: TMemoryStream;</p>
<p>Png: TPNGImage;</p>
<p>begin</p>
<p>LInputStream := TFileStream.Create('C:\Temp\PlateImage.txt', fmOpenRead or fmShareDenyWrite);</p>
<p>try</p>
<p> LOutputStream := TMemoryStream.Create;</p>
<p> try</p>
<p> TNetEncoding.Base64.Decode(LInputStream, LOutputStream);</p>
<p> ShowMessage(LOutputStream.Size.ToString);</p>
<p> LOutputStream.Position := 0;</p>
<p> Png := TPNGImage.Create;</p>
<p> try</p>
<p> Png.LoadFromStream(LOutputStream);</p>
<p> Image1.Picture.Assign(Png);</p>
<p> finally</p>
<p> Png.Free;</p>
<p> end;</p>
<p> finally</p>
<p> LOutputStream.Free;</p>
<p> end;</p>
<p>finally</p>
<p> LInputStream.Free;</p>
<p>end;</p>
<p>end;</p>
<p> </p>
<p><strong>保存文件,加载文件</strong></p>
<div class="cnblogs_code">
<pre><span style="color: rgba(0, 128, 128, 1)"> 1</span> <span style="color: rgba(0, 0, 255, 1)">procedure</span> TForm1.Base64ToImage(<span style="color: rgba(0, 0, 255, 1)">const</span> ABase64String, AFileName: <span style="color: rgba(0, 0, 255, 1)">string</span><span style="color: rgba(0, 0, 0, 1)">; AImage: TImage);
</span><span style="color: rgba(0, 128, 128, 1)"> 2</span> <span style="color: rgba(0, 0, 255, 1)">var</span>
<span style="color: rgba(0, 128, 128, 1)"> 3</span> <span style="color: rgba(0, 0, 0, 1)">InputBytes: TBytes;
</span><span style="color: rgba(0, 128, 128, 1)"> 4</span> <span style="color: rgba(0, 0, 0, 1)">OutputStream: TMemoryStream;
</span><span style="color: rgba(0, 128, 128, 1)"> 5</span>
<span style="color: rgba(0, 128, 128, 1)"> 6</span> <span style="color: rgba(0, 0, 0, 1)">Png: TPNGImage;
</span><span style="color: rgba(0, 128, 128, 1)"> 7</span> <span style="color: rgba(0, 0, 0, 1)">LInputStream: TFileStream;
</span><span style="color: rgba(0, 128, 128, 1)"> 8</span> <span style="color: rgba(0, 0, 0, 1)">LOutputStream: TMemoryStream;
</span><span style="color: rgba(0, 128, 128, 1)"> 9</span> <span style="color: rgba(0, 0, 255, 1)">begin</span>
<span style="color: rgba(0, 128, 128, 1)">10</span> <span style="color: rgba(0, 128, 0, 1)">//</span><span style="color: rgba(0, 128, 0, 1)"> 将Base64编码的字符串转换为原始二进制数据</span>
<span style="color: rgba(0, 128, 128, 1)">11</span> InputBytes :=<span style="color: rgba(0, 0, 0, 1)"> TNetEncoding.Base64.DecodeStringToBytes(ABase64String);
</span><span style="color: rgba(0, 128, 128, 1)">12</span>
<span style="color: rgba(0, 128, 128, 1)">13</span> <span style="color: rgba(0, 128, 0, 1)">//</span><span style="color: rgba(0, 128, 0, 1)"> 将二进制数据保存到文件</span>
<span style="color: rgba(0, 128, 128, 1)">14</span> OutputStream := TMemoryStream.<span style="color: rgba(0, 0, 255, 1)">Create</span><span style="color: rgba(0, 0, 0, 1)">;
</span><span style="color: rgba(0, 128, 128, 1)">15</span> <span style="color: rgba(0, 0, 255, 1)">try</span>
<span style="color: rgba(0, 128, 128, 1)">16</span> OutputStream.WriteBuffer(InputBytes[<span style="color: rgba(128, 0, 128, 1)">0</span><span style="color: rgba(0, 0, 0, 1)">], Length(InputBytes));
</span><span style="color: rgba(0, 128, 128, 1)">17</span> <span style="color: rgba(0, 0, 0, 1)"> OutputStream.SaveToFile(AFileName);
</span><span style="color: rgba(0, 128, 128, 1)">18</span> <span style="color: rgba(0, 0, 255, 1)">finally</span>
<span style="color: rgba(0, 128, 128, 1)">19</span> <span style="color: rgba(0, 0, 0, 1)"> OutputStream.Free;
</span><span style="color: rgba(0, 128, 128, 1)">20</span> <span style="color: rgba(0, 0, 255, 1)">end</span><span style="color: rgba(0, 0, 0, 1)">;
</span><span style="color: rgba(0, 128, 128, 1)">21</span>
<span style="color: rgba(0, 128, 128, 1)">22</span> <span style="color: rgba(0, 128, 0, 1)">//</span><span style="color: rgba(0, 128, 0, 1)"> 或者将二进制数据加载到TImage组件中</span>
<span style="color: rgba(0, 128, 128, 1)">23</span> LInputStream := TFileStream.<span style="color: rgba(0, 0, 255, 1)">Create</span>(AFileName, fmOpenRead <span style="color: rgba(0, 0, 255, 1)">or</span><span style="color: rgba(0, 0, 0, 1)"> fmShareDenyWrite);
</span><span style="color: rgba(0, 128, 128, 1)">24</span> Png := TPNGImage.<span style="color: rgba(0, 0, 255, 1)">Create</span><span style="color: rgba(0, 0, 0, 1)">;
</span><span style="color: rgba(0, 128, 128, 1)">25</span> <span style="color: rgba(0, 0, 255, 1)">try</span>
<span style="color: rgba(0, 128, 128, 1)">26</span> <span style="color: rgba(0, 0, 0, 1)"> Png.LoadFromStream(LInputStream);
</span><span style="color: rgba(0, 128, 128, 1)">27</span>
<span style="color: rgba(0, 128, 128, 1)">28</span> <span style="color: rgba(0, 0, 255, 1)">if</span> AImage <> <span style="color: rgba(0, 0, 255, 1)">nil</span> <span style="color: rgba(0, 0, 255, 1)">then</span>
<span style="color: rgba(0, 128, 128, 1)">29</span> <span style="color: rgba(0, 0, 0, 1)"> AImage.Picture.Assign(Png);
</span><span style="color: rgba(0, 128, 128, 1)">30</span> <span style="color: rgba(0, 0, 255, 1)">finally</span>
<span style="color: rgba(0, 128, 128, 1)">31</span> <span style="color: rgba(0, 0, 0, 1)"> Png.Free;
</span><span style="color: rgba(0, 128, 128, 1)">32</span> <span style="color: rgba(0, 0, 0, 1)"> LInputStream.Free;
</span><span style="color: rgba(0, 128, 128, 1)">33</span> <span style="color: rgba(0, 0, 255, 1)">end</span><span style="color: rgba(0, 0, 0, 1)">;
</span><span style="color: rgba(0, 128, 128, 1)">34</span> <span style="color: rgba(0, 0, 255, 1)">end</span>;</pre>
</div>
<p><strong>直接从字符流转PNG加载</strong></p>
<div class="cnblogs_code">
<pre><span style="color: rgba(0, 128, 128, 1)"> 1</span> <span style="color: rgba(0, 0, 255, 1)">procedure</span> TForm1.Base64ToImage(<span style="color: rgba(0, 0, 255, 1)">const</span> ABase64String, AFileName: <span style="color: rgba(0, 0, 255, 1)">string</span><span style="color: rgba(0, 0, 0, 1)">; AImage: TImage);
</span><span style="color: rgba(0, 128, 128, 1)"> 2</span> <span style="color: rgba(0, 0, 255, 1)">var</span>
<span style="color: rgba(0, 128, 128, 1)"> 3</span> <span style="color: rgba(0, 0, 0, 1)">InputBytes: TBytes;
</span><span style="color: rgba(0, 128, 128, 1)"> 4</span> <span style="color: rgba(0, 0, 0, 1)">Png: TPNGImage;
</span><span style="color: rgba(0, 128, 128, 1)"> 5</span> <span style="color: rgba(0, 0, 0, 1)">oBytesStream: TBytesStream;
</span><span style="color: rgba(0, 128, 128, 1)"> 6</span> <span style="color: rgba(0, 0, 255, 1)">begin</span>
<span style="color: rgba(0, 128, 128, 1)"> 7</span> <span style="color: rgba(0, 128, 0, 1)">//</span><span style="color: rgba(0, 128, 0, 1)"> 将Base64编码的字符串转换为原始二进制数据</span>
<span style="color: rgba(0, 128, 128, 1)"> 8</span> InputBytes :=<span style="color: rgba(0, 0, 0, 1)"> TNetEncoding.Base64.DecodeStringToBytes(ABase64String);
</span><span style="color: rgba(0, 128, 128, 1)"> 9</span>
<span style="color: rgba(0, 128, 128, 1)">10</span> <span style="color: rgba(0, 128, 0, 1)">//</span><span style="color: rgba(0, 128, 0, 1)"> 或者将二进制数据加载到TImage组件中</span>
<span style="color: rgba(0, 128, 128, 1)">11</span> oBytesStream := TBytesStream.<span style="color: rgba(0, 0, 255, 1)">Create</span><span style="color: rgba(0, 0, 0, 1)">(InputBytes);
</span><span style="color: rgba(0, 128, 128, 1)">12</span> Png := TPNGImage.<span style="color: rgba(0, 0, 255, 1)">Create</span><span style="color: rgba(0, 0, 0, 1)">;
</span><span style="color: rgba(0, 128, 128, 1)">13</span> <span style="color: rgba(0, 0, 255, 1)">try</span>
<span style="color: rgba(0, 128, 128, 1)">14</span> <span style="color: rgba(0, 0, 0, 1)"> Png.LoadFromStream(oBytesStream);
</span><span style="color: rgba(0, 128, 128, 1)">15</span>
<span style="color: rgba(0, 128, 128, 1)">16</span> <span style="color: rgba(0, 0, 255, 1)">if</span> AImage <> <span style="color: rgba(0, 0, 255, 1)">nil</span> <span style="color: rgba(0, 0, 255, 1)">then</span>
<span style="color: rgba(0, 128, 128, 1)">17</span> <span style="color: rgba(0, 0, 0, 1)"> AImage.Picture.Assign(Png);
</span><span style="color: rgba(0, 128, 128, 1)">18</span> <span style="color: rgba(0, 0, 255, 1)">finally</span>
<span style="color: rgba(0, 128, 128, 1)">19</span> <span style="color: rgba(0, 0, 0, 1)"> Png.Free;
</span><span style="color: rgba(0, 128, 128, 1)">20</span> <span style="color: rgba(0, 0, 255, 1)">end</span><span style="color: rgba(0, 0, 0, 1)">;
</span><span style="color: rgba(0, 128, 128, 1)">21</span> <span style="color: rgba(0, 0, 255, 1)">end</span>;</pre>
</div>
<p> </p>
<p> </p>
<div id="qb-sougou-search" style="display: none; opacity: 0">
<p>翻译</p>
<p class="last-btn">搜索</p>
<p class="last-btn">复制</p>
<iframe width="320" height="240"></iframe></div>
</div>
<div id="MySignature" role="contentinfo">
<div id="AllanboltSignature">
<div>作者:疯狂Delphi</div>
<div>出处:https://www.cnblogs.com/FKdelphi/</div>
<div>本文版权归作者和博客园共有,欢迎转载,但未经作者同意必须保留此段声明,且在文章页面明显位置给出原文连接,否则保留追究法律责任的权利.</div>
</div>
<div class="div_masklayer" id="div_masklayer"></div>
<div class="div_popup" id="Div_popup">
<p class="mid">欢迎关注我,一起进步!扫描下方二维码即可加我</p>
<img class="img_zfb" id="img_zfb" width="150" src="https://images.cnblogs.com/cnblogs_com/FKdelphi/1101510/o_251208113944_QQ.png">
<img class="img_zfb" id="img_zfb" width="150" src="https://images.cnblogs.com/cnblogs_com/FKdelphi/1101510/o_251208115029_WX.png">
</div><br><br>
来源:https://www.cnblogs.com/FKdelphi/p/17512778.html
頁:
[1]