使用 imagecreatefromstring() 时 PHP 将图像导出为相同类型(PNG、JPG 等)

Posted

技术标签:

【中文标题】使用 imagecreatefromstring() 时 PHP 将图像导出为相同类型(PNG、JPG 等)【英文标题】:PHP export image as the same type (PNG, JPG, etc) when using imagecreatefromstring() 【发布时间】:2015-09-08 12:48:15 【问题描述】:

我有一个php函数,它接受任意字符串并从中创建图像资源,自动检测图像格式,如下:

$im = imagecreatefromstring($image_data_string);

您肯定知道,当$image_data_string 包含任何受支持的图像类型(如 JPG、PNG 等)时,这会创建 $im 图像资源。

在对 $im 资源进行一些操作(修改一些像素等)之后,我想以相同的格式再次返回图像字符串。也就是说,如果数据字符串包含PNG图像,我想返回生成的PNG图像字符串。如果是 JPG,那么我想将它作为 JPG 以字符串形式返回。

PHP 支持imagejpeg()imagepng() 等功能,所以如果我知道如何检测$im 资源的图像类型,那我就万事大吉了。有像imagesx()imagesy() 这样的函数返回$im 资源的宽度和高度,但我找不到合适的函数来返回$im 资源的图像类型。

我想到的唯一方法是分析原始$image_data_string 的第一个字节以找出图像类型。但我更喜欢为此目的使用本机 PHP 函数,该函数适用于 $im 资源参数。有这样的吗?

谢谢

【问题讨论】:

为什么不使用额外的变量来保存图片扩展名? 你是如何获得 $image_data_string 变量的?您是否也可以在此阶段存储文件类型? 【参考方案1】:

改用此代码

$imgdata = base64_decode($image_data_string);

$f = finfo_open();

$mime_type = finfo_buffer($f, $imgdata, FILEINFO_MIME_TYPE);

$im = imagecreatefromstring($image_data_string);

$filename = 'somerandomname';

switch($mime_type)
    case 'image/png':

        imagepng($image, $filename.'.png');

    break;
    default:

    break;

imagedestroy($im);

【讨论】:

$image_data_string 不是 base64 编码的,所以我认为没有理由对其进行解码。除此之外,感谢您指向 finfo_open(),它回答了这个问题。

以上是关于使用 imagecreatefromstring() 时 PHP 将图像导出为相同类型(PNG、JPG 等)的主要内容,如果未能解决你的问题,请参考以下文章

imagecreatefromstring() [function.imagecreatefromstring] 在这个 PHP 版本中不支持 JPEG

使用 imagecreatefromstring() 时 PHP 将图像导出为相同类型(PNG、JPG 等)

PHP imagecreatefromstring(): gd-jpeg, libjpeg: 可恢复的错误

php给图片加文字水印

php之把两个图片合成

PHP学习笔记:利用gd库给图片打图片水印