Сбой ImageMagick для JPEG с неправильным значением плотности

Я пытаюсь преобразовать изображение с помощью ImageMagick. Я обрезаю и ресэмплирую до 112 DPI:

convert myimg.jpg -crop 1024x683+0+0 -resize 100% -resample 112 downsample.jpg

Скрипт проходит через множество изображений с разным разрешением и уменьшает их.

Тем не менее, определенный файл расклеил скрипт. Каким-то образом файл имеет DPI 1 (?!?), Поэтому он пытается сэмплировать его до 112 из 1, и попытка пожирает всю мою оперативную память и приводит к зависанию скрипта.

identify -verbose myimage.jpg
Image: myimage.jpg
Format: JPEG (Joint Photographic Experts Group JFIF format)
Class: DirectClass
Geometry: 1024x683+0+0
Resolution: 1x1
Print size: 1024x683

Есть ли аргумент / флаг, который я могу использовать с ImageMagick, чтобы предотвратить это, может быть, что-то, что говорит это только для даунсамплинга?

2

Решение

Может ли ваша ошибка быть связана с …

Для форматов, которые не поддерживают разрешение изображения, исходное разрешение изображения должно быть указано через -density в командной строке перед указанием разрешения повторной выборки.

Я знаю, что JPEG поддерживает разрешение, но, возможно, оно неправильно в заголовке EXIF ​​или как-то неоднозначно / перепутано со встроенной миниатюрой (опять же, возможно, предполагается, что это единица измерения). Я бы посмотрел более внимательно на [-density] аргумент (http://www.imagemagick.org/script/command-line-options.php#density) и как это связано с разрешением и плотностью в определенных форматах.

Что касается работы вашего скрипта. Кажется, вы можете разбить операции на более отдельные действия? Если вы не можете удовлетворить convert с использованием -density Я бы посмотрел на тестирование для случая, который, как вы знаете, провалился, и просто пропустил. Могли бы разобрать результаты identify или просто провал convert, Вы выполняете это в вызовах оболочки из PHP, да?

2

Другие решения

Других решений пока нет …

По вопросам рекламы [email protected]