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 以使其具有透明的圆角?