Rumah >pembangunan bahagian belakang >tutorial php >Bagaimanakah Saya Boleh Mengubah Saiz PNG dengan Ketelusan Menggunakan GDlib PHP dan Mengekalkan Saluran Alpha?

Bagaimanakah Saya Boleh Mengubah Saiz PNG dengan Ketelusan Menggunakan GDlib PHP dan Mengekalkan Saluran Alpha?

Susan Sarandon
Susan Sarandonasal
2024-12-03 02:43:091003semak imbas

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

Mengubah saiz PNG dengan Ketelusan menggunakan GDlib PHP

Memelihara ketelusan imej adalah penting apabila berurusan dengan fail PNG. Walaupun GDlib menawarkan keupayaan manipulasi imej, mengubah saiz PNG dengan ketelusan yang dipelihara boleh memberikan cabaran.

Satu isu yang dihadapi apabila menggunakan fungsi imagecopyresampled GD ialah kawasan lutsinar dalam PNG asal digantikan dengan warna pepejal. Ini berlaku walaupun menetapkan imagesavealpha kepada benar.

Untuk menyelesaikan masalah ini, adalah penting untuk menentukan tetapan alfa dengan betul. Dalam PHP, tetapan alfa digunakan pada imej sasaran, bukan imej sumber. Dengan melaraskan sifat alfa imej sasaran, kami boleh mencapai pemeliharaan ketelusan:

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

imagealphablending(false) melumpuhkan sebarang pengadunan dan menghormati saluran alfa imej. imagessavealpha(true) memastikan saluran alfa PNG dikekalkan dalam output.

Berikut ialah coretan kod PHP yang disemak semula yang menggabungkan pelarasan ini:

$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 );

Kod yang diubah suai ini seharusnya mengubah saiz PNG dengan berkesan imej sambil mengekalkan ketelusan. Ambil perhatian bahawa ia tidak dijamin sempurna untuk semua kes, tetapi ia memberikan titik permulaan yang kukuh.

Atas ialah kandungan terperinci Bagaimanakah Saya Boleh Mengubah Saiz PNG dengan Ketelusan Menggunakan GDlib PHP dan Mengekalkan Saluran Alpha?. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!

Kenyataan:
Kandungan artikel ini disumbangkan secara sukarela oleh netizen, dan hak cipta adalah milik pengarang asal. Laman web ini tidak memikul tanggungjawab undang-undang yang sepadan. Jika anda menemui sebarang kandungan yang disyaki plagiarisme atau pelanggaran, sila hubungi admin@php.cn