php convert.exe (ImageMagick) STDOUT passthru не работает

Я пытаюсь использовать imagemagick из командной строки (в php, да, я знаю, что могу использовать функции imagemagick, но это не вариант) без сохранения в окончательный файл и просто чтения окончательного изображения в стандартный вывод. вот мой код:

$filename = <filepathandname>;
$cmd = IMCMD. $filename . " -resize 105% -";

header('Content-Disposition: inline; filename="'.$filename.'"');
header('Content-Type: application/octet-stream');
header('Content-Length: '.filesize($filename));
header('Content-Type: image/jpeg');
//from here to end returns an empty image
ob_start();
passthru($cmd, $result);
$out = ob_get_contents();
ob_end_clean();
echo ($out);
//end
//readfile($filename); //otherwise this works fine
exit();

Я получаю пустое изображение (0 байт). Я пробовал множество других комбинаций из вопросов на этом сайте, например, просто повторяя STDOUT и т. Д., Но я думаю, что настоящая проблема заключается в том, что я не совсем понимаю, как convert.exe отправляет stdout, и вообще обрабатывал stdout.

какие-нибудь эксперты php / convert.exe там видят что-нибудь очевидное здесь?

0

Решение

Несколько вещей, которые должны помочь …

Во-первых, вы не показываете действующую команду ImageMagick, которую вы выполняете — это поможет людям!

Во-вторых, вам нужно пробел перед именем файла при создании $cmd,

В-третьих, вы сообщаете браузеру размер файла прежде чем увеличить его размер на 5%, поэтому следует ожидать, что нижняя часть вашего изображения будет иногда обрезана!

В-четвертых, вы говорите браузеру, что файл Content-Type: image/jpeg когда на самом деле это только тот же формат, что и входной файл, который может быть PNG или же GIF, например. Если вы не собираетесь проверять тип входного файла и установить Content-Type соответственно, вы должны изменить свой ImageMagick команда для записи jpg:- скорее, чем - в конце, чтобы заставить его выводить JPEG вместо того, чтобы просто отражать тип входного файла, как вы делаете сейчас.

В-пятых, ваше изображение отображается правильно, за исключением того, что в начале файла есть новая строка — я не знаю, почему это так — возможно, это как-то связано с echo, Я изменил ваш код, чтобы просто написать $out без заголовков и перенаправил вывод в файл, затем я сделал это, чтобы вырезать первый байт:

phptest > x.jpg
dd if=x.jpg bs=1 iseek=1 > y.jpg

и полученный файл y.jpg было правильно.

0

Другие решения

Других решений пока нет …

По вопросам рекламы [email protected]