Domanda

Questa è davvero una domanda in due parti, dal momento che io non pienamente capire come queste cose funzionano ancora:

La mia situazione: Sto scrivendo una web app che consente all'utente di caricare un'immagine. La mia app ridimensiona poi a qualcosa visualizzabile. (Ad esempio: 640x480-ish) e salva il file per un uso successivo

Le mie domande:

  1. Dato un file JPEG arbitraria, è possibile dire che cosa il livello di qualità è, in modo che posso usare quella stessa qualità quando si salva l'immagine ridimensionata?
  2. Questo importa nemmeno ?? Dovrei essere salvare tutte le immagini a un livello decente? (Ad esempio: 75-80), a prescindere dalla qualità originale

Io non sono così sicuro di questo perché, come immagino che: (prendiamo un esempio estremo), se qualcuno avesse un'immagine da 5 megapixel salvato a qualità 0, sarebbe blocchi come qualsiasi cosa. Ridurre le dimensioni dell'immagine a 640x480, il blockiness sarebbe appianato e malapena meno evidente ... fino a quando ho salvato con la qualità di nuovo ... 0

D'altra estremità dello spettro, se non ci fosse un'immagine che era 800x600 con q = 0, il ridimensionamento a 640x480 non sta per cambiare il fatto che sembra che schifo più totale, in modo da salvare con q = 80 sarebbe ridondante.

Sono io nemmeno vicino?

sto usando libreria GD2 su PHP se questo è di alcuna utilità

È stato utile?

Soluzione

  1. JPEG è un formato lossy. Ogni volta che si salva un stessa immagine JPEG, a prescindere dal livello di qualità, si riduce la qualità dell'immagine reale. Quindi anche se avete fatto ottenere un livello di qualità dal file, non si poteva sostenere che la stessa qualità quando si salva un JPEG di nuovo (anche in qualità = 100).

  2. Si deve salvare il formato JPEG ad alta come una qualità, come si può permettere in termini di dimensione del file. Oppure utilizzare un formato senza perdita di come PNG.

I file JPEG di bassa qualità non si trasformino in più blocchi. Invece profondità di colore è ridotto e dettaglio di sezioni dell'immagine vengono rimossi. Non si può contare sulle immagini di qualità inferiore essendo blocchi e guardando ok a piccole dimensioni.

Secondo il spec JFIF. il numero di qualità (0-100) non è memorizzato nell'intestazione dell'immagine, anche se la densità di pixel orizzontale e verticale è memorizzato.

Altri suggerimenti

È possibile visualizzare il livello di compressione da ImageMagick. Download e installazione istruzioni si possono trovare presso i sito ufficiale .

Dopo averlo installato, eseguire il seguente comando dalla riga di comando:

identify -format '%Q' yourimage.jpg

E si dovrebbe ottenere il valore da 0 (bassa qualità, piccola dimensione del file) a 100 (di alta qualità, grande dimensione del file).

Sorgente d'Informazione

Per i futuri visitatori, il controllo della qualità di un determinato jpeg, si potrebbe utilizzare ImageMagick utensili:

$> identify -format '%Q' filename.jpg
   92%

algoritmo di compressione JPEG ha alcuni parametri che influenzano sulla qualità dell'immagine risultato.

Uno di tali parametri sono tabelle di quantizzazione che definisce quanti bit saranno utilizzati su ciascun coefficiente. Diversi programmi utilizzano diverse tabelle quatization.

Alcuni programmi permettono all'utente di impostare il livello di qualità 0-100. Ma non c'è defenition comune di questo numero. L'immagine fatta con Photoshop con qualità 60% richiede 46 KB, mentre l'immagine fatta con GIMP bastano 26 KB.

tabelle di quantizzazione sono anche diversi.

Ci sono altri parametri come sottocampionamento, il metodo DCT ed ecc.

Quindi, non si può descrivere tutti loro dal numero unico livello di qualità e non è possibile confrontare la qualità delle immagini JPEG per singolo numero. Ma è possibile creare tale numero come Photoshop o GIMP che descriverà compromiss tra dimensioni sulla qualità.

Più informazioni: http://patrakov.blogspot.com/2008/12 /jpeg-quality-is-meaningless-number.html

pratica comune è che si ridimensiona l'immagine a dimensione appropriata e applicare jpeg dopo. In questo caso le immagini enormi e medie avranno la stessa dimensione e la qualità.

Come ci sono già due risposte utilizzando identify, ecco uno che emette anche il nome del file (per la scansione di più file contemporaneamente) :

Se si desidera avere una semplice uscita di filename: quality per l'uso su più immagini, è possibile utilizzare

identify -format '%f: %Q' *

mostrano il nome del file + compressione di tutti i file all'interno della directory corrente.

Quindi, ci sono fondamentalmente due casi ti stanno a cuore:

  1. Se un'immagine in ingresso è troppo alto qualità, può richiedere una quantità inadeguato di spazio. Pertanto, si potrebbe desiderare, per esempio, per ridurre q in entrata = 99 a q = 85.

  2. Se un'immagine in ingresso è troppo bassa qualità, potrebbe essere uno spreco di spazio per aumentare la sua qualità. Se non fosse che un'immagine che ha avuto una grande quantità di dati scartati non magicamente occupano più spazio in caso di aumento della qualità - immagini blocky comprimerà molto bene anche con impostazioni di alta qualità. Quindi, a mio parere è perfettamente OK per sollevare q in entrata = 1 a q = 85.

Da questo penserei semplicemente forzando una qualità decente è una cosa perfettamente accettabile da fare.

Ecco una formula che ho trovato per lavorare bene:

  1. jpg100size (la dimensione non deve superare in byte per 98-100% qualità) = larghezza * altezza / 1.7

  2. jpgxsize = jpg100size * x (x = percentuale, ad esempio 0.65)

Quindi, si potrebbe utilizzare questi per scoprire statisticamente quello che la qualità jpg tuo stato visto l'ultima salvato. se si vuole ottenere il basso per diciamo qualità del 65% e se si vuole evitare il ricampionamento, si dovrebbe confrontare la dimensione inizialmente per assicurarsi che non sia già troppo bassa, e solo allora ridurre la qualità

Ogni nuovo salvataggio del file diminuirà ulteriormente la qualità complessiva, utilizzando i valori di qualità superiore si conserva più di immagine. Indipendentemente da ciò che la qualità dell'immagine originale era.

Se si salvare nuovamente un JPEG utilizzando lo stesso software che lo ha creato in origine, utilizzando le stesse impostazioni, troverete che il danno è ridotto al minimo - l'algoritmo tenderà a buttare fuori le stesse informazioni che ha buttato fuori la prima volta. Non credo che ci sia alcun modo di sapere quale livello è stato selezionato solo guardando il file; anche se si potrebbe, diversi software garantisce quasi parametri e arrotondamenti diversi, facendo una partita quasi impossibile.

Questa può essere una domanda stupida, ma perché si sarebbe preoccupato per micromanaging la qualità del documento? Credo che se si utilizza ImageMagick per fare la conversione, che gestirà la qualità del JPEG per voi per i migliori effetti. http://www.php.net/manual/en/intro.imagick. php

Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top