2016-06-07 228 views
0

我想用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變量,$filenameI4tWX0HI.jpg

錯誤:gm mogrify: Unable to open file (I4tWX0HI.jpg)

的錯誤是因爲I4tWX0HI.jpg很明顯不存在yet.That雖這麼說,我怎麼能修改命令讓它把內容在變,而不是試圖打開一個文件

Regards

+1

你可以試着在後面加上'2>&1'到命令結束標準錯誤轉換到標準輸出和回聲出'compressed_jpg_content'看到d的錯誤ebugging。嘗試'$ compressed_jpg_content = shell_exec(「gm mogrify -quality 85 - <.escapeshellarg($ image_path)。」$ filename.jpg 2> &1"); echo $ compressed_jpg_content;' –

+0

@AllenButler檢查編輯 – user2650277

回答

2

根據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); 
+0

選項b工作正常。該命令如果'$ image_path'是一個BMP,並且我想將它轉換爲jpg,請更改 – user2650277

+1

您必須使用-format選項將其設置爲jpg。然後,Mogrify將輸出到.bmp文件擴展名所替換的相同文件名。 JPG。 –