使用 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 等)