用透明色旋转图像

时间:2013-01-31 18:51:47

标签: php image-processing transparency image-rotation php-gd

我打算用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);

有人能帮助我让它发挥作用吗?感谢。

2 个答案:

答案 0 :(得分:3)

为了保持图像的透明度,您需要使用两种设置,可以通过在克隆gd资源后立即调用这些功能来完成

imagealphablending( $im, false );
imagesavealpha( $im, true );

答案 1 :(得分:0)

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

  

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

对于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的东西......