Beibehalten der Transparenz in PNG-Bildern mit der imagecopyresampled-Funktion von GDlib
Bei der Größenänderung von PNG-Bildern mit der GDlib-imagecopyresampled-Funktion von PHP ist die Beibehaltung der Transparenz von entscheidender Bedeutung. Ein häufiges Problem besteht darin, dass die transparenten Bereiche einfarbig werden, normalerweise schwarz oder in einer anderen unerwünschten Farbe.
Problemstellung
Bedenken Sie den folgenden PHP-Codeausschnitt:
$uploadTempFile = $myField[ 'tmp_name' ] list( $uploadWidth, $uploadHeight, $uploadType ) = getimagesize( $uploadTempFile ); $srcImage = imagecreatefrompng( $uploadTempFile ); imagesavealpha( $targetImage, true ); $targetImage = imagecreatetruecolor( 128, 128 ); imagecopyresampled( $targetImage, $srcImage, 0, 0, 0, 0, 128, 128, $uploadWidth, $uploadHeight ); imagepng( $targetImage, 'out.png', 9 );
Mit diesem Code wird die Größe eines vom Browser hochgeladenen PNG-Bilds erfolgreich auf 128 x 128 geändert. Allerdings werden die transparenten Bereiche im Originalbild durch Schwarz ersetzt. Obwohl „imagesavealpha“ auf „true“ gesetzt ist, bleibt die Transparenz nicht erhalten.
Lösung
Die Lösung zur Beibehaltung der Transparenz ist:
imagealphablending( $targetImage, false ); imagesavealpha( $targetImage, true );
Durch die Einstellung von imagealphablending auf „false“ und „imagesavealpha“ auf „true“ gesetzt ist, bleibt die Transparenz im Zielbild nach der Größenänderung erhalten Vorgang.
Vollständiger Ersatzcode
Einschließlich der Transparenzeinstellungen lautet der vollständige Ersatzcode:
$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 );
Das obige ist der detaillierte Inhalt vonWie kann ich die Transparenz bei der Größenänderung von PNG-Bildern mit der GDlib von PHP bewahren?. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!