Maison >développement back-end >tutoriel php >Comment préserver la transparence lors du redimensionnement des PNG en PHP ?

Comment préserver la transparence lors du redimensionnement des PNG en PHP ?

Barbara Streisand
Barbara Streisandoriginal
2024-11-28 14:20:16628parcourir

How to Preserve Transparency When Resizing PNGs in PHP?

Comment redimensionner efficacement des PNG avec des arrière-plans transparents en PHP

Redimensionner des images PNG transparentes en PHP peut être une tâche difficile, mais c'est essentiel pour maintenir la qualité de l’image. Le code que vous avez fourni rencontre un problème où la couleur d'arrière-plan se transforme en noir lors du redimensionnement. Pour résoudre ce problème, suivez le code mis à jour ci-dessous :

$this->image = imagecreatefrompng($filename);

imagealphablending($this->image, false);
imagesavealpha($this->image, true);

$newImage = imagecreatetruecolor($width, $height);

// Allocate a new transparent color and enable alpha blending
$background = imagecolorallocatealpha($newImage, 255, 255, 255, 127);
imagefilledrectangle($newImage, 0, 0, $width, $height, $background);
imagealphablending($newImage, true);
imagesavealpha($newImage, true);

// Resize the image with transparent background preserved
imagecopyresampled($newImage, $this->image, 0, 0, 0, 0, $width, $height, $this->getWidth(), $this->getHeight());
$this->image = $newImage;

imagepng($this->image, $filename);

Changements clés :

  • imagealphablending(false) : désactive la fusion alpha avant d'attribuer la couleur transparente pour éviter tout mélange indésirable.
  • imagesavealpha(true) : Permet l'enregistrement de l'arrière-plan transparent avant la copie de l'image.
  • imagefilledrectangle() : Remplit la nouvelle image avec la couleur transparente.

Mise à jour :

Le code fourni gère les arrière-plans transparents avec une opacité définie sur 0. Cependant, pour les images avec des valeurs d'opacité comprises entre 0 et 100, cela produira toujours un fond noir. Malheureusement, il n'existe pas de solution simple au sein de la bibliothèque GD pour gérer ce cas d'utilisation.

Ce qui précède est le contenu détaillé de. pour plus d'informations, suivez d'autres articles connexes sur le site Web de PHP en chinois!

Déclaration:
Le contenu de cet article est volontairement contribué par les internautes et les droits d'auteur appartiennent à l'auteur original. Ce site n'assume aucune responsabilité légale correspondante. Si vous trouvez un contenu suspecté de plagiat ou de contrefaçon, veuillez contacter admin@php.cn