为了账号安全,请及时绑定邮箱和手机立即绑定

使用PHP的GDlib imagecopyresampled时,是否可以保留PNG图像透明度?

使用PHP的GDlib imagecopyresampled时,是否可以保留PNG图像透明度?

PHP
弑天下 2019-08-08 15:08:52
使用PHP的GDlib imagecopyresampled时,是否可以保留PNG图像透明度?以下PHP代码段使用GD将浏览器上传的PNG大小调整为128x128。它的效果很好,除了原始图像中的透明区域在我的情况下被替换为纯黑色。虽然imagesavealpha已经确定,但事情并不完全正确。保留重采样图像透明度的最佳方法是什么?$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 );
查看完整描述

3 回答

?
泛舟湖上清波郎朗

TA贡献1818条经验 获得超3个赞

imagealphablending( $targetImage, false );

imagesavealpha( $targetImage, true );

为我做了 谢谢ceejayoz。


请注意,目标图像需要Alpha设置,而不是源图像。


编辑:完整替换代码。另见以下答案及其评论。这不能保证在任何方面都是完美的,但确实满足了我当时的需求。


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


查看完整回答
反对 回复 2019-08-08
?
温温酱

TA贡献1752条经验 获得超4个赞

我相信这应该可以解决问题:

$srcImage = imagecreatefrompng($uploadTempFile);imagealphablending($srcImage, false);imagesavealpha($srcImage, true);

编辑: PHP文档声明中的某些人imagealphablending应该是真的,而不是假的。因人而异。


查看完整回答
反对 回复 2019-08-08
  • 3 回答
  • 0 关注
  • 880 浏览

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信