Image 使用基于alpha的Golang放置阴影

Image 使用基于alpha的Golang放置阴影,image,go,shadow,Image,Go,Shadow,我需要从具有alpha通道的image.image类型的对象上投射阴影。目标不是对矩形进行阴影处理,而是对alpha进行阴影处理 我想做的是: 取出阿尔法通道 将其转换为黑色RGB图像 扩展到N个像素(N=模糊的大小) 应用高斯模糊 将其作为背景应用 最后一点非常简单,这要归功于“image/draw”API(例如,我可以在圆圈中剪切图像并应用遮罩) 输出alpha通道似乎也很简单(对于每个像素,在R、G和B上应用255*alpha乘法,或者使用灰度图像,最后将白色反转为黑色) 很明显,我的

我需要从具有alpha通道的
image.image
类型的对象上投射阴影。目标不是对矩形进行阴影处理,而是对alpha进行阴影处理

我想做的是:

  • 取出阿尔法通道
  • 将其转换为黑色RGB图像
  • 扩展到N个像素(N=模糊的大小)
  • 应用高斯模糊
  • 将其作为背景应用
最后一点非常简单,这要归功于“image/draw”API(例如,我可以在圆圈中剪切图像并应用遮罩)

输出alpha通道似乎也很简单(对于每个像素,在R、G和B上应用255*alpha乘法,或者使用灰度图像,最后将白色反转为黑色)

很明显,我的问题是扩张和模糊

我不反对这样一个事实,即图像改变了这个操作的大小(在最坏的情况下,我会在变换之前缩小原始图像)


问题是“如何放大和模糊alpha通道”的图像。图像?

好的,过了一会儿,我终于做到了

我重建alpha并将其设置为2(这将是一个参数)

我正在使用
github.com/dissection/imaging
包来模糊alpha

func DropShadow(img image.image,大小float64)image.image{
边界:=img.bounds()
sizeInt:=int(数学单元(大小))*4
final:=imaging.New(bounds.Dx()+sizeInt,bounds.Dy()+sizeInt,color.Alpha{})
对于x:=0;x

这只是有点奇怪,我需要缩放4的图像,以避免阴影粘在边界上。但它确实起到了作用……

我认为将你的问题减少/重新聚焦到你需要解决的具体问题上可能会有所帮助。目前,你的大部分问题是解释你不需要帮助的细节,而你确实需要帮助的部分还不是很清楚(至少对我来说)。例如,我不确定你所说的“扩展到N个像素”和“扩展”是什么意思。@HymnsForDisco N是阴影的大小,因为alpha通道会粘附在遮罩上,所以我想alpha需要扩展。我编辑了我的问题。唯一需要做的就是用
image.image