首页 > 后端开发 > php教程 > 使用 PHP 的 GDlib 调整 PNG 图像大小时如何保持透明度?

使用 PHP 的 GDlib 调整 PNG 图像大小时如何保持透明度?

Mary-Kate Olsen
发布: 2024-11-29 13:39:26
原创
953 人浏览过

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

使用 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中文网其他相关文章!

来源:php.cn
本站声明
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系admin@php.cn
作者最新文章
热门教程
更多>
最新下载
更多>
网站特效
网站源码
网站素材
前端模板