2010-04-21 14 views
16

Uso ImageMagick per convertire alcuni file da un formato all'altro. Ho sempre avuto l'impressione che i file .png dovessero essere grandi/piccoli come .jpg se non più piccoli e decisamente più piccoli di .gif.Perché i file ".png" prodotti da ImageMagick sono molto più grandi dei file ".jpg" e ".gif"?

Tuttavia quando ho eseguito

convert photo.jpg photo.png 

I file che sto ricevendo fuori è di circa 6 volte più grande della jpg originale.
Il jpg originale è una foto normale di 300x500 px, 52 kb. L'output è un png corretto delle stesse dimensioni, ma la dimensione è di circa 307 kb?

Qualcuno sa cosa sta succedendo? Sto facendo qualcosa di sbagliato?

P.S .:

Ho provato sia su Debian e Windows con gli stessi risultati.

PPS:

Anche quando aggiungo ridimensionare opzione per questo e ridimensionare a 10000 x 10000. La conversione e il ridimensionamento di jpg dura pochi secondi, ma funziona, se faccio la stessa di png, io sono finite STRT a corto di memoria del tutto

PPPS: Per le persone che continuano a marcatura questa domanda come duplicato di PNG vs. GIF vs. JPEG vs. SVG - When best to use?. Per favore leggi attentamente e capisci la domanda. Non è un duplicato, dal momento che questa domanda richiede "i file prodotti in modo programmatico con un'applicazione specifica (image magick). La domanda che contrassegni come duplicata, sta chiedendo quale formato di immagine è meglio usare sul web. Due domande diverse.

+1

Forse chiamarlo ** Come posso produrre PNG più piccoli da ImageMagick? ** – sam

+0

nah .. Volevo scoprire perché, una volta che so 'il perché 'del problema, di solito riesco a capire la soluzione' the how ':-) – konung

+1

Ricerca PNG indicizzati, la sua dimensione sarà paragonabile a GIF (poiché GIF è i ndexed). – user

risposta

12

JPG è un algoritmo lossy compression mentre PNG è un lossless one.

Questo fatto da solo (in generale) renderà le immagini JPG più piccole di quelle PNG. Puoi modificare i rapporti di compressione per ogni formato, quindi potrebbe anche essere che non stai comprimendo i tuoi file PNG tanto quanto i tuoi JPG.

Per un'immagine fotografica, il salvataggio come JPG di solito produce un file più piccolo del PNG in quanto c'è più rumore o casualità nell'immagine per la compressione con cui lavorare. Le immagini create da strumenti di grafica tendono ad avere più bordi e aree di colore uniforme che comprimono meglio in PNG.

Se si dispone di testo nell'immagine, PNG produrrà un'immagine di qualità migliore poiché i bordi più duri dei personaggi non saranno sfocati come se si utilizzasse JPG.

GIF è più piccolo perché si basa su una tavolozza di colori (di 256 colori) anziché sui valori RGB separati per ciascun pixel (o gruppo di pixel) in JPG e PNG.

+0

Chris, grazie per una rapida risposta. Non ho ancora elaborato le immagini in modo programmatico e, provenendo da prodotti gui come Photoshop e Paintshop, sono abituato ad avere png più piccoli, poiché per impostazione predefinita usano pallet ottimizzati. C'è un modo per ottenere imagemagick per ridurre la qualità al fine di fare la conversione in png più veloce? – konung

+0

@Nick - Non conosco imagemagick quindi non posso dirlo con certezza, ma ci dovrebbe essere un pulsante "opzioni" da qualche parte, sia nella finestra di dialogo di salvataggio che nelle preferenze. – ChrisF

+0

Non ho idea di imagemagick ma qualsiasi buon editor di immagini dovrebbe avere una funzione che riduce il numero di colori usati nell'immagine. – michalburger1

5

Il formato di file .jpeg è un formato con perdita, getta via le informazioni. Il che rende buoni i rapporti di compressione. Il formato di file .gif non è lossy ma perde altre informazioni, supporta solo 256 colori. Il formato di file .png non è lossy e conserva la gamma di colori.

2

Dipende dal tipo di immagine. La compressione lossy di JPEG funziona molto bene su immagini con molte sfumature di colore (ad esempio foto).

Provalo su un'immagine composta da aree con lo stesso colore separate da spigoli vivi (gli screenshot sono buoni, a meno che non mostrino uno sfondo del desktop fotografico, ei bordi della finestra e la barra delle applicazioni di Vista e Windows 7 tendono anche a confondere questo su). Il JPEG non è adatto a questo tipo di cose e probabilmente troverai PNG che comprime meglio (probabilmente anche meglio di GIF).

9

Il formato PNG può fornire immagini di 24 bit per pixel o 8 bit per pixel. JPG è un formato a 24 bit, ma utilizza una compressione con perdita per ridurre in modo significativo le dimensioni del file. PNG e GIF usano entrambi compressione senza perdita di dati, ma GIF funziona solo con 8 bit, quindi richiede che l'immagine abbia 256 colori o meno - questo spesso si traduce in un'immagine più grana.

Provare le opzioni -colors e -dither in ImageMagick per ridurre il numero di bit nell'output PNG. A quel punto dovrebbe essere paragonabile alla dimensione del file GIF. Se è necessario ridurlo ulteriormente, ci sono programmi di utilità per ottimizzare il PNG.

+0

Mark grazie per il consiglio, ma anche -colors 254 per png, produce e immagine più grande di jpeg. Immagino che dovrò salvare tutto come jpg. Grazie – konung

+0

@Nick, una domanda: le tue gif sono anche più grandi delle jpg? Se è così, probabilmente hai fatto la scelta giusta. Png potrebbe essere più piccolo di gif, ma non con un enorme margine. –

+0

sì gif sono decisamente più grandi - non c'è da stupirsi, ho sempre pensato che il png avrebbe prodotto risultati migliori. Ma dal momento che in realtà non cerco la qualità qui, ma piuttosto per le dimensioni più piccole, jpg lo è. Grazie – konung

16

La cosa fondamentale da notare qui è che ogni formato di file immagine è il migliore per scopi specifici.

JPEG sta per “Joint Photographic Experts Group”. Tale diritto non dovrebbe dire che il formato di file .JPG è ottimizzato per le fotografie . Non funziona così bene per grafica, loghi, sfondi sfumati o piastrellati/con motivi e così via. Gli artefatti DCT (Discreet Cosine Transform) di .JPG (gli artefatti "a blocchi" che tutti conosciamo e detestiamo) sono molto più evidenti con disegni al tratto e loghi che con le foto.

PNG ha sostituito GIF per tutto ciò che GIF è sempre stato valido, tranne uno, e solo perché non è emerso uno standard chiaro: animazioni. .GIF animati sono ben noti sul Web. Esistono due standard in competizione per i PNG animati: APNG e MNG.

APNG è supportato nella maggior parte dei browser moderni ed è anche completamente retrocompatibile (l'estensione del file è .PNG, non .APNG, e se qualsiasi programma in grado di visualizzare .PNGs ma non sa APNG è "alimentato" un APNG, visualizzerà un'immagine stand-in della scelta dello sviluppatore, o il primo fotogramma dell'animazione se non viene fornito tale stand-in - per quanto riguarda il vecchio programma, è solo un ordinario frame singolo .PNG con quella immagine in esso - il resto è ignorato con sicurezza). Gecko (FF, ecc.) e Presto (Opera) lo supportano in modo nativo, e Google Chrome (utilizzando Webkit) può con un componente aggiuntivo.

MNG ha il supporto del team di sviluppo del formato PNG effettivo, ma è il suo formato e non è retrocompatibile, ma è più potente e flessibile. Al momento, solo i browser basati su KHTML (Konquerer) lo supportano: non Trident (IE), Gecko, Webkit (Chrome, Chromium, Safari), né Presto.

PNG fa tutto (tranne le animazioni se non ottimizzato con APNG) che GIF fa, e meglio. A parità di tutti gli altri, un .PNG sarà quasi sempre più piccolo di un .GIF alla stessa risoluzione e profondità di bit. Come .GIF, .PNG può supportare profondità di colore fino a 8 bit per pixel in modalità indexed color (paletted), ma a differenza di .GIF (ma come .JPEG) supporta anche la modalità direct-color a 24 bit per pixel.

In entrambe le modalità può aggiungere 8 bit di trasparenza alfa, a differenza GIF (che può solo fare trasparenza scala di colore [scegliere un colore della palette essere sostituito con trasparenza 100%, alias invisibilità] -. Anche il PNG può farlo). La trasparenza alfa produce risultati molto migliori rispetto alla trasparenza indicizzata, poiché i pixel possono essere parzialmente trasparenti, mentre con trasparenza indicizzata (l'unico tipo disponibile in.GIF) le tue scelte sono opache o invisibili. Questo fa sì che gli "aloni" attorno agli oggetti non rettangolari quando vengono posizionati contro i colori di sfondo diversi da quelli di .GIF o indicizzati .PNG era originariamente "opaco" contro. Inoltre impedisce di essere in grado di eseguire effetti come bagliori, ombre esterne e, naturalmente, oggetti colorati trasparenti (senza retinatura). La trasparenza alfa può fare tutte quelle cose con facilità, contro quasi tutti gli sfondi (i bagliori sarebbero in gran parte invisibili su uno sfondo bianco, e le ombre cadenti sarebbero invisibili sul nero, ma tu sai cosa intendo).

Sì, si può fare a 8 bit alpha trasparenza in un scala di colore .PNG! E indovina cosa? Anche Microsoft Internet Explorer 6 può visualizzarli bene, completi di trasparenza! Sono solo i file .PNG a 32 bit (colore RGB a 24 bit + alfa 8 bit) che IE6 ha soffocato e visualizzato come grigio!

Il programma più noto che può esportare PNG8 (colore indicizzato) con la trasparenza alpha è Adobe (in precedenza Macromedia) Fireworks. Photoshop "Salva per Web e dispositivi" (almeno a partire da CS3) non poteva farlo, nonostante avesse praticamente rimosso la funzione da Fireworks quando Adobe acquistava Macromedia. Può salvare PNG8, ma solo con trasparenza a colori indicizzati.

In ogni caso, i PNG completi a 32 bit (o anche a 24 bit) saranno piuttosto grandi, anche se di solito molto più piccoli dell'equivalente più vicino .BMP o .TGA o .TIFF non compresso o alcuni (a meno che non si stia provando a fare una fotografia con esso - questo è ciò che JPEG è per!). Solitamente è leggermente più piccolo di .RLE (senza compressione compressa .BMP) o compresso senza perdita. TIF, a parità di tutti gli altri.

A differenza della maggior parte di questi altri formati, PNG supporta anche il colore RGB a 48 bit, con opzionali 16 bit di trasparenza alfa, per una qualità estremamente elevata (molto più elevata della maggior parte dei monitor). Questi sono i migliori usati come un formato di memorizzazione intermedio, per conservare le informazioni da uno scanner ad alta profondità di bit o da una fotocamera (modalità RAW) o alcuni di questi. Le loro dimensioni dei file sarebbero piuttosto grandi, nonostante la compressione senza perdita di dati.

Una cosa che .PNG al momento non può fare è gestire spazi di colore non RGB come CMYK o L * a * b.

In breve:

  • Per le fotografie, utilizzare .JPG.
  • Per disegni al tratto e logo di colore limitato, utilizzare il colore indicizzato .PNG (PNG8), con trasparenza alfa se necessario.
  • Per la linea arte e loghi di colore esteso (ad es un sacco di riempimenti sfumati, cromo-tipo effetti di riflessione metallici, ecc ), utilizzare .PNG-colore diretta (PNG24) con l'alfa, se necessario, se si vuole la migliore qualità o la necessità di trasparenza (e non preoccupatevi se non funziona in IE6 o utilizzare una delle varie soluzioni di IE6 per i PNG trasparenti), e non preoccupatevi dei file più grandi e dell'uso della larghezza di banda. Altrimenti, usa .JPG, ma sii consapevole che la qualità sarà degradata. Potrebbe essere necessario alzare piuttosto in alto la qualità JPEG, specialmente per i logo o altri elementi grafici con "testo" al loro interno, il che ridurrebbe le dimensioni del file.
  • Per animazioni non Flash/Silverlight/video/HTML5 Canvas, .GIF se la scelta principale al momento è pronta per passare a APNG (non penso che l'MNG la supererà, nonostante il supporto più ufficiale dagli sviluppatori JPEG).
+0

Ti sei registrato su questo sito solo per scrivere un articolo di enciclopedia sui formati di compressione delle immagini? Ammettilo, lo hai fatto. Eccellente, +1. –

+0

Un grande articolo informativo che completa la domanda - che riguardava la conversione da jpg a png usando ImageMagick, non i meriti di un formato o di un altro, che non ho familiarità con. Forse questa risposta dovrebbe essere classificata come wiki della comunità? – konung

+0

Grazie, Tom. Ma no, ho già avuto l'account. –

2

Rispondere a: Qualcuno sa cosa sta succedendo? Sto facendo qualcosa di sbagliato?

sì che studio questo, non si sta facendo nulla di male, è prodotta a 8 bit/colore RGB PNG ho risolto con ridurre o comprimere png con pngnq (http://pngnq.sourceforge.net/) che producono 8 bit/colore mappa dei colori PNG.

pngnq mi sembra la più migliorato del progetto, dal momento che è un fork di altri come pngquant ecc, e si trova normalmente in flusso principale di distribuzioni Linux quindi ho solo fare questo:

convert photo.jpg png:- | pngnq -s 1 > photo.png 

Per l'ultima upvoter (2016): pngnq come deprecato a favore di pngquant (https://github.com/pornel/pngquant)

Problemi correlati