Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/image-processing/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Php 使用透明颜色旋转图像_Php_Image Processing_Transparency_Image Rotation_Php Gd - Fatal编程技术网

Php 使用透明颜色旋转图像

Php 使用透明颜色旋转图像,php,image-processing,transparency,image-rotation,php-gd,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($

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

有人能帮我把它弄好吗?谢谢。

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

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

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的东西…

似乎是一个老问题,这里有一个解决办法:谢谢你的回复,但代码对我不起作用。我想知道为什么旋转后我会失去所有的透明度。我不知道为什么你的代码对我不起作用。创建原始图像时,我使用imagecolortransparent()方法将红色转换为透明色。但在旋转之后,透明的颜色会变回红色。为什么会发生这种情况?谢谢。所以这里有更多的步骤,而不仅仅是这个示例中的步骤;也许你应该对这两幅图像都尝试一下(我想你是将图像保存为80-2.gif并再次处理它或类似的东西)。。你应该看到哪里失去了透明度。。另外,我认为这些调用应该在创建gd资源之后立即进行。。