3

我打算使用 php gd 旋转具有透明颜色的图像。但是,旋转后,图像中的透明颜色不再透明,背景也不透明。这是我的代码。

$im = imagecreatefromgif('/images/80-2.gif');
$rotate = imagerotate($im,30,imagecolorallocatealpha($im, 0, 0, 0, 127));
imagegif($rotate,'/images/rotate.gif');
imagedestroy($im);
imagedestroy($rotate);

有人可以帮我让它工作吗?谢谢。

4

2 回答 2

3

为了保持图像的透明度,您需要使用两个设置,可以通过在创建 gd 资源后立即调用这些函数来完成

imagealphablending( $im, false );
imagesavealpha( $im, true );
于 2013-01-31T18:59:03.373 回答
0

alex.michel 提出的解决方法不适用于我的 gif:背景是透明的,但不是我原始 gif 的 alpha。它是蓝色的,看起来像图形纸。关于 mishu 的解决方案,它不适用于 gif(引用自 php.net 手册):

imagesavealpha()设置标志以在保存PNG 图像时尝试保存完整的 alpha 通道信息(与单色透明度相反) 。

对于 png 我使用它,它工作得很好:

    $source = imagecreatefrompng($image);
    imagealphablending($source, false);
    imagesavealpha($source, true);
    $rotated = imagerotate($source, $angle, imageColorAllocateAlpha($source, 0, 0, 0, 127));
    imagealphablending($rotated, false);
    imagesavealpha($rotated, true);
    imagepng($rotated, $image);

我仍在寻找适合 gif 的东西...

于 2015-11-13T03:58:51.280 回答