如何将图像从base 64转换为PHP中的文件类型?

时间:2016-11-16 15:46:34

标签: php png jpeg gif bmp

我有包含图像作为基本64字符串的对象,该对象还包含图像的文件名,以及图像的文件类型(jpeg,png,gif和bmp)。 基本的64个字符串已经有了标签(例如"数据: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图像转换,但没有一个遇到过这些错误。

2 个答案:

答案 0 :(得分:1)

尝试在浏览器中内嵌显示图片,如下所示:

<img src="data:image/png;base64,the-base64-string" />

(将png更改为正确的图片格式)

如果图像仍然损坏,则图像数据无效。

答案 1 :(得分:0)

您可以像这样解码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; 
}

希望这有帮助!