Преобразование в imagemagick неправильно интерпретирует метаданные разрешения или плотности в формате PNG?

Вопрос или проблема

Давайте возьмем лист бумаги формата DIN A4 в формате PNG с https://www.a4-size.com/download/335/?tmstv=1739899566. После распаковки полученного архива мы получим a4-size-portrait-pixels-600dpi.png. Давайте изучим его:

$ exiftool a4-size-portrait-pixels-600dpi.png 
ExifTool Version Number         : 12.57
File Name                       : a4-size-portrait-pixels-600dpi.png
Directory                       : .
File Size                       : 5.2 kB
File Modification Date/Time     : 2020:08:28 10:46:09+02:00
File Access Date/Time           : 2025:02:18 18:47:15+01:00
File Inode Change Date/Time     : 2025:02:18 18:43:03+01:00
File Permissions                : -rw-r--r--
File Type                       : PNG
File Type Extension             : png
MIME Type                       : image/png
Image Width                     : 4961
Image Height                    : 7016
Bit Depth                       : 1
Color Type                      : Palette
Compression                     : Deflate/Inflate
Filter                          : Adaptive
Interlace                       : Noninterlaced
Palette                         : 255 255 255
Image Size                      : 4961x7016
Megapixels                      : 34.8

Как видим, теги разрешения/плотности отсутствуют. Давайте добавим их, используя https://unix.stackexchange.com/a/791125:

$ dpi=600 && exiftool -o a4-size-portrait-pixels-600dpi.exiftool.png -XResolution=$dpi -YResolution=$dpi -ResolutionUnit=inches -PixelsPerUnitX=$(( dpi * 10000 / 254 )) -PixelsPerUnitY="$(( dpi * 10000 / 254 ))" -PixelUnits=meters a4-size-portrait-pixels-600dpi.png 
    1 image files created

Но теперь:

$ convert a4-size-portrait-pixels-600dpi.exiftool.png -density 600 a4-size-portrait-pixels-600dpi.exiftool.convert.pdf
$ pdfinfo a4-size-portrait-pixels-600dpi.exiftool.convert.pdf
Title:           a4-size-portrait-pixels-600dpi.exiftool.convert
Producer:        https://imagemagick.org
CreationDate:    Tue Feb 18 18:55:03 2025 CET
ModDate:         Tue Feb 18 18:55:03 2025 CET
Custom Metadata: no
Metadata Stream: no
Tagged:          no
UserProperties:  no
Suspects:        no
Form:            none
JavaScript:      no
Pages:           1
Encrypted:       no
Page size:       234.378 x 331.465 pts
Page rot:        0
File size:       35775 bytes
Optimized:       no
PDF version:     1.3

Как видим, размер страницы неверен. В постскриптных пунктах правильный размер должен был быть 595 × 842 pts.

Что здесь происходит? Мы слишком много используем exiftool+convert, или convert просто ошибается?

Мы можем предположить, что нам не нужно указывать плотность/разрешение в цепочке инструментов более одного раза. Однако (в идеальном мире) вы должны иметь возможность сколько угодно раз указывать, насколько большой у вас пиксель или точка (в нашем случае 1/600 дюйма в ширину и 1/600 дюйма в высоту) для любого инструмента в цепочке.

Ответ на ваш вопрос должен быть НЕТ. Это потому, что в указанном png-файле отсутствует информация о разрешении или плотности. Вы должны заметить, что в вашем выводе exiftool это не указано. Формат png это позволяет, но в основном только для указания, если ваши пиксели не квадратные.

Я подозреваю, что либо:

  • вы неправильно задали параметры convert.
  • вы неправильно интерпретировали вывод pdfinfo.
  • convert неправильно обработал параметры.

Я подозреваю первое. Не стоит указывать это дважды.

Ответ или решение

Как ИТ-эксперт, я хотел бы предложить детальный анализ возникшей проблемы с использованием ImageMagick и PNG-файлов в связке с метаданными разрешения и плотности.

Теория

Формат PNG хотя и поддерживает метаданные разрешения, в действительности, большинство PNG-файлов не содержит этой информации, поскольку основное назначение формата заключает в себе хранение растровых данных с минимальной сжатием и потерей качества. Следовательно, если PNG-файл изначально не содержит данных о разрешении, любой инструмент, включая convert из ImageMagick, может испытывать трудности в правильной интерпретации физического размера изображения при преобразовании в форматы, где такие данные необходимы, например PDF.

Пример

Рассмотрим шаги, описанные в вашем вопросе:

  1. Получение PNG-файла: Исходный PNG-файл загружен без метаданных разрешения.
  2. Использование ExifTool: С помощью команды exiftool вы добавили метаданные разрешения в ваш PNG-файл, включив параметры -XResolution, -YResolution и другие соответствующие ключи.
  3. Использование Convert: После добавления информации о разрешении, вы преобразовали измененный PNG-файл в PDF, используя convert с флагом -density 600.

Однако, несмотря на это, конечный PDF-файл имел неправильный размер страницы, выраженный в PostScript точках.

Применение

На основании этого примера можно сделать несколько выводов и рекомендаций:

  1. Диагностика проблемы:

    • Формат PNG, как правило, не занимается управлением метаданными разрешения, отсюда возможные проблемы с преобразованием в другие форматы, такие как PDF.
    • ExifTool позволяет добавлять метаданные, но необходимо убедиться, что такие изменения корректно воспринимаются ImageMagick.
    • Возникает необходимость в дополнительной проверке выходного файла, поскольку даже после видимой модификации, инструменты обработки изображений могут не учитывать корректировки.
  2. Корректное использование инструментов:

    • Во-первых, следует проверить параметры командной строки для convert: малейшая ошибка в параметрах может привести к неправильному результату.
    • Обратите внимание на использование флага -density в convert. Он должен интерпретироваться как инструкции к установке разрешения на файл, а не обязательно к изменению физического размера изображения. Может возникнуть конфликт между встроенными метаданными и явными параметрами density.
  3. Рекомендуемые действия:

    • Убедитесь, что метаданные установлены корректно с использованием HexEditor или аналогичного инструмента, чтобы вручную проверить, как метаданные сохранены в PNG-файле.
    • Повторите процедуру, но с иной последовательностью: установите разрешение в convert после загрузки файла, чтобы проверить, действительно ли проблема в компоновке инструментов.
    • Попробуйте есть ли ли такая же проблема при использовании других инструментов соответствия файлов, таких как Photoshop, GIMP и так далее, чтобы исключить возможность ошибки.

Завершая, основной проблемой, возможно, является дуэль между явно задаваемыми вами параметрами и встроенными методами интерпретации, которые используют различные инструменты в цепочке преобразования. Хотя каждый инструмент может предлагать отличные уровни совместимости с определённым типом файла, нередко необходимо перепроверить настройки и удостовериться, что метаданные правильно распознаются и интерпретируются на каждом из этапов обработки.

Оцените материал
Добавить комментарий

Капча загружается...