使用 ImageMask Swift 填充图像
Posted
技术标签:
【中文标题】使用 ImageMask Swift 填充图像【英文标题】:Fill an Image using an ImageMask Swift 【发布时间】:2015-03-11 18:29:28 【问题描述】:我试图弄清楚如何用颜色填充中心透明的 PNG。 我给你做了一个预览,以可视化我无法解释的内容:D
“盾牌图标”只是一个笔划。里面和外面都没有背景。
我想调用类似的函数
func fillShield(percentage: CGFLoat)
...
//code needed to fill the shield
我如何设法让类似的东西在 swift 中运行?
干杯,尼克拉斯
【问题讨论】:
【参考方案1】:你有原始的 SVG(或者你能得到一个)而不是 PNG。如果是这样,我建议获取 PaintCode,它将采用此 SVG 并为您提供使用贝塞尔曲线绘制它的代码 - 从那里也很容易部分填充它 - 您可以使用贝塞尔曲线和矩形作为蒙版。
如果不是,您可以修改 png 使其外部不透明吗?如果是这样,您只需要在下面绘制绿色矩形,它就会显示出来。
如果您需要透明的外部(覆盖在背景上),请制作两份 PNG 副本,一份内部透明,一份外部透明。使用第一个制作进度图像,然后将第二个的 Alpha 通道复制到结果中。
CoreImage 和 CoreGraphics 具有您完成每个部分所需的功能——这里有一个链接,用于了解如何获取像素(用于复制通道):
http://www.raywenderlich.com/69855/image-processing-in-ios-part-1-raw-bitmap-modification
编辑:详细说明。你需要两张图片
图 1 是外部为白色不透明,内部为透明的盾牌
图 2 是内部为白色不透明,外部为透明的盾牌
步骤:
使用 CoreGraphics 在图像上绘制一个高度由进度确定的绿色矩形,底部设置为盾牌的内侧底部
在上面绘制图像 1。你现在有一个图像,盾牌的外面是绿色的进度和白色的。
将图像 2 的 alpha 通道复制到第 2 步的结果中。您现在有了一个填充了进度且外部透明的图像。
【讨论】:
我不能只将填充屏蔽到盾的边界(使用您所说的第二个 PNG)然后添加我已经拥有的 PNG 吗?如果是这样,我如何将此蒙版应用于填充?创建第二个 PNG 没问题。我没有 PaintCode 也没有 SVG 在不透明的图像顶部绘制具有透明度的图像不会使底部图像透明。您需要复制 Alpha 通道。我将尝试在答案中详细说明。以上是关于使用 ImageMask Swift 填充图像的主要内容,如果未能解决你的问题,请参考以下文章
如何使用 Alamofire Swift 4 将图像填充到 UICollectionView