将shell输出保存到变量
我想用mogrify
(GraphicsMagicks)压缩JPG,我需要将结果存储在一个变量中。将shell输出保存到变量
$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
,我认为这是我的命令
编辑
由于艾伦·巴特勒
在这种情况下$image_path
问题实际上是POST变量,$filename
是I4tWX0HI.jpg
错误:gm mogrify: Unable to open file (I4tWX0HI.jpg)
的错误是因为I4tWX0HI.jpg
很明显不存在yet.That虽这么说,我怎么能修改命令让它把内容在变,而不是试图打开一个文件
Regards
根据gm mogrify手册,如果用新映像覆盖原始文件,所以无法在命令行中指定目标映像。
你可以尝试以下选项之一:
1)希望,如果从STDIN mogrify准备好了,它会输出到标准输出。无法测试它,所以它是一个客人。你会发现,你跳过输出文件在这种情况下:
$compressed_jpg_content = shell_exec("gm mogrify -quality 85 - < ".escapeshellarg($image_path));
二)让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);
选项b工作正常。该命令如果'$ image_path'是一个BMP,并且我想将它转换为jpg,请更改 – user2650277
您必须使用-format选项将其设置为jpg。然后,Mogrify将输出到.bmp文件扩展名所替换的相同文件名。 JPG。 –
你可以试着在后面加上'2>&1'到命令结束标准错误转换到标准输出和回声出'compressed_jpg_content'看到d的错误ebugging。尝试'$ compressed_jpg_content = shell_exec(“gm mogrify -quality 85 - <.escapeshellarg image_path filename.jpg> &1"); echo $ compressed_jpg_content;' –
@AllenButler检查编辑 – user2650277