Maison  >  Article  >  développement back-end  >  Comment puis-je préserver la transparence lors du redimensionnement des fichiers PNG en PHP ?

Comment puis-je préserver la transparence lors du redimensionnement des fichiers PNG en PHP ?

Susan Sarandon
Susan Sarandonoriginal
2024-11-23 22:46:10147parcourir

How Can I Preserve Transparency When Resizing PNGs in PHP?

Préserver la transparence lors du redimensionnement des fichiers PNG en PHP

Lors du redimensionnement d'images PNG avec un arrière-plan transparent en PHP, il est crucial de s'assurer que la transparence est maintenu. Cependant, de nombreux exemples de code en ligne ne parviennent pas à y parvenir correctement, ce qui entraîne un arrière-plan noir après le redimensionnement.

Pour résoudre ce problème, il est nécessaire d'apporter des ajustements spécifiques au code. Avant d'exécuter la fonction imagecolorallocatealpha(), il est essentiel de configurer à la fois le mode de fusion et l'indicateur de canal alpha de sauvegarde sur false et true, respectivement.

Voici un extrait de code mis à jour qui intègre ces ajustements :

<?php
/**
 * https://stackoverflow.com/a/279310/470749
 * 
 * @param resource $image
 * @param int $newWidth
 * @param int $newHeight
 * @return resource
 */
public function getImageResized($image, int $newWidth, int $newHeight) {
    $newImg = imagecreatetruecolor($newWidth, $newHeight);
    imagealphablending($newImg, false); // Turn off blending
    imagesavealpha($newImg, true); // Turn on save alpha channel
    $transparent = imagecolorallocatealpha($newImg, 255, 255, 255, 127);
    imagefilledrectangle($newImg, 0, 0, $newWidth, $newHeight, $transparent);
    $src_w = imagesx($image);
    $src_h = imagesy($image);
    imagecopyresampled($newImg, $image, 0, 0, 0, 0, $newWidth, $newHeight, $src_w, $src_h);
    return $newImg;
}
?>

Avec ces modifications, le code devrait effectivement maintenir la transparence des images PNG après redimensionnement.

Remarque : Ce code mis à jour ne fonctionne correctement que pour les images avec une opacité d'arrière-plan de 0. Si l'opacité de l'image est comprise entre 0 et 100, l'arrière-plan apparaîtra noir après le redimensionnement.

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