使用 shell_exec() 保存图像 - 使用 imagejpeg 和 jpegoptim,使用 stdin / stdinout
Saving an image with shell_exec() - using imagejpeg & jpegoptim, with stdin / stdinout
我保存了两次图像,一次是用 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");
可惜,并没有我想象的那么好
虽然这可能不会表现得更好,但这是一个只将最终结果写入磁盘的解决方案:
// 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");
如果您的脚本保持 运行.
,请不要忘记在之后关闭所有句柄
我保存了两次图像,一次是用 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");
可惜,并没有我想象的那么好
虽然这可能不会表现得更好,但这是一个只将最终结果写入磁盘的解决方案:
// 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");
如果您的脚本保持 运行.
,请不要忘记在之后关闭所有句柄