使用 GDlib 的 imagecopyresampled 保持 PNG 图像的透明度
使用 PHP 的 GDlib imagecopyresampled 函数调整 PNG 图像大小时,保持透明度至关重要。一个常见问题是透明区域变成实心,通常是黑色或其他不受欢迎的颜色。
问题陈述
考虑以下 PHP 代码片段:
$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 );
此代码成功将浏览器上传的 PNG 图像大小调整为 128x128。然而,原始图像中的透明区域被黑色替换。尽管将 imagesavealpha 设置为 true,但并未保留透明度。
解决方案
保留透明度的解决方案是:
imagealphablending( $targetImage, false ); imagesavealpha( $targetImage, true );
通过设置 imagealphablending设置为 false 并将 imagesavealpha 设置为 true,调整大小后目标图像的透明度保持不变
完整替换代码
包括透明度设置,完整替换代码为:
$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 );
以上是使用 PHP 的 GDlib 调整 PNG 图像大小时如何保持透明度?的详细内容。更多信息请关注PHP中文网其他相关文章!