以下 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 );
最佳答案
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 );
关于php - 使用PHP的GDlib imagecopyresampled时可以保留PNG图像透明度吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/32243/