【问题标题】:Background transperancy in imagerotate()图像旋转()中的背景透明度
【发布时间】:2010-04-22 18:53:04
【问题描述】:

从前两天开始,我尝试在使用 imagerotate() PHP-GD 函数旋转图像后为背景添加透明度。

但是,令我非常失望的是,它根本不起作用。

它只是在它背后发出黑色背景。

这是我的代码 -

$patchImageS = 'image.png'; // 要在最终 bg 上修补的图像 $patchImage = imagecreatefrompng($patchImageS); // 要修补的图像资源 $patchImage = imagerotate($patchImage, 23, 0, 0); imagepng($patchImage,'tt.png');

我试图将函数中传递的参数更改为

imagerotate($patchImage, 23, 5, 0);

imagerotate($patchImage, 23, 0, 5);

任何帮助将不胜感激。

【问题讨论】:

  • 你还没有接受所有旧问题的答案 - 如果你找到答案,你应该这样做,否则人们可能不想再帮助你了......
  • @oezi 抱歉...但我是stackoverflow的新手,不知道有这样的功能...谢谢:-)指出...顺便说一句,刚刚接受了答案到目前为止我的问题:-)
  • 我更新了我的答案,以便您可以在那里看到 imagesavealpha 的示例。

标签: php gd


【解决方案1】:

在完成了 99% 的答案后,这是我找到的解决方案:

// Create, or create from image, a PNG canvas
$png = imagecreatetruecolor($width, $height);

// Preserve transparency
imagesavealpha($png , true);
$pngTransparency = imagecolorallocatealpha($png , 0, 0, 0, 127);
imagefill($png , 0, 0, $pngTransparency);

// Rotate the canvas including the required transparent "color"
$png = imagerotate($png, $rotationAmount, $pngTransparency);

// Set your appropriate header
header('Content-Type: image/png');

// Render canvas to the browser
imagepng($png);

// Clean up
imagedestroy($png);

这里的关键是在你的 imagerotate() 调用中包含你的 imagecolorallocatealpha()...

【讨论】:

  • 这可能行不通。您必须输入“imagesavealpha($png, true);” "$png = imagerotate($png, $rotationAmount, $pngTransparency);"之后
  • 嗯,什么!?发出保存 Alpha 通道的命令的全部目的是在填充画布之前保留该数据......除非你有我的方法不起作用的示例;这是许多不同站点使用的方法,包括库的文档...
  • 我明白你在说什么,但我的例子仍然适用。您实际上是在委派内存,因为您希望 Alpha 数据在用 Alpha 数据填充保留空间之前存在。这是在数据存储之前需要一个容器的问题。
  • 这段代码对我不起作用,我在下面的链接upload.wikimedia.org/wikipedia/en/9/92/ACDC_Back_in_Black.png使用图像进行采样
  • Ghanshyam,当您的图片背景已经是黑色时,上面的代码对您没有帮助...您必须从一开始就使用透明的 PNG。
【解决方案2】:

在 php 文档中查找 imagesavealpha() - 我认为这就是您要查找的内容。

编辑:这是一个例子:

$png = imagecreatefrompng('./alphachannel_example.png');

// Do required operations
$png = imagerotate($png, 23, 0, 0);

// Turn off alpha blending and set alpha flag
imagealphablending($png, false);
imagesavealpha($png, true);

// Output image to browser
header('Content-Type: image/png');

imagepng($png);
imagedestroy($png);

【讨论】:

  • 好的。谢谢...我会试试看。但是不管图像扩展名如何,它都能工作吗?或者我们可以随时将图像转换为 PNG。
  • 我试过了……但它仍然给出了一个白色的背景,而不是一个透明的背景……
  • 这被标记为已接受的答案,但原始发布者说它没有解决他的问题。如果我错了,请纠正我。
猜你喜欢
  • 1970-01-01
  • 2011-08-21
  • 1970-01-01
  • 2016-09-06
  • 1970-01-01
  • 2011-11-10
  • 2011-10-16
  • 1970-01-01
  • 2013-01-15
相关资源
最近更新 更多