下面的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 );发布于 2008-08-28 13:41:13
imagealphablending( $targetImage, false );
imagesavealpha( $targetImage, true );都是为了我。谢谢你。
请注意,目标图像需要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 );发布于 2008-11-14 23:22:35
你为什么把事情搞得这么复杂?下面是我使用的代码,到目前为止,它已经完成了我的工作。
$im = ImageCreateFromPNG($source);
$new_im = imagecreatetruecolor($new_size[0],$new_size[1]);
imagecolortransparent($new_im, imagecolorallocate($new_im, 0, 0, 0));
imagecopyresampled($new_im,$im,0,0,0,0,$new_size[0],$new_size[1],$size[0],$size[1]);发布于 2008-08-28 13:32:15
我相信这应该能起到作用:
$srcImage = imagecreatefrompng($uploadTempFile);
imagealphablending($srcImage, false);
imagesavealpha($srcImage, true);编辑: PHP文档中有人声称imagealphablending应该是真的,而不是假的。YMMV.
https://stackoverflow.com/questions/32243
复制相似问题