ImageMagic вывод результата на экран

Fallen

Новичок
ImageMagic вывод результата на экран

$file_from="test.jpg";
$file_to="1.jpg";
$file_to2="2.jpg";

exec("convert $file_from -coalesce $file_to");
exec("convert $file_to -resize 500x500 $file_to2");

тут всё понятно, на входе - файл, на выходе файл

а как сделать, чтобы файл test.jpg был обработан imagemagic так, чтобы результат не сохранять в файл, и сразу вывести на экран?
 

Фанат

oncle terrible
Команда форума
сначала договориться с имеджиком, чтобы он картинку выдавал в аутпут.
 

Фанат

oncle terrible
Команда форума
ну, почитать ман по нему.
извини, я не помню на память все ключи от всех утилит имиджмеджика.

но вообще, я бы на твоем месте разделил эти две задачи.
один раз ресайз, а потом отдавать готовую картинку
 

Fallen

Новичок
а зачем делить? создавать какие-то временные файлы по-моему не рационально...

нашёл про стандартный ввод-вывод, вместо имени файл "-"

спасибО!
 

AndreyKl

Новичок
там у него, у имедж меджика черточка "-" значит вывод в аутпут. А что такое "на экран" в твоём понимании? Это в браузер? Или прям на экран? Если в браузер - то черточку на выходе и это всё через popen(наверное) вызывать, тока сначала послать заголовки о том, что это картинка. Если "на экран" то через пайп на программу display (она входит в имедж меджик).

пример: я хочу конвертнуть 1.jpg в гиф и показать его на экране:

PHP:
convert 1.jpg gif:- | display
если ты всё же имел ввиду под "на экране" - в окне браузера, то что-то такое (просто как в какую сторону думать, этот код не проверял на работоспособность, но подобные вещи делал много раз).

PHP:
$fp = popen( "/usr/bin/convert $file_from -coalesce gif:-","r" );
$buffer = '';
while( !feof( $fp ) ) {
    $buffer .= fgets( $fp, 4096 );
}
pclose($fp);

header( "Content-type: image/gif" );
echo $buffer;
 

Fallen

Новичок
чем этот способ лучше того, чтобы выдавать картинку "на лету"?

-~{}~ 01.09.08 13:07:

AndreyKl , код работает...но ОЧЕНЬ медленно :(
 

AndreyKl

Новичок
Да, ещё момент. Имэдж меджик в гиф сохраняет очень медленно. Так что если тебе не нужет гиф - сделай что то вроде "jpg:-" например, вместо "gif:-".

-~{}~ 01.09.08 13:37:

Автор оригинала: tony2001
вы уверены, что в картинках есть строки?
[m]fread[/m]!
1. Вы отчасти правы. fread использовать, конечно, лучше. Это более "подходящая функция".

2. Честно говоря, я уверен что там есть символы. Раз есть символы - есть и строки. Если Вы спрашиваете о ноль-прерываемых строках, то это как повезёт. Но какая разница? Не поясните ли?
 

Fallen

Новичок
fread - как определить какое количество байт указать для чтения? мы же не знаем размер "ресайзнутой" картинки?
 

AndreyKl

Новичок
Автор оригинала: Fallen
fread - как определить какое количество байт указать для чтения? мы же не знаем размер "ресайзнутой" картинки?
Всё точно так же, только название функции поменять. fread, насколько я понимаю, должна работать абсолютно идеентично fgets в данном случае, за исключением того, что fgets читает length-1 байт, а fread - length байт за раз. Но это в данном случае не важно. В самом коде нужно изменить только имя функции (fgets на fread).
 

tony2001

TeaM PHPClub
>2. Честно говоря, я уверен что там есть символы. Раз есть символы - есть и строки.
>Если Вы спрашиваете о ноль-прерываемых строках, то это как повезёт.
>Но какая разница? Не поясните ли?

действительно.
какая разница - читать N байт или читать N байт и искать в них конец строки, который не нужен?

>fread - как определить какое количество байт указать для чтения? мы же не знаем размер "ресайзнутой" картинки?

я бы на вашем месте не беспокоился.
больше данных, чем есть, функция не прочитает.
 

Fallen

Новичок
fgets, fread - одинаково медленно
есть какие-то еще варианты кроме popen?
 

AndreyKl

Новичок
Да, Вы правы, я об этом не подумал. Функция fgets, в общем случае, должна работать медленее, чем fread. Спасибо за разьяснения.

-~{}~ 01.09.08 13:59:

Автор оригинала: Fallen
fgets, fread - одинаково медленно
есть какие-то еще варианты кроме popen?
Подумать головой. Медленно работает, наверняка, не функция чтения, а сама конвертация. Поэтому, меняй или не меняй функции чтения, результат будет один и тот же.
 
Сверху