Ho un'applicazione di condivisione foto PHP in cui le immagini caricate dall'utente sono ridimensionate in vari formati di thumb usando ImageMagick.Come rimuovere exif da un JPG senza perdere la qualità dell'immagine?
Come un modo apparentemente "intelligente" di risparmiare sulle dimensioni del file, sto stripping informazioni exif da queste pollici come segue:
$imagick = new Imagick($image);
$imagick->stripImage();
$imagick->writeImage($image);
Questo funziona. Rimuove le informazioni EXIF, dove un pollice di 30 KB salva 12 KB e diventa 18 KB. Un notevole risparmio quando si mostrano molti di questi pollici su una singola pagina.
Il problema tuttavia è che funziona un po 'troppo bene. Le immagini risultanti sembrano perdere molte informazioni sul colore e sembrano "piatte" rispetto alle loro versioni non spogliate.
Sulla base della mia ricerca finora, la mia teoria è che una o entrambe le seguenti condizioni:
- Imagick butta via essenziali informazioni sul profilo colore come parte del processo di strippaggio
- Imagick ricomprime l'immagine al salvataggio, perdita di qualità
Indipendentemente dalla causa del problema, sto cercando un modo per rimuovere le informazioni EXIF in modo tale da non influire sulla qualità dell'immagine o sul colore stesso.
È possibile?
Aggiornamento:
in base alla risposta di Gerald Schneider, ho provato far rispettare l'impostazione di qualità al 100% prima di "strippaggio" l'immagine:
$imagick = new Imagick($image);
$imagick->setCompression(imagick::COMPRESSION_JPEG);
$imagick->setCompressionQuality(100);
$imagick->stripImage();
$imagick->writeImage($image);
Purtroppo, il problema rimane. Di seguito è riportato l'esempio di output in cui, nonostante l'impostazione della qualità al 100%, le immagini sono ancora appiattite.
In qualche modo dubito che la rimozione di EXIF riduca di molto le dimensioni del file. Immagino che la riduzione della dimensione del file sia piuttosto dovuta alla ricompressione, magari con una qualità inferiore rispetto a prima. Hai provato a usare 'getCompressionQuality()' e 'setCompressionQuality()'? –
@GeraldSchneider questo dipende. Ho visto file con letteralmente centinaia di kilobyte (quasi mezzo meg in casi estremi) di dati EXIF. Strippare le immagini di EXIF è sempre una buona idea. – mingos
Ciò potrebbe essere vero per un'immagine direttamente da una fotocamera, ma per una miniatura generata? –