Come modificare DPI di un file PNG? (nella riga di comando, senza ImageMagick)


9

Sto cercando un modo per modificare il DPI sui file di immagine PNG. Utilizzando ImageMagick questo è facile:

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

Il problema è che eseguirò questo comando dalla mia applicazione, in esecuzione su più macchine virtuali, su cui non è installato ImageMagick. Posso inviare i pacchetti di aggiornamento a queste macchine virtuali, ma nel caso di ImageMagick aggiungerebbe circa 30 MB a un pacchetto di aggiornamento, che è un po 'troppo per il mio caso d'uso.

Per farla breve : c'è un modo per cambiare il DPI su un file PNG usando uno strumento da riga di comando piccolo (come nella dimensione del pacchetto)?

Opzionalmente, anche la modifica dei byte in un file di immagine non elaborato andrebbe bene, se qualcuno sa dove cercarli ...


Puoi prendere in considerazione la tua implementazione. La manipolazione dei blocchi PNG è abbastanza semplice. Se hai intenzione di applicare un solo DPI specifico a tutti loro, non hai nemmeno bisogno di avere una funzione di checksum funzionante, basta copiare un pHYspezzo prefabbricato da un PNG realizzato in Photoshop.
Zdenek,

Risposte:


6

2.10 MB sono abbastanza piccoli? Se sì, usa NConvert e un comando batch come:

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

A cosa serve NConvert?

XnView è un'applicazione basata su GUI, è possibile modificare e manipolare le immagini utilizzando un'interfaccia utente grafica. NConvert ha circa le stesse funzionalità di XnView, ma è uno strumento da riga di comando e non ha un'interfaccia utente grafica. È possibile utilizzare NConvert negli script batch o un'altra applicazione può chiamarlo.

Collegamenti utili

  • Guida per principianti e Wiki con alcuni esempi per iniziare
  • File di aiuto per vedere quali parametri della riga di comando sono disponibili (caricati su pastebin)
  • Un front-end grafico che utilizza Nconvert è XnConvert . Usalo per creare ed esportare file batch Nconvert
  • Forum per Xnconvert e Nconvert per

Grazie, sembra fantastico e probabilmente ti tornerà utile in futuro! In questo caso ho finito per studiare il formato PNG (che per fortuna era abbastanza semplice) e cambiare le immagini attraverso una piccola app personalizzata (15 righe in PHP).
johndodo,

@johndodo Sembra interessante. Vuoi condividere la tua candidatura con noi?
nixda,

Sfortunatamente non sono libero di farlo, ma puoi fare lo stesso leggendo una (fantastica!) Specifica del formato di file PNG e creando un'app che cambia il pezzo di pHY . È davvero semplice quando sai cosa stai facendo.
johndodo,

1

Hai detto che avresti eseguito questo comando "dalla tua applicazione" e questo mi porta a credere di aver scritto questa applicazione o di mantenerla. Detto questo, ci sono API ImageMagick per diverse lingue e potresti usarne una per aggiungere la funzionalità direttamente al tuo programma esistente. L'aumento delle dimensioni del pacchetto dipenderà dalla lingua in cui è scritta la tua applicazione e dal fatto che tu colleghi la libreria staticamente o dinamicamente, ma immagino che sarebbe significativamente inferiore a un aumento di 30 MB.

Un'altra opzione è quella di non includere l'intero pacchetto ImageMagick. È possibile scaricare il file Zip di ImageMagick (che è solo 13 MB BTW), estrarre solo lo convertstrumento e le sue dipendenze e distribuirlo alle VM. Esiste uno strumento chiamato Dependency Walker che è possibile utilizzare per determinare quali sono le dipendenze dello convertstrumento.


1

Usa il -sizeflag nel programma pnmtopng di netpbm . Le unità utilizzate sono pixel per metro. L'esempio seguente imposterà newfile.png su 300 dpi.

pngtopnm <oldfile.png | pnmtopng -size='11811 11811 1' >newfile.png

0

Bene, potresti potenzialmente usare uno script 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")

Fonte .


Il programma di installazione di Python 3.3.2 (escluso il codice sorgente) è di 19.3 MB e il programma di installazione di Python 2.7.5 è di 15.5 MB.
Ha disegnato Chapin il

5
Ciò ridimensionerà l'immagine, non modificherà il DPI.
Bobby,

0

La riga di comando "converti" di Image Magick appropriata dovrebbe usare l'argomento -resample:

convert image.png -resample 150x150 -units pixelsperinch ../ImagesAdjusted/image.png
Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.