如何在 PHP 中将图像从 base 64 转换为它们的文件类型?
Posted
技术标签:
【中文标题】如何在 PHP 中将图像从 base 64 转换为它们的文件类型?【英文标题】:How do I convert images from base 64 to their file types in PHP? 【发布时间】:2017-03-30 21:33:45 【问题描述】:我有包含图像作为 base 64 字符串的对象,该对象还包含图像的文件名和图像的文件类型(jpeg、png、gif 和 bmp)。 base 64 字符串已经有标签(例如“data:image/png;base64”从一开始就被删除了。
对象($myImg)的格式如下:
$myImg->fileName 包含转换后的图像应保存的名称。
$myImg->fileType 描述了文件应该保存为的格式 - 这用于在 fopen() 函数中指定路径扩展名。
$myImg->b64 包含代表图像的 64 位二进制字符串。
我的函数代码如下:
function toImg(ImageString $myImg)
//Output file is in the same directory as the php script.
//Uses the object's filetype attribute as the file extension.
$outputFile = fopen($myImg->fileName . "." . $myImg->fileType, "w");
$image = base64_decode($myImg->b64);
fwrite($outputFile, $image);
fclose($outputFile);
该函数创建图像文件,但尝试在 Xubuntu Image Viewer 中查看它们时出现错误。错误如下:
解释 JPEG 图像文件时出错(不是 JPEG 文件:以 0x14 0x00 开头)
读取 PNG 图像文件时出现致命错误:不是 PNG 文件。
文件似乎不是 GIF 文件。
BMP 图像有虚假的标题数据。
我查看并遵循了 base64 到图像转换的指南,但没有人遇到这些错误。
【问题讨论】:
如果 base64 数据是有效的图像内容,那应该可以工作。你从哪里得到那个对象?它是如何填充的? 图像数据是从 MS Access 数据库的 XML 文件输出中检索到的。 如果您尝试在浏览器中显示带有<img>
-tag 的base 64 格式的图像(带有data:image/png;base64,
前缀(当然,使用正确的文件类型更改png)会发生什么情况) ? 那有用吗?
图片在我的浏览器中打开时显示为损坏。我假设这意味着 base 64 字符串是无效的。
如果你正确添加了 base64 字符串:<img src="data:image/png;base64,the-bade64-string" />
那么是的。
【参考方案1】:
尝试在浏览器中内嵌显示图像,如下所示:
<img src="data:image/png;base64,the-base64-string" />
(将png
改成正确的图片格式)
如果图像仍然损坏,则图像数据无效。
【讨论】:
【参考方案2】:您可以像这样从 base64 解码图像:
function base64_to_jpeg_img($base64_img_string, $output_img)
$input_file_open = fopen($output_img, "wb");
$data = explode(',', $base64_img_string);
fwrite($input_file_open, base64_decode($data[1]));
fclose($input_file_open);
return $output_img;
希望这会有所帮助!
【讨论】:
他写道,data:image/png;base64
等已经从 bas64 字符串中剥离(这基本上是你的爆炸试图做的)。以上是关于如何在 PHP 中将图像从 base 64 转换为它们的文件类型?的主要内容,如果未能解决你的问题,请参考以下文章