У меня есть код MagickWand, где MagickReadImage()
не удается (возвращается MagickFalse
) в одной системе, где она работает в другой.
Теперь нет исключений, MagickGetException()
возвращает пустую строку, что означает отсутствие исключения, если я правильно понял документацию.
Файл, который я хочу открыть, находится там, я могу открыть его с помощью других инструментов под тем же пользователем, и magick_wand
Я использую не NULL.
Код вокруг вызова по сути такой:
// read image
MagickBooleanType status = MagickReadImage(magick_wand, fn_selector);
// make sure it worked
if (status == MagickFalse)
{
char *description;
ExceptionType severity;
description=MagickGetException(magick_wand,&severity);
fprintf(stderr,"%s %s %lu :%s: %u\n",GetMagickModule(),description,severity);
description=(char *) MagickRelinquishMemory(description);
fprintf(stderr, "magickwand couldn't read file %s\n", fn_selector);
exit(1);
}
Есть ли способ выяснить, почему не удается вызвать функцию? MagickReadImage()
кажется, вызывает внутреннюю функцию, которую сложно отладить, и я не хочу сам собирать библиотеку MagickWand с добавлением отладочной информации, если в этом нет крайней необходимости.
Использование MagickWand версии 6.8.9.9 (Debian Jessie)
Оказывается (после прохождения strace
) для чтения PDF в ImageMagick требуется Ghostscript исполняемый (/usr/bin/gs
) для установки в системе. Теперь при установке ImageMagick через менеджер пакетов Debian apt ghostscript не является зависимостью, а только рекомендацией библиотеки Magick. К сожалению, Magick не считает необходимым сообщать вам каким-либо образом, что компонент библиотеки отсутствует при сбое вызова чтения.
После установки ghostscript
пакет, все работает как положено.
Других решений пока нет …