Heim >Backend-Entwicklung >PHP-Tutorial >Wie kann ich die Größe von PNGs mit Transparenz mithilfe der GDlib von PHP ändern und Alphakanäle beibehalten?

Wie kann ich die Größe von PNGs mit Transparenz mithilfe der GDlib von PHP ändern und Alphakanäle beibehalten?

Susan Sarandon
Susan SarandonOriginal
2024-12-03 02:43:091003Durchsuche

How Can I Resize PNGs with Transparency Using PHP's GDlib and Preserve Alpha Channels?

Größe von PNGs mit Transparenz mithilfe der GDlib von PHP ändern

Beim Umgang mit PNG-Dateien ist die Beibehaltung der Bildtransparenz von entscheidender Bedeutung. Während GDlib Bildbearbeitungsfunktionen bietet, kann die Größenänderung von PNGs unter Beibehaltung der Transparenz eine Herausforderung darstellen.

Ein Problem bei der Verwendung der imagecopyresampled-Funktion von GD besteht darin, dass transparente Bereiche im ursprünglichen PNG durch eine Volltonfarbe ersetzt werden. Dies tritt auf, obwohl „imagesavealpha“ auf „true“ gesetzt ist.

Um dieses Problem zu beheben, ist es wichtig, die Alpha-Einstellungen korrekt anzugeben. In PHP gelten Alpha-Einstellungen für das Zielbild, nicht für das Quellbild. Durch Anpassen der Alpha-Eigenschaften des Zielbilds können wir eine Transparenzerhaltung erreichen:

imagealphablending( $targetImage, false );
imagesavealpha( $targetImage, true );

imagealphablending(false) deaktiviert jegliche Überblendung und respektiert den Alpha-Kanal des Bildes. imagesavealpha(true) stellt sicher, dass der Alphakanal des PNG in der Ausgabe erhalten bleibt.

Hier ist ein überarbeiteter PHP-Codeausschnitt, der diese Anpassungen enthält:

$uploadTempFile = $myField[ 'tmp_name' ]
list( $uploadWidth, $uploadHeight, $uploadType ) 
  = getimagesize( $uploadTempFile );

$srcImage = imagecreatefrompng( $uploadTempFile ); 

$targetImage = imagecreatetruecolor( 128, 128 );   
imagealphablending( $targetImage, false );
imagesavealpha( $targetImage, true );

imagecopyresampled( $targetImage, $srcImage, 
                    0, 0, 
                    0, 0, 
                    128, 128, 
                    $uploadWidth, $uploadHeight );

imagepng(  $targetImage, 'out.png', 9 );

Dieser geänderte Code sollte die Größe des PNG effektiv ändern Bild unter Beibehaltung der Transparenz. Beachten Sie, dass es nicht garantiert ist, dass es in allen Fällen perfekt ist, aber es bietet einen soliden Ausgangspunkt.

Das obige ist der detaillierte Inhalt vonWie kann ich die Größe von PNGs mit Transparenz mithilfe der GDlib von PHP ändern und Alphakanäle beibehalten?. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!

Stellungnahme:
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