【发布时间】: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" />那么是的。