In PHP kann die Größenänderung von PNG-Bildern mit transparentem Hintergrund eine Herausforderung sein. Um dieses Problem zu beheben, sind an einem Codebeispiel, das sich als unwirksam erwiesen hat, einige entscheidende Änderungen erforderlich, um das gewünschte Ergebnis zu erzielen. Hier ist eine detaillierte Erklärung, was angepasst werden muss:
Der bereitgestellte Code:
$this->image = imagecreatefrompng($filename); imagesavealpha($this->image, true); $newImage = imagecreatetruecolor($width, $height); // Make a new transparent image and turn off alpha blending to keep the alpha channel $background = imagecolorallocatealpha($newImage, 255, 255, 255, 127); imagecolortransparent($newImage, $background); imagealphablending($newImage, false); imagesavealpha($newImage, true); imagecopyresampled($newImage, $this->image, 0, 0, 0, 0, $width, $height, $this->getWidth(), $this->getHeight()); $this->image = $newImage; imagepng($this->image,$filename);
Nach sorgfältiger Prüfung dieses Codes wurde deutlich, dass das Problem in der Anweisung liegt, in der imagecolorallocatealpha() heißt. Die richtige Reihenfolge der Vorgänge ist hier von entscheidender Bedeutung: Sie müssen zuerst den Mischmodus auf „false“ und das Flag „Alphakanal speichern“ auf „true“ setzen, bevor imagecolorallocatealpha() ausgeführt wird.
imagesavealpha($newImg, true); imagealphablending($newImg, false);
Danach Durch die Änderung sollte Ihr Code in der Lage sein, die Größe von PNG-Bildern mit transparentem Hintergrund erfolgreich zu ändern und zu verhindern, dass der Hintergrund schwarz wird.
Update für Bilder mit einer Deckkraft zwischen 0 und 100:
Der bereitgestellte Code funktioniert nur für Bilder mit einer Deckkraft von 0. Wenn Ihr Bild eine Deckkraft zwischen 0 und 100 hat, erscheint der Hintergrund schwarz. Um dieses Problem zu beheben, müssen Sie die Funktion imagecopyresampled() anpassen, um stattdessen imagecopyresampled() zu verwenden, da sie transparente PNG-Bilder mit unterschiedlichen Deckkraftstufen besser verarbeiten kann.
$transparent = imagecolorallocatealpha($newImg, 255, 255, 255, 127); imagefilledrectangle($newImg, 0, 0, $newWidth, $newHeight, $transparent); imagecopyresampled($newImg, $image, 0, 0, 0, 0, $newWidth, $newHeight, $src_w, $src_h);
Das obige ist der detaillierte Inhalt vonWie kann ich die Größe von PNGs mit Transparenz in PHP richtig ändern?. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!