Как сказал jcupitt, нам нужно вытащить альфа-полосу из изображения, размыть ее, снова соединить и объединить с фоном, но, используя функцию, как это было, оставила тонкую черную рамку вокруг изображения на переднем плане.
Чтобы преодолеть это, нам нужно скопировать изображение, изменить его размер в соответствии с параметром sigma
, извлечь альфа-полосу из уменьшенной копии, смазать ее и заменить альфа-полосу исходного изображения.Таким образом, граница исходного изображения будет полностью покрыта прозрачными частями альфа.
local function featherEdges(img, sigma)
local copy = img:copy()
:resize(1, { vscale = (img:height() - sigma * 2) / img:height() })
:embed(0, sigma, img:width(), img:height())
local alpha = copy
:extract_band(copy:bands() - 1)
:gaussblur(sigma)
return img
:extract_band(0, { n = img:bands() - 1 })
:bandjoin(alpha)
end