Як змінити DPI файлу PNG? (у командному рядку, без ImageMagick)


9

Я шукаю спосіб змінити DPI на файли зображень PNG. Використовувати ImageMagick це просто:

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

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

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

За бажанням, зміна байтів у сирому файлі зображень теж буде добре, якщо хтось знає, де їх шукати ...


Ви можете розглянути можливість власної реалізації. Маніпулювання шматками PNG досить прямолінійно. Якщо ви маєте намір застосувати лише один конкретний DPI до всіх, вам навіть не потрібно мати функціонуючу контрольну суму - просто скопіюйте заздалегідь зроблений pHYsфрагмент з PNG, зробленого в Photoshop.
Зденек

Відповіді:


6

Досить 2,10 МБ? Якщо так, використовуйте NConvert та команду batch:

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

Для чого NConvert?

XnView - додаток на основі GUI, ви можете змінювати та маніпулювати зображеннями за допомогою графічного інтерфейсу користувача. NConvert має приблизно ті ж можливості, що і XnView, але це інструмент командного рядка і не має графічного інтерфейсу користувача. Ви можете використовувати NConvert у пакетних сценаріях або інша програма може викликати це.

Корисні Посилання

  • Посібник для початківців та Wiki з кількома прикладами для початку
  • Файл довідки, щоб побачити, які параметри командного рядка доступні (Завантажено на пастіні)
  • Графічний фронт-контент за допомогою Nconvert - це XnConvert . Використовуйте це для створення та експорту пакетних файлів Nconvert
  • Форум для Xnconvert та Nconvert для

Дякую, виглядає чудово і, мабуть, стане в нагоді в майбутньому! У цьому випадку я закінчив вивчати формат PNG (який, на щастя, був досить простим) та змінив зображення за допомогою невеликого спеціального додатку (15 рядків у PHP).
johndodo

@johndodo Це звучить цікаво. Чи можете ви поділитися своєю заявою з нами?
nixda

На жаль, я не можу це зробити, але ви можете зробити те ж саме, прочитавши (чудову!) Специфікацію формату файлів PNG та зробивши додаток, який змінює шматок pHYs . Це дійсно просто, коли ти дізнаєшся, що робиш.
johndodo

1

Ви згадали, що будете виконувати цю команду "зі своєї програми", і це змушує мене вірити, що ви написали цю програму або підтримуєте її. Однак це є API ImageMagick для декількох мов, і ви можете використовувати одну з них, щоб додати функціональність прямо у вашу існуючу програму. Збільшення розміру пакета залежатиме від того, на якій мові написана ваша заявка та чи зв’язуєте ви бібліотеку статично чи динамічно, але я думаю, що це буде значно меншим, ніж збільшення на 30 Мб.

Інший варіант - не включати весь пакет ImageMagick. Ви можете завантажити Zip-файл ImageMagick (який становить лише 13 Мб BTW) і витягнути лише convertінструмент і його залежності та розповсюдити його у ваших віртуальних машинах. Існує інструмент під назвою Dependency Walker, який ви можете використовувати для визначення залежностей convertінструменту.


1

Використовуйте -sizeпрапор у програмі netpbm pnmtopng . Використовувані одиниці - це пікселі на метр. Наступний приклад встановить для newfile.png значення 300dpi.

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")

Джерело .


Інсталятор Python 3.3.2 (не включаючи вихідний код) становить 19,3 Мб, а інсталятор Python 2.7.5 - 15,5 Мб.
Дрю Шапін

5
Це дозволить змінити розмір зображення, а не змінити DPI.
Боббі

0

Власний командний рядок "перетворити" Magic для цього буде використовувати аргумент -resample:

convert image.png -resample 150x150 -units pixelsperinch ../ImagesAdjusted/image.png
Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.