我打算用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);
有人能帮助我让它发挥作用吗?感谢。
答案 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的东西......