Heim >Backend-Entwicklung >PHP-Tutorial >Wie kann ich die Transparenz bei der Größenänderung von PNG-Bildern mit der GDlib von PHP bewahren?

Wie kann ich die Transparenz bei der Größenänderung von PNG-Bildern mit der GDlib von PHP bewahren?

Mary-Kate Olsen
Mary-Kate OlsenOriginal
2024-11-29 13:39:261030Durchsuche

How Can I Preserve Transparency When Resizing PNG Images with PHP's GDlib?

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!

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