我正在尝试使用mogrify
(GraphicsMagicks)压缩jpg,我需要将结果存储在变量中。
$compressed_jpg_content = shell_exec("gm mogrify -quality 85 - < ".escapeshellarg($image_path)." $filename.jpg");
if (!$compressed_jpg_content) {
throw new Exception("Conversion to compressed JPG failed");
}
然而它不起作用,我得到Conversion to compressed JPG failed
,我认为我的命令有问题
修改
感谢 Allen Butler
在这种情况下,$image_path
实际上是一个POST变量而$filename
是I4tWX0HI.jpg
错误:gm mogrify: Unable to open file (I4tWX0HI.jpg)
错误非常明显,因为I4tWX0HI.jpg
尚不存在。话虽如此,如何修改命令使其将内容放入变量而不是尝试打开文件
此致
答案 0 :(得分:2)
根据gm mogrify手册,如果用新图像覆盖原始文件,则无法在命令行上指定目标图像。
您可以尝试以下选项之一:
1)希望如果从STDIN mogrify ready,它将输出到STDOUT。无法测试它,所以它是一个客人。在这种情况下,您会注意到您跳过了输出文件:
$compressed_jpg_content = shell_exec("gm mogrify -quality 85 - < ".escapeshellarg($image_path));
b)让mogrify更改图像(忽略您拥有的文件名),然后读取图像数据:
$compressed_jpg_content = shell_exec("gm mogrify -quality 85 ".escapeshellarg($image_path)." && cat ".escapeshellarg($image_path));
c)如果您不想更改原始文件,请在以下位置复制:
$tmpfile = tempnam(sys_get_temp_dir(), "image_");
copy($image, $tmpfile);
shell_exec("gm mogrify -quality 85 ".escapeshellarg(tmpfile));
$compressed_jpg_content = file_get_contents($tmpfile);
unlink($tmpfile);