将边框应用于图像形状

2023-11-23

在我的应用程序中,我有不同形状的各种图像。如树、云。 (附有示例图片)。 我想以编程方式为这些形状添加边框。就像如果图像是树那么需要突出显示树的形状。 我无法使用 callayer,因为它会将边框应用于 UIImageView。 谁能指导我如何实现这一目标?

sample image


这可以通过使用一系列 CIFilter 来实现。查看与以下步骤相对应的图像。在我的例子中基础图像是具有透明背景的彩色图像,mask是黑白的。

  1. Use CIEdges检测掩模的边缘。

  2. 然后通过应用磁盘最大过滤器使边缘更厚(CIMorphologyMaximum).

  3. 将边框图像从黑白转换为透明白色CIMaskToAlpha

  4. 将原始图像覆盖在边框顶部。

完整代码如下:

let base = CIImage(cgImage: baseImage.cgImage!)
let mask = CIImage(cgImage: maskImage.cgImage!)
        
// 1
let edges = mask.applyingFilter("CIEdges", parameters: [
   kCIInputIntensityKey: 1.0
])
    
// 2    
let borderWidth = 0.02 * min(baseImage.size.width, baseImage.size.height)
let wideEdges = edges.applyingFilter("CIMorphologyMaximum", parameters: [
    kCIInputRadiusKey: borderWidth
])
        
// 3
let background = wideEdges.applyingFilter("CIMaskToAlpha")
      
// 4  
let composited = base.composited(over: background)
        
// Convert back to UIImage
let context = CIContext(options: nil)
let cgImageRef = context.createCGImage(composited, from: composited.extent)!
return UIImage(cgImage: cgImageRef)

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

将边框应用于图像形状 的相关文章

随机推荐

  • 声明单一类型 - “使用”单一类型的等效项

    在 C 中我可以这样做 using IAnyType App Namespace Types IAnyType class BaseClass IAnyType 有等效的 Typescript 吗 BAD import IDialogOpt
  • 有没有办法将数据流式传输到 blob(或生成巨大的 blob)

    检查 MDN 我发现以前有BlobBuilder我可以打电话给blobBuilder append继续向 blob 添加数据 但根据 MDNBlobBuilder已被弃用 有利于Blob构造函数 不幸的是Blob构造函数在构造时需要内存中的
  • 当表中的数据发生更改时,SqlCacheDependency 如何知道何时与任何侦听器进行通信?

    我一直在做一些研究 我可以看到这个系统的大部分管道 但是我不确定 sql server 如何知道当表中的数据发生变化时何时向任何侦听器 应用程序 发送消息 我将首先解释我所理解的内容 直到我迷路为止 1 需要在数据库上启用Service B
  • Crystal Reports - 向存储过程添加新字段并使其在 IDE 中可用?

    我向存储过程添加了一个新字段 如何在不重置数据库专家中的数据源的情况下使其在 Crystal Reports 中可用 验证数据库有效 但是如果您使用设置数据源位置 在数据库 gt 设置数据源位置中找到 在过程更改后更新报告 打开 设置数据源
  • 在 python 中排序枚举值

    我希望能够安排枚举的顺序 有人建议如何解决这个问题吗 使用以下枚举元类 class EnumMeta type def new typ name bases attrs cls attrs cls choices for attr name
  • 使用 Trivy 扫描本地 docker 映像中的漏洞会导致未经授权

    我已将 docker 映像从私有存储库拉到本地 并尝试使用 trivy image 命令扫描本地映像 它正在拉取数据库 但显示访问本地映像时出现未经授权的错误 scan error unable to initialize a scanne
  • MySQL:仅在不在另一表中时才从一个表中选择电子邮件?

    我将构建一个名为 donotemail 的表 其中包含要求从我们的电子邮件列表中删除的人员的电子邮件地址 我有另一个名为 users 的表 其中包含电子邮件列 如何选择用户的所有电子邮件 但前提是电子邮件地址不在 donotemail 表中
  • R中的3层圆环图

    我正在尝试在 R 中重新创建此图像 但是我无法弄清楚如何将 3 层添加到圆环图 我找到的所有内容 例如 webr PieDonut 只允许2 使用ggplot我也无法重新创建它 MRE 是 library ggplot2 library w
  • Tensorflow - 无法将操作转换为张量

    我想计算操作输出和张量之间的成对欧几里得距离 我正在使用建议的代码here 这是我的代码的要点 Suppose logits has shape 32 128 logits tf get default graph get operatio
  • WPF 触发器

    我试图设置一个触发器 当我获得的单元格值是某种类型时显示文本块 我已经成功地在相同的情况下显示了图像 但在这种情况下我不需要图像 而是一些文本 已注释掉几行以便测试 尝试使其工作 注释掉的代码有效 其中的文本块 text xxx 没有 这是
  • 关于小型基于 C 的向量和矩阵库的建议 [关闭]

    Closed 这个问题不符合堆栈溢出指南 目前不接受答案 我需要一个用于 2d 和 3d 向量以及 3x3 和 4x4 矩阵的轻量级库 在基础C中 这样我就不会重新发明轮子 有什么建议么 Meschach是一个纯 C 向量 矩阵库 明显小于
  • preg_replace() 会改变我的字符集吗?

    我有以下代码似乎正在改变我的字符集 html echo html result html preg replace s html echo html result 但是 当我使用 t n r f v 作为我的模式而不是特殊字符 s它工作正常
  • Bluemix 新手,新应用程序出现错误“主机已被占用”

    我是 Bluemix 的新手 按照以下步骤创建应用程序 使用您的 Bluemix 帐户登录 Bluemix 打开目录菜单 从运行时部分 单击 Liberty for Java 在应用程序字段中 指定您的应用程序的名称 输入姓名 单击创建按钮
  • 覆盖Android后退按钮

    关于我为什么尝试这样做的一些信息 我正在使用 ActivityGroups 从 tabHost 活动打开一个活动 并将该新活动保留在选项卡下 那部分我已经有了 但是 在该新活动中 如果我使用后退按钮 它会将我直接退出选项卡活动 因此我必须单
  • 没有 'owned by' 属性的 Postgres 序列在 Django 1.3 中不会返回 id

    最近从 Oracle 迁移到 Postgres 并从 Django 1 2 升级到 1 3 后 我们在将对象保存到数据库时开始遇到问题 当调用 save 时 不会返回 id 即使通过标准 django 管理面板保存标准 django aut
  • android:选择图库中的多个图像并启动隐式意图

    如何获取所有选定图像的图像路径或仅将它们显示在我的应用程序中 当用户在图库中选择图像并按共享按钮时 我可以启动隐式意图并将其显示在我的 imageView 中 如下所示 ImageView iv ImageView findViewById
  • 将时间序列数据提供给有状态 LSTM 的正确方法?

    假设我有一个整数序列 0 1 2 并希望根据最后 3 个整数来预测下一个整数 例如 0 1 2 gt 5 3 4 5 gt 6 etc 假设我像这样设置模型 batch size 1 time steps 3 model Sequentia
  • 钩住时间编织块

    我想对 knitr 块进行计时 并记录使用 LaTeX 输出中的注释渲染它们所花费的时间 我尝试过以下钩子 now Sys time knit hooks set timeit function before if before now l
  • JavaScript 函数表达式前面的加号

    我一直在寻找有关立即调用函数的信息 在某个地方我偶然发现了这个符号 function console log Something 有人可以向我解释一下是什么吗 函数前面的符号意味着 做什么 它强制解析器处理以下部分 作为一种表达方式 这通常
  • 将边框应用于图像形状

    在我的应用程序中 我有不同形状的各种图像 如树 云 附有示例图片 我想以编程方式为这些形状添加边框 就像如果图像是树那么需要突出显示树的形状 我无法使用 callayer 因为它会将边框应用于 UIImageView 谁能指导我如何实现这一