使用shell_exec()保存图像 - 使用imagejpeg& jpegoptim,与stdin / stdinout

时间:2015-06-21 19:36:20

标签: php shell-exec jpegoptim

我将图像保存两次,一次是用imagejpeg创建的,然后用jpegoptim压缩和覆盖。我怎么能一下子做到这一点,所以我不是两次保存图像?

$im = imagecreatefromstring($imageString);
imagejpeg($im, 'img/test.jpg', 100);
shell_exec("jpegoptim img/test.jpg");

Jpegoptim有stdin and stdout,但我很难理解如何使用它们。

我想用shell保存图像,所以我想像这样:

imagejpeg($im);
shell_exec("jpegoptim --stdin > img/test.jpg");

但是唉,它不像我想象的那样有用。

1 个答案:

答案 0 :(得分:1)

虽然这可能效果不佳,但这是一个只能将最终结果写入磁盘的解决方案:

// I'm not sure about that, as I don't have jpegoptim installed 
$cmd = "jpegoptim --stdin > img/test.jpg";
// Use output buffer to save the output of imagejpeg
ob_start(); 
imagejpeg($img, NULL, 100); 
imagedestroy($img); 
$img = ob_get_clean();
// $img now contains the binary data of the jpeg image
// start jpegoptim and get a handle to stdin 
$handle = popen($cmd, 'w');
// write the image to stdin
fwrite($handle, $img."\n");

如果脚本继续运行,请不要忘记关闭所有句柄。