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

使用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 );


弑天下
浏览 881回答 3
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 );

温温酱

我相信这应该可以解决问题:$srcImage = imagecreatefrompng($uploadTempFile);imagealphablending($srcImage, false);imagesavealpha($srcImage, true);编辑: PHP文档声明中的某些人imagealphablending应该是真的,而不是假的。因人而异。
打开App,查看更多内容
随时随地看视频慕课网APP