NEF в JPG с ImageMagick

Я впервые использую ImageMagick, мне удалось установить все мои зависимости и запустить конвертацию через терминал, но у меня возникли проблемы с запуском некоторых команд из PHP.

Вот тот, который меня полностью озадачил, он отлично работает в терминале:

 convert DSC4741.nef result.jpg

Но это не будет работать в PHP:

$im = new Imagick( 'DSC4741.nef' );
$im->setImageFormat( 'jpg' );
$im->writeImage( 'result.jpg' );
$im->clear();
$im->destroy();

Я могу конвертировать jpeg без проблем с PHP, но он отказывается делать .NEF.

Вот что я проверил:

  • Разрешения для файла хорошие (всемирная запись)
  • Я могу конвертировать JPG с точным кодом
  • Я изменил расширение на нижний регистр
  • Убрано предшествующее подчеркивание из имени файла

Любая помощь приветствуется!


person Circle B    schedule 26.03.2015    source источник
comment
Мне любопытно, раз ты не сказал. Что происходит, когда вы делаете это с .nef Вы получаете какие-либо ошибки? Что происходит? ^^   -  person Jon    schedule 26.03.2015
comment
Файл NEF может иметь размер 30+ МБ, поэтому у вас могут возникнуть проблемы с местом. Просто для теста попробуйте установить размер изображения значительно меньше, скажем, 1024x768, прежде чем читать его, и посмотрите, поможет ли это... используйте $im->setSize()   -  person Mark Setchell    schedule 26.03.2015
comment
@Jon Я просто получаю пустую страницу, а консоль браузера выдает 500 Internal Server Error.   -  person Circle B    schedule 26.03.2015
comment
@MarkSetchell Я пытался поставить 800x600, но все равно делает то же самое. :-(   -  person Circle B    schedule 26.03.2015
comment
Вы используете OS X, Linux или Windows? Вы запускаете PHP из Apache или просто используете автономный скрипт, такой как #!/usr/bin/php <?php $im=... ?>   -  person Mark Setchell    schedule 26.03.2015
comment
@MarkSetchell Я использую OS X Yosemite, а PHP работает из Apache — у меня есть локальный сайт с php-страницей, содержащей только этот код.   -  person Circle B    schedule 26.03.2015
comment
Можете ли вы обернуть свой код в автономный сценарий оболочки, как показано выше, и попробовать запустить его вне Apache? Затем мы можем включить/выключить Apache как источник проблемы.   -  person Mark Setchell    schedule 26.03.2015
comment
@MarkSetchell Ну, возможно, проблема в Apache, мне потребовалось некоторое время, чтобы научиться запускать многострочный PHP-скрипт в терминале, но я сделал это, используя php -a, и он прекрасно вывел result.jpg.   -  person Circle B    schedule 26.03.2015
comment
Лучше посмотрите в своих журналах Apache на наличие ошибок...   -  person Mark Setchell    schedule 26.03.2015
comment
Ошибка, которую я получаю, похоже, указывает на то, что мне нужен ghostscript для запуска Imagick, но у меня возникли проблемы с его установкой. Я отпишусь, когда разберусь с делами.   -  person Circle B    schedule 26.03.2015
comment
@MarkSetchell У меня установлен ghostscript, но я все еще получаю эту ошибку: PHP Fatal error: Uncaught exception 'ImagickException' with message 'unable to open image /var/tmp/magick-55934Og9gB9rb6P.ppm': Нет такого файла или каталога @ error/blob.c/OpenBlob/2675' в /Users/benowen /Sites/testing/image.php:2\nТрассировка стека:\n#0 /Users/benowen/Sites/testing/image.php(2): Imagick-›__construct('DSC4741.nef')\n#1 { main}\n добавлено в /Users/benowen/Sites/testing/image.php в строке 2`. Я не могу найти в Интернете ничего, что указывало бы на что-то обнадеживающее. :-(   -  person Circle B    schedule 27.03.2015
comment
Я действительно не могу себе представить, зачем вам нужен ghostscript для обработки файла NEF. К сожалению, у меня больше нет идей, которые можно было бы предложить, кроме того, что вы можете попробовать на форуме ImageMagick. Опубликуйте здесь и примите свой собственный ответ, если разберетесь, пожалуйста. Удачи.   -  person Mark Setchell    schedule 27.03.2015
comment
@MarkSetchell Да, это был своего рода выстрел в темноте, но я нашел место, где говорилось, что нужен Ghostscript ... Думаю, нет. Я отправлю обратно, надеюсь!   -  person Circle B    schedule 27.03.2015
comment
Еще одна идея... преобразование из NEF использует двоичный/исполняемый файл ufraw-batch. Попробуйте найти его в своей системе и убедитесь, что он находится в PATH, который PHP использует при работе под Apache.   -  person Mark Setchell    schedule 27.03.2015
comment
Я искал вокруг, но я не могу найти ничего о том, как добавить (тем более посмотреть, что там) PATH для PHP. :-(   -  person Circle B    schedule 27.03.2015


Ответы (1)


Проблема в том, что вы не используете абсолютные пути. Используйте что-то вроде __FILE__ или на компьютере с Windows (вам нужно заменить обратную косую черту на прямую):

$im = new Imagick( str_replace('\\', '/', dirname(__FILE__)) . '/DSC4741.nef' );
$im->setImageFormat( 'jpg' );
$im->writeImage( str_replace('\\', '/', dirname(__FILE__)) . '/result.jpg' );
$im->clear();
$im->destroy();

Если это не решит проблему, возможно, внешняя программа для преобразования этих форматов файлов не установлена ​​или не связана с imagemagick. См. здесь: Imagick не может открывать изображения DNG

person Sturmi    schedule 18.09.2015