将 UIImage 剪成圆形

2023-11-25

我想剪一个UIImage成一个圆圈,以便我可以将其用作注释。我在这个网站上找到的每个答案都描述了创建一个UIImageView,然后修改它并显示它,但你不能将注释的图像设置为UIImageView,只有一个UIImage。 我该怎么办?


Xcode 11 • Swift 5.1 或更高版本

编辑/更新:对于iOS10+我们可以使用UIGraphicsImageRenderer。对于较旧的 Swift 语法,请检查编辑历史记录。

extension UIImage {
    var isPortrait:  Bool    { size.height > size.width }
    var isLandscape: Bool    { size.width > size.height }
    var breadth:     CGFloat { min(size.width, size.height) }
    var breadthSize: CGSize  { .init(width: breadth, height: breadth) }
    var breadthRect: CGRect  { .init(origin: .zero, size: breadthSize) }
    var circleMasked: UIImage? {
        guard let cgImage = cgImage?
            .cropping(to: .init(origin: .init(x: isLandscape ? ((size.width-size.height)/2).rounded(.down) : 0,
                                              y: isPortrait  ? ((size.height-size.width)/2).rounded(.down) : 0),
                                size: breadthSize)) else { return nil }
        let format = imageRendererFormat
        format.opaque = false
        return UIGraphicsImageRenderer(size: breadthSize, format: format).image { _ in
            UIBezierPath(ovalIn: breadthRect).addClip()
            UIImage(cgImage: cgImage, scale: format.scale, orientation: imageOrientation)
            .draw(in: .init(origin: .zero, size: breadthSize))
        }
    }
}

游乐场测试

let profilePicture = UIImage(data: try! Data(contentsOf: URL(string:"https://i.stack.imgur.com/Xs4RX.jpg")!))!
profilePicture.circleMasked

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

将 UIImage 剪成圆形 的相关文章

随机推荐

  • 为什么 Box 不实现 Error?

    为什么不Box
  • android开发中有类似TimeSpan的东西吗?

    我想知道android开发中是否有类似时间跨度的东西 在 C 中有类似的东西 我喜欢以两种方式使用它 生成一个时间跨度 然后添加例如分钟 然后显示整个跨度 生成两个 DateTime 之间的时间跨度 Android 中 DateTime 的
  • Google 地图 Android API v2 - 交互式信息窗口(就像原始 Android 谷歌地图一样)

    我正在尝试定制InfoWindow使用新的 Google Maps API v2 单击标记后 我希望它看起来像谷歌原始地图应用程序中的那样 像这样 当我有ImageButton在里面 它不起作用 整个InfoWindow被选中 而不仅仅是I
  • 改造 - 在将响应正文解析为 json 之前删除一些无效字符

    我有一个外部 Web 服务 它在响应正文中返回 json 但嵌套在括号中 如下所示 door x 103994 001461 door y 98780 7862376 distance 53 3 使用此代码 class AddressInf
  • Prolog - 字符串或字符的 CharCode 列表

    我在序言中有一个字符代码列表 我想把它们变成角色 例如 L abc 回报L 97 98 99 假设我从L 97 98 99 无论如何 是否有将 L 转换回 abc 这样 如果存在一种方法 convert L X 回报X abc Thanks
  • Facebook 身份验证 - 不安全的 JavaScript 尝试使用 URL 访问框架

    我正在尝试在我的网站中实施 Facebook 登录系统 当它尝试连接到 Facebook 时 我从控制台日志中收到错误 Unsafe JavaScript attempt to access frame with URL https s s
  • 如何以编程方式清除 MSMQ 系统队列日志?

    需要每周批量清除系统队列日志 系统队列的正确格式 FormatName Direct os System JOURNAL 我已经在 Windows 7 和 Windows 2003 上测试了这种格式 os 后面的点表示本地主机 本地计算机
  • Summernote图片上传

    我的 Summernote 编辑器有问题 我想将图像上传到服务器上的目录中 我有一些脚本
  • 如何清除Service Worker的缓存?

    所以 我有一个包含 Service Worker 的 HTML 页面 Service Worker 缓存 index html 和我的 JS 文件 问题是当我更改 JS 时 更改不会直接显示在客户端浏览器上 当然 在 chrome 开发工具
  • 从 QValidator 获取视觉反馈

    我正在尝试使用QValidator后代 实际上在 PyQt5 中 但这并不重要 来验证一系列行编辑 一小段摘录是 class IPv4 QWidget def init self super IPv4 self init uic loadU
  • 相机预览仍然是黑色

    我正在 Android 应用程序上尝试相机预览 当我在真实设备上尝试时 它给我黑屏 这是我的代码 它不会引发任何错误 但屏幕仍然是黑色的 有任何想法吗 import android app Activity import android c
  • 在第一个编译\链接错误上停止解决方案构建 - msbuild

    我正在使用 VS2013 的 MSBuild 编译一个包含许多项目的解决方案 我希望如果其中一个项目无法编译并且 msbuild 的错误代码将不为零以指示某些内容失败 则构建停止 能做到吗 我正在运行此命令来开始编译 MS BUILD PA
  • 更新 Woocommerce 中可变产品的所有变体价格

    我需要循环获取所有变体 ID 并更新价格 简单的查询和循环如下所示 params array posts per page gt 1 post type gt product variation post parent gt product
  • Spring Boot @WebIntegrationTest 和 TestRestTemplate - 是否可以回滚测试事务?

    我有一个带有 Spring Data Rest 的 Spring Boot 应用程序 我使用 WebIntegrationTest随着TestRestTemplate在我的集成测试中 测试的基类看起来像这样 RunWith SpringJU
  • iText 7.0.4.0 - 将 PdfDocument 转换为字节数组

    我正在尝试逐页拆分 PDF 文件 并获取每个页面文件的字节数组 但是 我在 C 的 iText 版本 7 0 4 中将每个页面转换为字节数组时遇到问题 其他解决方案中引用的方法依赖于 PdfWriter GetInstance 或 PdfC
  • 使用java从服务器端检测浏览器版本

    我看到很多与浏览器检测 用户代理检测等相关的帖子 我想从服务器端检测版本并基于此发送适当的数据 我知道浏览器可以使用工具模仿版本 但这对我来说并不重要 我需要 java 解决方案来进行准确的版本检测 这是解释如何使用的代码用户代理实用程序
  • exc 错误访问代码 2

    过去三天我一直在与这个错误作斗争 但没有运气 我正在开发一个组合应用程序uiviewcontrollers and uitableviewcontrollers在表视图中 我单击 添加 按钮 它崩溃了 尚未添加核心数据编码 我什至已经启用N
  • 文件选择器在 Windows 上不接受 mimetype 'text/csv'

    我正在使用 filepicker 并设置 text csv 上传的 mimetype 它在 Mac chrome 上运行得很好 但在 Windows 上则不然 知道如何解决这个问题吗 谢谢 Ace 也尝试替代的模仿类型 text comma
  • 使用 BinData 进行 MongoDump 查询

    Mongodump 文档指定您可以使用特定查询进行转储 i e mongodump host localhost db mydb collection testCollection query SomeKey some value 我将 i
  • 将 UIImage 剪成圆形

    我想剪一个UIImage成一个圆圈 以便我可以将其用作注释 我在这个网站上找到的每个答案都描述了创建一个UIImageView 然后修改它并显示它 但你不能将注释的图像设置为UIImageView 只有一个UIImage 我该怎么办 Xco