Страница 1 из 2

Imagick

Добавлено: 10 окт 2012, 21:58
ossinkine
Здравствуйте.
Установил OS 4.6.6, подключил PHP 5.3.17. Следующий код не работает:
$image = new Imagick($filename);
Если заходить через браузер, просто через пару секунд отдается пустая страница.
Добавил cmd.exe в закладки, пытаюсь запустить файл через командную строку, через пару секунд вылетает окно "Прекращена работа команды CLI":
Изображение
Никаких ошибок при этом не падает ни в вывод, ни в лог.
Файл существует и доступен для чтения. Перепробовал разные картинки, дело не в них.

Добавлено: 11 окт 2012, 01:02
Максим
Спасибо, проблему вижу, в следующем обновлении постараюсь исправить. А пока отключите расширение Imagick в PHP 5.3 и используйте php 5.4 если аймэджик требуется.

Добавлено спустя 1 час 57 минут 42 секунды:
Ну вот, ошибку устранил, в следующем релизе все будет в порядке. Спасибо!

Добавлено: 11 окт 2012, 18:43
ossinkine
Вам спасибо, Максим!

Добавлено: 13 окт 2012, 11:59
ossinkine
В новой версии 4.6.7 ситуация немного изменилась. PHP не падает, но при исполнении этого же кода выбрасывается исключение ImagickException с текстом:
no decode delegate for this image format `image.jpg' @ error/constitute.c/ReadImage/550
Так же пробовал с разными файлами, результат один.

Добавлено: 13 окт 2012, 12:30
Максим
У меня такой код прекрасно работает:
$images = new Imagick(dirname(__FILE__)."/splash.jpg");

И даже создается превьюшка:
<?php
$images = new Imagick(dirname(__FILE__)."/splash.jpg");
//вычисляем масштаб сторон (хотим сделать с максимальной стороной 64)
$scale  = max($images->getImageWidth(), $images->getImageHeight()) / 64;
 
//вот этой фишки не хватает в примере из мануала на php.net
$images = $images->coalesceImages();
 
//вычисляем рамеры сторон с учетом масштаба
$width  = round($images->getImageWidth()  / $scale);
$height = round($images->getImageHeight() / $scale);
 
//и ресайзим каждый кадр в цикле
do {
        $images->scaleImage($width, $height);
} while ($images->nextImage());
 
//оптимизируем слои
$images->optimizeImageLayers();
 
//освобождаем память
$images = $images->deconstructImages();
 
//сохраняем анимацию в small.gif
$images->writeImages(dirname(__FILE__)."/small.gif", true);
?>

Добавлено: 19 фев 2013, 20:31
ufadev
Возникла аналогичная проблема, как у товарища ossinkine.
win7, x64, php 5.3.21, open server 4.7.7

Вылечилось подсовыванием бинарников от последней версии ImageMagick 6.8.3 (x86) в директорию \modules\imagemagick .

Добавлено: 19 фев 2013, 20:41
Максим
ufadev писал(а):Возникла аналогичная проблема, как у товарища ossinkine.
win7, x64, php 5.3.21, open server 4.7.7

Вылечилось подсовыванием бинарников от последней версии ImageMagick 6.8.3 (x86) в директорию \modules\imagemagick .
Подсовывать никуда ничего не нужно, всё и так работает. А у товарища ossinkine ничего не работаело лишь потому, что он указывал не прямой путь до картинки целиком, а относительный.

Добавлено: 19 фев 2013, 20:48
ufadev
Никаких изображений.
http://www.php.net/manual/en/imagick.examples-1.php
Example #4 Filling text with gradient
<?php
$im = new Imagick();
$im->newPseudoImage(50, 50, "gradient:red-black");
// ...
ловим
Uncaught exception 'ImagickException' with message 'NoDecodeDelegateForThisImageFormat `red-black' @ error/constitute.c/ReadImage/532' 
с бинарниками от 6.8.3, соотв-но не ловим.
кладем обратно бинарники, идущие с OS - история повторяется.

Добавлено: 19 фев 2013, 21:04
Максим
ufadev писал(а):Никаких изображений.
http://www.php.net/manual/en/imagick.examples-1.php
Example #4 Filling text with gradient
<?php
$im = new Imagick();
$im->newPseudoImage(50, 50, "gradient:red-black");
// ...
ловим
Uncaught exception 'ImagickException' with message 'NoDecodeDelegateForThisImageFormat `red-black' @ error/constitute.c/ReadImage/532' 
с бинарниками от 6.8.3, соотв-но не ловим.
кладем обратно бинарники, идущие с OS - история повторяется.
Не подтверждаю, всё работает прекрасно, ничего не валится. Так что смотрите у себя, что вы там с Open Server сделали. Может у вас в системе свой Imagick стоит, его нужно удалить.

Добавлено: 19 фев 2013, 21:19
ufadev
Нет, Imagick отсутствовал на момент возникновения проблемы, в каком-либо виде. Но всё равно спасибо за попытку помочь. Проблема решена заменой файлов и более не беспокоит.