Как изменить DPI файла PNG? (в командной строке, без ImageMagick)

9

Я ищу способ изменить DPI для файлов изображений PNG. Используя ImageMagick это легко:

$ convert -density 150 -units pixelsperinch file.png file.png

Проблема в том, что я буду запускать эту команду из своего приложения, работающего на нескольких виртуальных машинах, на которых не установлен ImageMagick. Я могу отправить пакеты обновления на эти виртуальные машины, но в случае ImageMagick это добавит около 30 МБ к пакету обновления, что слишком много для моего варианта использования.

Короче говоря : есть ли способ изменить DPI для файла PNG с помощью небольшого (как в размере пакета) инструмента командной строки?

При желании, изменение байтов в файле необработанного изображения тоже будет хорошо, если кто-то знает, где их искать ...

johndodo
источник
Вы могли бы рассмотреть возможность сделать свою собственную реализацию. Управление фрагментами PNG достаточно простое. Если вы хотите применить ко всем из них только один определенный DPI, вам даже не нужно иметь рабочую функцию контрольной суммы - просто скопируйте pHYsготовый фрагмент из PNG, созданного в Photoshop.
Зденек

Ответы:

6

2,10 МБ достаточно мало? Если да, используйте NConvert и пакетную команду, например:

nconvert -out png -dpi 150 -keepdocsize -keepfiledate mysource.png

Для чего нужен NConvert?

XnView - это приложение на основе графического интерфейса, вы можете изменять и манипулировать изображениями, используя графический интерфейс пользователя. NConvert имеет примерно те же возможности, что и XnView, но это инструмент командной строки и не имеет графического интерфейса пользователя. Вы можете использовать NConvert в пакетных скриптах или другое приложение может вызвать его.

Полезные ссылки

  • Руководство для начинающих и Wiki с некоторыми примерами для начала
  • Файл справки, чтобы увидеть, какие параметры командной строки доступны (загружено на pastebin)
  • Графический передний конец с помощью Nconvert является XnConvert . Используйте это для создания и экспорта пакетных файлов Nconvert
  • Форум для Xnconvert и Nconvert для
nixda
источник
Спасибо, отлично выглядит и, вероятно, пригодится в будущем! В этом случае я изучил формат PNG (к счастью, достаточно простой) и изменил изображения с помощью небольшого специального приложения (15 строк в PHP).
Johndodo
@johndodo Это звучит интересно. Можете ли вы поделиться с нами своей заявкой?
Никсда
К сожалению, я не могу этого сделать, но вы можете сделать то же самое, прочитав (великолепно!) Спецификацию формата файла PNG и создав приложение, которое изменяет блок pHY . Это действительно просто, когда вы знаете, что делаете.
Johndodo
1

Вы упомянули, что будете запускать эту команду «из своего приложения», и это заставляет меня поверить, что вы написали это приложение или поддерживаете его. Тем не менее, существуют ImageMagick API для нескольких языков, и вы можете использовать один из них, чтобы добавить функциональность прямо в вашу существующую программу. Увеличение размера пакета будет зависеть от того, на каком языке написано ваше приложение, и от того, статически или динамически вы связываете библиотеку, но я думаю, что это будет значительно меньше, чем увеличение на 30 МБ.

Другой вариант - не включать весь пакет ImageMagick. Вы можете загрузить файл ImageMagick Zip (который составляет всего 13 МБ), извлечь только convertинструмент и его зависимости и распространить его на виртуальные машины. Существует инструмент под названием Dependency Walker , который можно использовать для определения зависимостей этого convertинструмента.

Дрю Чапин
источник
1

Используйте -sizeфлаг в программе netpbm pnmtopng . Используемые единицы измерения - пиксели на метр. В следующем примере для newfile.png будет установлено значение 300 точек на дюйм.

pngtopnm <oldfile.png | pnmtopng -size='11811 11811 1' >newfile.png
Диомидис Спинеллис
источник
0

Ну, вы могли бы потенциально использовать скрипт Python.

#!/usr/bin/python
im = Image.open("in.png")
nx, ny = im.size
im2 = im.resize((int(nx*1.5), int(ny*1.5)), Image.BICUBIC)
im2.save("out.png")

Источник .

Goncalo
источник
Установщик Python 3.3.2 (не включая исходный код) составляет 19,3 МБ, а установщик Python 2.7.5 - 15,5 МБ.
Дрю Чапин
5
Это изменит размер изображения, а не изменит DPI.
Бобби
0

Подходящая командная строка Image convert для Magick для этого будет использовать аргумент -resample:

convert image.png -resample 150x150 -units pixelsperinch ../ImagesAdjusted/image.png
tolistim
источник