Supprimer un fond de couleur avec imagecropauto

Développeur PHP à Vendôme (41100) > Supprimer un fond de couleur

Les systèmes de gestion de contenu imposent souvent un ratio aux images, généralement 1:1, ce qui les conduit à redimensionner les images non conformes et à combler le vide par l'ajout d'un fond blanc, qui risque d'être problématique à terme, notamment car il pourrait compliquer une migration future ou l'exploitation des images à l'extérieur du site, dans un flux de produits par exemple.

imagecropauto

Lorsque l'on a un lot d'images avec un fond de couleur à supprimer, imagecropauto est une fonction formidable qui l'élimine automatiquement, faisant ainsi économiser le temps que prendrait le développement d'une fonction maison, ou pire, un recadrage manuel de chaque image.

Une petite partie du fond est parfois laissée par imagecropauto, son seuil de tolérance étant plutôt conservateur par mesure de précaution, ceci dit, le peu qu'il laisse peut facilement être masqué via CSS, et au pire, il est aussi possible de paramétrer ce seuil de tolérance.

Pour fonctionner, imagecropauto ne requiert que deux arguments: l'image dont il faut supprimer le fond et le fond à supprimer:

  • IMG_CROP_WHITE: fond blanc
  • IMG_CROP_BLACK: fond noir
  • IMG_CROP_TRANSPARENT: fond transparent
  • IMG_CROP_SIDES: mode automatique
  • IMG_CROP_THRESHOLD: mode manuel

Dans l'éventualité où le fond de couleur à supprimer varie d'une image à l'autre, incluant des fonds quelque peu exotiques (jaune, violet etc.), IMG_CROP_SIDES dira à imagecropauto de détecter la couleur du fond.

Si l'on souhaite tout paramétrer, IMG_CROP_THRESHOLD permet de renseigner la couleur (format RVB) et de régler le seuil de tolérance (entre 0 et 1 - le seuil par défaut étant 0.5), faisant passer imagecropauto de deux à quatre arguments.

Supprimer un fond de couleur


<?php

function supprimer_fond($source,$destination){

//détection du format de l'image
$format_image = mime_content_type($source);

if($format_image == 'image/jpeg'){

$image_a_recadrer = imagecreatefromjpeg($source);

if($image_a_recadrer !== false){

$image_recadree = imagecropauto($image_a_recadrer, IMG_CROP_WHITE);

if($image_recadree !== false){

imagejpeg($image_recadree,$destination);

}

}

} else if($format_image == 'image/gif'){

$image_a_recadrer = imagecreatefromgif($source);

if($image_a_recadrer !== false){

$image_recadree = imagecropauto($image_a_recadrer, IMG_CROP_WHITE);

if($image_recadree !== false){

imagegif($image_recadree,$destination);

}

}

} else if($format_image == 'image/png'){

$image_a_recadrer = imagecreatefrompng($source);

if($image_a_recadrer !== false){

$image_recadree = imagecropauto($image_a_recadrer, IMG_CROP_WHITE);

if($image_recadree !== false){

imagepng($image_recadree,$destination);

}

}

}

}

?>


<?php

$source = 'chemin/vers/image-a-recadrer.gif/jpg/png';
$destination = 'chemin/vers/image-recadree.gif/jpg/png';

if(supprimer_fond($source,$destination) !== false){

//réussite

} else {

//échec

}

?>

Par , publié sur feu-sacre.net le 14-03-2019

Commentaires des internautes

Cliquer ici pour publier un commentaire (aucune inscription requise).