Я ищу способ изменить DPI для файлов изображений PNG. Используя ImageMagick это легко:
$ convert -density 150 -units pixelsperinch file.png file.png
Проблема в том, что я буду запускать эту команду из своего приложения, работающего на нескольких виртуальных машинах, на которых не установлен ImageMagick. Я могу отправить пакеты обновления на эти виртуальные машины, но в случае ImageMagick это добавит около 30 МБ к пакету обновления, что слишком много для моего варианта использования.
Короче говоря : есть ли способ изменить DPI для файла PNG с помощью небольшого (как в размере пакета) инструмента командной строки?
При желании, изменение байтов в файле необработанного изображения тоже будет хорошо, если кто-то знает, где их искать ...
pHYs
готовый фрагмент из PNG, созданного в Photoshop.Ответы:
2,10 МБ достаточно мало? Если да, используйте NConvert и пакетную команду, например:
Для чего нужен NConvert?
XnView - это приложение на основе графического интерфейса, вы можете изменять и манипулировать изображениями, используя графический интерфейс пользователя. NConvert имеет примерно те же возможности, что и XnView, но это инструмент командной строки и не имеет графического интерфейса пользователя. Вы можете использовать NConvert в пакетных скриптах или другое приложение может вызвать его.
Полезные ссылки
источник
Вы упомянули, что будете запускать эту команду «из своего приложения», и это заставляет меня поверить, что вы написали это приложение или поддерживаете его. Тем не менее, существуют ImageMagick API для нескольких языков, и вы можете использовать один из них, чтобы добавить функциональность прямо в вашу существующую программу. Увеличение размера пакета будет зависеть от того, на каком языке написано ваше приложение, и от того, статически или динамически вы связываете библиотеку, но я думаю, что это будет значительно меньше, чем увеличение на 30 МБ.
Другой вариант - не включать весь пакет ImageMagick. Вы можете загрузить файл ImageMagick Zip (который составляет всего 13 МБ), извлечь только
convert
инструмент и его зависимости и распространить его на виртуальные машины. Существует инструмент под названием Dependency Walker , который можно использовать для определения зависимостей этогоconvert
инструмента.источник
Используйте
-size
флаг в программе netpbm pnmtopng . Используемые единицы измерения - пиксели на метр. В следующем примере для newfile.png будет установлено значение 300 точек на дюйм.источник
Ну, вы могли бы потенциально использовать скрипт Python.
Источник .
источник
Подходящая командная строка Image convert для Magick для этого будет использовать аргумент -resample:
источник