2013-03-29 3 views
1

Я хочу иметь возможность создавать эскизы изображений, не сохраняя их на сервере. До сих пор я придумал этот код, но я не уверен, что делать с $code.PHP & ImageMagick - код изображения в изображение?

$code = system("convert galleries/13_0.jpg -resize 400x270 /dev/stdout");

Как бы я идти о подключении $code в PHP/HTML, чтобы получить необработанный код изображения для отображения как JPG?

ответ

1

Я бы посоветовал вам не делать этого из системы, как вы описали.

У PHP есть библиотеки для такого рода вещей.

http://www.php.net/manual/en/ref.image.php. http://php.net/manual/en/book.imagick.php.

И есть библиотеки, которые обертывают эти нативные функции для управления изображениями. https://imagine.readthedocs.org/en/latest/

Таким образом, весь ваш код находится в PHP, и вы не полагаетесь на систему, чтобы что-либо сделать (предоставление PHP было скомпилировано с использованием библиотек, как описано. Они являются стандартными библиотеками, доступными в большинстве сборников PHP, и вы можете их активировать если они не включены).

Редактировать: Я защищаю вас.

  • Открыть исходное изображение.
  • Преобразование исходного изображения,
  • Возвращенный источник изображения

с IMAGINE вы могли бы сделать это таким образом:

$imagine = new Imagine\Gd\Imagine(); 
$size = new Imagine\Image\Box(400, 270); 

$imagine->open('/path/to/large_image.jpg') 
->resize($size) 
->show('jpg'); 
+0

Библиотеки PHP, такие как imagick, полагаются на систему. Хотя использование библиотек считается хорошей практикой, по моему опыту часто бывает более эффективным и практичным использование системных вызовов. Для чего OP пытается это сделать, гораздо эффективнее сделать это с помощью системного вызова. – Alasdair

+0

Точно, Alsadair. Я также просто понял, что проект, который я хотел знать, будет перенесен из Linux в коробку Windoze. У меня нет контроля над развитием, поэтому это (к сожалению) не сработает. Если бы я использовал библиотеки PHP, могу ли я иметь поддержку с несколькими ОС? –

+0

Как я уже сказал - до тех пор, пока вы имеете доступ к библиотекам, как описано. Я тоже перестраиваю платформу - и выполнение базовых системных вызовов не более переносимо, чем то, что я защищаю. GD доступен во всех версиях PHP. Никто не упомянул, что это должно быть самым эффективным решением. 95% временного кода не нужно оптимизировать по мере описания. Если вы беспокоитесь об оптимизации здесь, вы, вероятно, делаете что-то неправильно (например, оптимизируете где-то еще) – calumbrodie

0

Если код $ - это необработанные данные, у вас может быть другой файл getimage.php, который будет записывать данные, но установить тип содержимого заголовка в image/JPEG? Таким образом, ваш img src будет выглядеть как getimage.php? Image = 13_0.jpg?

0

Я хотел бы сохранить его в памяти, а затем прочитать его, а затем удалить его. /dev/shm - это ramdrive на большинстве Linux-систем.

$tmp = '/dev/shm/'.uniqid('',true).'.jpg'; 
system("convert galleries/13_0.jpg -resize 400x270 $tmp"); 
header("Content-Type: image/jpeg"); 
header('Content-Length: '.filesize($tmp)); 
readfile($tmp); 
unlink($tmp); 
+0

Мне нравится идея сохранить его в ОЗУ, но возможно ли это сделать для меня без отправки заголовков? Этот конкретный проект находится в Wordpress, поэтому я не могу отправлять заголовки внутри плагина. Если мне действительно нужно, я могу сделать для этого отдельный PHP-файл.Это потребует поиска базы данных, чтобы убедиться, что имя изображения является допустимым и будет добавлять другой запрос страницы, но он, вероятно, будет кэшировать таким образом. Я посмотрю, есть ли у кого-нибудь какие-либо идеи, но пока это выглядит лучше. –

+0

Конечно, вам не нужно отправлять заголовки, если вы этого не хотите. – Alasdair

+0

Комментарий в моем ответе касается совместимости с кросс-платформой, а затем в вашем ответе поговорить о/dev/shm ... Действительно? Если вы просто сделаете преобразование в php-библиотеке, то измененное изображение уже будет в памяти, и вы можете просто вернуть его в браузер. Я отредактировал свой ответ. – calumbrodie

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