Pourquoi réduire la taille de l'image augmente son poids ?

Le problème exposé dans ce sujet a été résolu.

Bonjour à tous !

Dans le cadre d’un projet je voulais réduire le poids des images envoyer par les utilisateurs. Pour cela je réduis la taille de l’image si elle est trop grande et j’enlève les données exif pour les JPG. Malheureusement lors de mes essais le poids de l’image est plus grande après le redimensionnement… Quelqu’un c’est pourquoi ? J’utilise Imagick et Intervention.

Merci d’avance pour vos réponses !

Voici mon code :

$img = Image::make($this->file);
if ($img->height() > 750) {
    $img = $img->heighten(725);
}
if ($img->width() > 750) {
    $img = $img->widen(725);
}
$img = $img->save($this->file);
$img->destroy();

// Remove exif
$img = new Imagick($this->file);
$profiles = $img->getImageProfiles("icc", true);
$img->stripImage();
if(!empty($profiles)) {
    $img->profileImage("icc", $profiles['icc']);
}
$img->writeImage($this->file);
$img->destroy();
+0 -0

En fait c’est probablement l’utilisation d’un PNG qui est en cause. Le format PNG est incapable d’adapter un dégradé par lui même. Donc quand on réduit la taille de l’image, l’image est simplifié ce qui crée des vides qui sont comblés par des pixels supplémentaires, ainsi il y a une taille plus conséquente.

Sans rentrer dans le détail, c’est vraiment une question de format et d’algorithme de compression.

Si ton image est remplie de détails style "image naturelle / photo", alors le format JPEG est capable de la compresser plus efficacement, en perdant des informations mais sans que ça ne se voit vraiment à l’œil nu.

À l’opposé, si ton image est un logo, ou plus généralement quelque chose de généré synthétiquement et "clean", la compression PNG est faite pour limiter la perte de qualité dans ce scénario.

Les deux ne sont pas vraiment interchangeables.

+0 -0

Comme dit plus haut, le JPEG à des pertes quand il a une qualité inférieur à 100%, ce qui signifie que certain pixel ne sont plus stocké (pour vulgariser un tiers des informations va être sauvegardé).

Je rajouterais juste une explication :

Quand tu réouvres l’image, tous les pixels vont être redéfini pour se trouver à un ratio de 1 (toutes les informations sont en mémoire), si tu laisses cette qualité à 100%, tu vas sauvegarder des informations que tu n’avais pas avant et donc avoir un plus gros fichier.

Donc il faut jouer à la fois sur la taille et aussi sur la qualité.

Connectez-vous pour pouvoir poster un message.
Connexion

Pas encore membre ?

Créez un compte en une minute pour profiter pleinement de toutes les fonctionnalités de Zeste de Savoir. Ici, tout est gratuit et sans publicité.
Créer un compte