PHP GD 在另一个形状上绘制形状并使其透明

Posted

技术标签:

【中文标题】PHP GD 在另一个形状上绘制形状并使其透明【英文标题】:PHP GD draw shape over another shape and make it transparent 【发布时间】:2021-02-16 13:19:55 【问题描述】:

我正在开发一个图表库,我使用 GD 来绘制图表和仪表。这一切都很好,但我希望有透明背景的可能性。我终于搞定了,但现在我遇到了一个新问题。

要绘制复杂的仪表,我会在彼此之上绘制多个形状。就像当我需要一个甜甜圈饼图时,我画一个普通的饼图 - 然后我画一个中心椭圆,给人一种甜甜圈的印象。当有像白色这样的背景颜色或任何其他颜色时,这非常有用。使用透明背景时,这会按应有的方式绘制馅饼和所有内容 - 我绘制了甜甜圈中心,但我无法将中心变为透明。

饼图:

甜甜圈图:

我不能让中心(白色)透明,我不想用 alpha 透明度绘制中心,因为馅饼会发光 - 但我想用透明像素替换白色。

我尝试了imagecolortransparent($image, $white);,但无法正常工作。任何人都可以为我指明正确的方向,或者可以告诉我是否有可能。

【问题讨论】:

很难看不到任何代码,但看起来与***.com/questions/37628125/…中的想法相似 我通过填充中心白色使其部分工作,然后imagefill($this->image->image, $x, $y, $this->image->background->color); 【参考方案1】:

我得到了它的工作,可能会对遇到同样问题的其他人派上用场。我用纯色绘制中心,然后在形状的中心进行图像填充。我用 alpha 透明度设置为 127 的真彩色填充它。这用设置为完全透明的像素替换(在我的情况下为白色)像素。

在创建时我使用imagecreatetruecolor 并设置imagesavealpha($image, true)。我设置imagealphablending($image, false),因为它会导致其他颜色的Alpha完全移除背景(如问题中的甜甜圈中的指示符)。

【讨论】:

以上是关于PHP GD 在另一个形状上绘制形状并使其透明的主要内容,如果未能解决你的问题,请参考以下文章

我应该如何覆盖 VideoView 的 onDraw 以使其具有透明的圆角?

在android中将形状背景设置为透明

在图像上查找透明像素并使相同像素在另一个图像上透明

理解ZBrush中的透明度

Swift - 如何使 UIButton 仅在附加的图像上点击交互并忽略透明部分

OpenGL:渲染具有大量纹理透明度的模型,没有绘制顺序?