Heim > Backend-Entwicklung > PHP-Tutorial > Wie kann ich die Größe von PNGs mit Transparenz in PHP richtig ändern?

Wie kann ich die Größe von PNGs mit Transparenz in PHP richtig ändern?

Susan Sarandon
Freigeben: 2024-11-25 05:03:15
Original
366 Leute haben es durchsucht

How to Properly Resize PNGs with Transparency in PHP?

Größenänderung von PNGs mit Transparenz in PHP: Eine umfassende Lösung

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 dem Login kopieren

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);
Nach dem Login kopieren

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);
Nach dem Login kopieren

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!

Quelle:php.cn
Erklärung dieser Website
Der Inhalt dieses Artikels wird freiwillig von Internetnutzern beigesteuert und das Urheberrecht liegt beim ursprünglichen Autor. Diese Website übernimmt keine entsprechende rechtliche Verantwortung. Wenn Sie Inhalte finden, bei denen der Verdacht eines Plagiats oder einer Rechtsverletzung besteht, wenden Sie sich bitte an admin@php.cn
Neueste Artikel des Autors
Beliebte Tutorials
Mehr>
Neueste Downloads
Mehr>
Web-Effekte
Quellcode der Website
Website-Materialien
Frontend-Vorlage