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

使用imagecreatefromstring()时,PHP将图像导出为相同类型(PNG、JPG等),php,image,gd,Php,Image,Gd,我有一个PHP函数,它获取任意字符串并从中创建图像资源,自动检测图像格式,如下所示: $im = imagecreatefromstring($image_data_string); 如您所知,当$image\u data\u字符串包含任何受支持的图像类型(如JPG、PNG等)时,这将创建$im图像资源 在对$im资源进行一些操作(修改一些像素等)之后,我想以相同的格式再次返回图像字符串。也就是说,如果数据字符串包含PNG图像,我想返回生成的PNG图像的字符串。如果它是JPG,那么我想以字符串

我有一个PHP函数,它获取任意字符串并从中创建图像资源,自动检测图像格式,如下所示:

$im = imagecreatefromstring($image_data_string);

如您所知,当
$image\u data\u字符串
包含任何受支持的图像类型(如JPG、PNG等)时,这将创建$im图像资源

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

PHP支持
imagejpeg()
imagepng()
和其他函数,因此如果我知道如何检测$im资源的图像类型,那么我就可以了。有像
imagesx()
imagesy()
这样的函数返回
$im
资源的宽度和高度,但我找不到合适的函数返回
$im
资源的图像类型


我想到的唯一方法是分析原始
$image\u data\u string
的第一个字节,以找出图像类型。但是我更喜欢一个本机PHP函数,它可以在$im资源参数上工作。有类似的吗

谢谢

请使用此代码

$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);
请改用此代码

$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\u data\u字符串变量?是否也可以在此阶段存储文件类型?为什么不使用额外的变量来保存图像扩展名?如何获取$image\u data\u string变量?您是否也可以在此阶段存储文件类型?
$image\u data\u string
不是base64编码的,因此我认为没有理由对其进行解码。除此之外,感谢您指向finfo_open(),这回答了问题。
$image_data_string
不是base64编码的,因此我认为没有理由对其进行解码。除此之外,感谢您指向finfo_open(),它回答了问题。