Неустранимая ошибка: необработанное исключение «ImagickException» с сообщением «NoDecodeDelegateForThisImageFormat».

Я не могу заставить imagick работать с локальным xampp.

Ошибка

Fatal error: Uncaught exception 'ImagickException' with message 'NoDecodeDelegateForThisImageFormat

Код

$im = new imagick();
$im->setResolution(300, 300);
$im->readimage($base_dir . 'files/PDF/test.pdf');
$im->setIteratorIndex($i);
$im->setImageFormat('jpeg');
$newimgname = time();
$im->resizeImage(500, 500, Imagick::FILTER_LANCZOS, 1);
$im->cropImage(100, 100, 0, 0);
$thumbnail = $im->getImageBlob();

person Quality Analyst    schedule 11.09.2014    source источник
comment
Возможно дублирование этого сообщения   -  person    schedule 11.09.2014
comment
Добро пожаловать в StackOverflow. Пожалуйста, дайте краткое описание того, что вы пытаетесь сделать, что вы пытались исправить эту проблему и какой результат вы ожидаете.   -  person JamesENL    schedule 11.09.2014
comment
Ого, крутая толпа сегодня. @JeremyMiller Это не дубликат, это связано с PDF-файлами. @ Джеймс Мэсси Вопрос короткий, но на самом деле он завершен.   -  person Danack    schedule 11.09.2014
comment
@Danack Это очень похоже, но ваш ответ очень целенаправленный и чрезвычайно полезный. +1   -  person    schedule 11.09.2014


Ответы (3)


Imagick вызывает библиотеку ImageMagick для обработки изображений. Библиотека Image Magick на самом деле не обрабатывает PDF-файлы сама по себе, она вызывает GhostScript для их обработки и создания PNG или Jpeg, которые Image Magick затем читает.

NoDecodeDelegateForThisImageFormat говорит, что Image Magick не может вызвать программу делегата, которая, по его мнению, должна делегировать декодирование, например, GhostScript.

Решение состоит в том, чтобы установить GhostScript через yum или apt, и он «должен» работать.

Если это все еще не работает, вам следует проверить, что находится в файле делегатов для Image Magick (http://www.imagemagick.org/source/delegates.xml) для записи в формате PDF и убедитесь, что ее можно вызвать из командной строки, т. е. убедиться, что Image Magick также сможет ее найти.

person Danack    schedule 11.09.2014
comment
Я уже установил последнюю версию GhostScript на свой компьютер с Windows (8.1). Еще не повезло! - person Quality Analyst; 12.09.2014
comment
Как сказать Image Magick, где найти GhostScript, если GS установлен в Windows на C:\ghostscript? - person user3383675; 22.09.2016

От моего администратора сервера: вы можете попробовать GraphicsMagick в качестве альтернативы Image Magick.

Домашняя страница Graphics Magick

person Nicolas Giszpenc    schedule 14.08.2017

Даже после установки GhostScript мы не смогли заставить работать код imagick после перехода с AWS на Azure, получив ошибку Delegate. В итоге мы преобразовали код PHP в командную строку Image Magick, используя функцию execInBackground для запуска команды (Страница PHP.net Exec())

ПРИМЕЧАНИЕ. Командная строка не работала при использовании только exec. PHP-скрипт не завершался нормально.

//from PHP.net 
function execInBackground($cmd) { 
    if (substr(php_uname(), 0, 7) == "Windows"){ 
        pclose(popen("start /B ". $cmd, "r"));  
    } 
    else { 
        exec($cmd . " > /dev/null &");   
    } 
}

//create a thumbnail from the first page of PDF
//old php code
/*
$image_magick = new imagick(); 
$image_magick->setbackgroundcolor('white');
$image_magick->readImage($file_path . "[0]");
$image_magick = $image_magick->flattenImages();
$image_magick->setResolution(300,300);
$image_magick->thumbnailImage(102, 102, true);
$image_magick->setImageFormat('jpg');
$image_magick->writeImage($thumbnail_path);
*/

//command line syntax
$cmd = "magick convert " . chr(34) . $file_path . "[0]" . chr(34) . " -background white -flatten -resample " . chr(34) . "300x300" . chr(34) . " -thumbnail " . chr(34) . "102x102" . chr(34) . " -format jpg -write " . chr(34) . $thumbnail_path . chr(34);
execInBackground($cmd);
person Nicolas Giszpenc    schedule 14.08.2017