php 如何保存imagecreatefromstring()函数创建的图像?

flseospp  于 2023-01-29  发布在  PHP
关注(0)|答案(3)|浏览(150)

下面是我的代码:

$data = 'iVBORw0KGgoAAAANSUhEUgAAABwAAAASCAMAAAB/2U7WAAAABl'
       . 'BMVEUAAAD///+l2Z/dAAAASUlEQVR4XqWQUQoAIAxC2/0vXZDr'
       . 'EX4IJTRkb7lobNUStXsB0jIXIAMSsQnWlsV+wULF4Avk9fLq2r'
       . '8a5HSE35Q3eO2XP1A1wQkZSgETvDtKdQAAAABJRU5ErkJggg==';
$data = base64_decode($data);

$im = imagecreatefromstring($data);
if ($im !== false) {
    header('Content-Type: image/png');
    imagepng($im);
    imagedestroy($im);

}
else {
    echo 'An error occurred.';
}

我想把这样生成的图像保存到一个目录中,该怎么做?

ep6jt1vc

ep6jt1vc1#

以下是imagepng的正确语法:

imagepng($im, "/path/where/you/want/save/the/png.png");

根据PHP manual
bool imagepng(资源$图像[,字符串$文件名[,int $质量[,int $过滤器]]])
filename-保存文件的路径。
如果未设置或为NULL,则直接输出原始图像流。

ubby3x7f

ubby3x7f2#

下面的代码将是有用的:

$data = 'code in bytes'; // replace with an image string in bytes
$data = base64_decode($data); // decode an image
$im = imagecreatefromstring($data); // php function to create image from string
// condition check if valid conversion
if ($im !== false) 
{
    // saves an image to specific location
    $resp = imagepng($im, $_SERVER['DOCUMENT_ROOT'].'folder_location/'.date('ymdhis').'.png');
    // frees image from memory
    imagedestroy($im);
}
else 
{
    // show if any error in bytes data for image
    echo 'An error occurred.'; 
}

请建议如果一些其他更好的方式做!

liwlm1x9

liwlm1x93#

    • 问:如果图像是JPG或GIF怎么办?**

答:当你使用imagecreatefrom ...方法时,图像作为未压缩的位图加载到内存中。此时并不存在真正的图像类型。你可以使用image ...函数将其保存回你想要的任何类型。
来源:https://stackoverflow.com/a/7176074/3705191

但是如果我们想确定字节串的文件类型呢?
  • 在 * 使用imagecreatefromstring( $data_string )之前,* 您作为该函数的参数提供的实际***$data_string****可以 * 用于确定图像类型:
$data = base64_decode($data);
// imagecreatefromstring( $data ); -- DON'T use this just yet

$f = finfo_open();

$mime_type = finfo_buffer($f, $data, FILEINFO_MIME_TYPE);
// $mime_type will hold the MIME type, e.g. image/png

您必须将得到的字符串与常见图像文件的MIME类型(image/jpegimage/pngimage/gif等)进行比较。

$im = imagecreatefromstirng( $data );

if( $mime_type == "image/png" )
  imagepng( $im, "/path/where/you/want/save/the/png.png" );
if( $mime_type == "image/jpeg" )
  imagejpeg( $im, "/path/where/you/want/save/the/jpg_image.jpg" );
// ...

检查此List of Common MIME Types以供参考。

相关问题