9

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

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

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

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

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

5 ответов5

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 для
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")

Источник

0

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

convert image.png -resample 150x150 -units pixelsperinch ../ImagesAdjusted/image.png

Всё ещё ищете ответ? Посмотрите другие вопросы с метками .