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
Freigeben: 2024-11-29 13:39:26
Original
1001 Leute haben es durchsucht

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

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

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

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!

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