使用GD库读取和写入jpg文件

时间:2015-02-26 20:41:57

标签: php gd

我使用图像作为数据库中的BLOB,以便使用Imagick进行进一步处理。 但现在我需要使用图像文件来做同样的事情。

我转换“旧”脚本使用文件时遇到了一些问题。我将其更改为imageCreateFromJpeg(用于读取源文件)和imagejpeg()(用于编写图像文件)。但它不起作用。 但源文件未更新。我究竟做错了什么?

$image = ImageCreateFromString(base64_decode($file->source));
$image_width = imagesx($image);
$image_height = imagesy($image);

/* Do some processing
some... ImageCreateTrueColor(...);

ImageCopy(...);
ImageCopyResized(...);
ImageCopyMerge(...);
*/

ob_start();
imagejpeg($image, NULL, 100);
$processed_image = base64_encode(ob_get_contents());
imagedestroy($image);
ob_end_clean();

我把它更改为:

$file = 'path/to/image.jpg';
$image = imageCreateFromJpeg($file); // read from file
$image_width = imagesx($image);
$image_height = imagesy($image);

/* Do some processing
some... ImageCreateTrueColor(...);

ImageCopy(...);
ImageCopyResized(...);
ImageCopyMerge(...);
*/

ob_start();
imagejpeg($image, $file, 100); // write everthing to the same file
imagedestroy($image);
ob_end_clean();

1 个答案:

答案 0 :(得分:0)

以下是一个工作示例(包括调整大小 - 设置目标$width$height的值):

    list($originalWidth, $originalHeight) = getimagesize($file);
    $src  = imagecreatefromjpeg($file);
    $dest = imagecreatetruecolor($width, $height);
    ImageCopyResampled($dest, $src, 0, 0, 0, 0, $width, $height, $originalWidth, $originalHeight);
    header('Content-Type: image/jpeg');
    ob_start();
    imagejpeg($dest);
    $size = ob_get_length();
    header("Content-Length: " . $size);
    ob_end_flush();
    imagedestroy($dest);
    exit;