2015-06-21 2 views
1

Я сохраняю изображение дважды, один раз, когда создаю его с помощью imagejpeg, а затем сжимаю и перезаписываю jpegoptim. Как я могу сделать это одним махом, так что я не сохраняю изображение дважды?Сохранение изображения с помощью shell_exec() - с помощью imagejpeg и jpegoptim, с stdin/stdinout

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

Jpegoptim имеют stdin and stdout, но я изо всех сил, чтобы понять, как использовать их.

Я хочу, чтобы сохранить изображение с оболочкой, так что я полагаю, что-то вроде этого:

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

Но увы, он не работает, как я себе представлял.

+1

Вам нужна труба: ['popen'] (http://php.net/popen). Потому что 'imagejpeg' и' shell_exec' не имеют ничего общего, потому что они написаны друг за другом. – mario

ответ

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"); 

Не забудьте закрыть все ручки потом, если ваш скрипт продолжает работать.

Смежные вопросы