如何将图像转换为 UIImage?

2024-05-14

如何转换 SwiftUIImage to a UIImage?

let image = Image(systemName: "circle.fill")
let UIImage = image as UIImage

没有直接的方法将 Image 转换为 UIImage。相反,您应该将 Image 视为 View,并尝试将该 View 转换为 UIImage。 Image符合View,所以我们已经有了我们需要的View。现在我们只需要将 View 转换为 UIImage 即可。

我们需要两个组件来实现这一目标。第一个函数将我们的图像/视图更改为 UIView,第二个函数将我们创建的 UIView 更改为 UIImage。

为了更加方便,这两个函数都被声明为其适当类型的扩展。

extension View {
// This function changes our View to UIView, then calls another function
// to convert the newly-made UIView to a UIImage.
    public func asUIImage() -> UIImage {
        let controller = UIHostingController(rootView: self)
        
 // Set the background to be transparent incase the image is a PNG, WebP or (Static) GIF
        controller.view.backgroundColor = .clear 
        
        controller.view.frame = CGRect(x: 0, y: CGFloat(Int.max), width: 1, height: 1)
        UIApplication.shared.windows.first!.rootViewController?.view.addSubview(controller.view)
        
        let size = controller.sizeThatFits(in: UIScreen.main.bounds.size)
        controller.view.bounds = CGRect(origin: .zero, size: size)
        controller.view.sizeToFit()
        
// here is the call to the function that converts UIView to UIImage: `.asUIImage()`
        let image = controller.view.asUIImage()
        controller.view.removeFromSuperview()
        return image
    }
}

extension UIView {
// This is the function to convert UIView to UIImage
    public func asUIImage() -> UIImage {
        let renderer = UIGraphicsImageRenderer(bounds: bounds)
        return renderer.image { rendererContext in
            layer.render(in: rendererContext.cgContext)
        }
    }
}

如何使用?

let image: Image = Image("MyImageName") // Create an Image anyhow you want
let uiImage: UIImage = image.asUIImage() // Works Perfectly

Bonus

正如我所说,我们将图像视为视图。在这个过程中,我们没有使用Image的任何特定特征,唯一重要的是我们的Image是一个View(符合View协议)。 这意味着通过这个方法,你不仅可以将Image转换为UIImage,还可以将任何View转换为UIImage。

var myView: some View {
// create the view here
}
let uiImage = myView.asUIImage() // Works Perfectly
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

如何将图像转换为 UIImage? 的相关文章

  • SVG 转 JPG / PNG

    有没有工作模块可以convert a SVG image into像素格式如JPEG or PNG 看看蜡染工具包 具体来说是光栅化器 http xmlgraphics apache org batik tools rasterizer h
  • 如何将 WKUIDelegate 实现到 SwiftUI WKWebView 中?

    我正在 Xcode v11 上创建一个 Web 应用程序 但在实现 WKUIDelegate 来显示 Javascript 警报并在 Web 应用程序上正确确认时遇到问题 我在 ContentView swift 上得到了一个非常简单的 w
  • 高级 Win32 图像文件 I/O?

    我想在 Windows C 应用程序中将图像文件读入内存 什么是一个相当简单的解决方案 也许类似于 IOS 提供的UIImage 我希望支持合理数量的文件格式 我需要为图像处理的位图提供一些低级访问权限 我在互联网上阅读了很多内容 看起来
  • jquery改变图像src

    代码与 adminLink 工作得很好 但是 itemLink 没有 我已经尝试了我能想到的一切 我想我需要一双新鲜的眼睛 我想做的就是在单击元素时更改这两个 img 的 src code document ready function H
  • SwiftUI:如何让项目的拖放重新排序起作用?

    我有以下 SwiftUI 视图 struct ContentView View State var model Model var body some View ScrollView LazyVGrid columns columns sp
  • Python 的高效图像缩略图控制?

    Python GUI 应用程序显示大量缩略图的最佳选择是什么 例如10000 或更多 出于性能原因 此类缩略图控件必须支持虚拟项目 即仅请求应用程序当前对用户可见的那些缩略图 In wxPython http wxpython org 您可
  • WPF 中图像的淡入淡出

    当我更改幻灯片放映等图像源时 如何实现淡入和淡出图像 我的图像从本地和网络加载 并且其数量是可变的 谢谢 您可以编写一个扩展方法 通过动画显示图像来淡出图像Opacity属性设置为 0 然后设置Source属性并最终将不透明度动画回到 1
  • 如何通过 md5 比较图像?

    该方法是否比较图像的像素值 我猜它不会起作用 因为它们的尺寸彼此不同 但如果它们相同但格式不同怎么办 例如 我截图并保存为 jpg另一个并保存为 gif MD5哈希是实际的二进制数据 因此不同的格式将具有完全不同的二进制数据 因此 要使 M
  • CIGaussianBlur 有时会改变图像方向

    在我的 iOS 应用程序中 我想在 UIImage 上应用一个滤镜 CIGaussianBlur 当它获得具有大高度的图像时 它会旋转图像 CIContext context CIContext contextWithOptions nil
  • 使用 Pillow 和 Numpy 进行图像推导

    I have two images and 我想导出一个只有红色 Hello 的图像 例如 所以我正在运行一个简单的推导python脚本 from PIL import Image import numpy as np root root
  • 如何在 SwiftUI 中使用 @FetchRequest 和新的可搜索修饰符?

    是否可以使用新的 searchable结合 FetchRequest 我有这样的代码 struct FooListView View Environment managedObjectContext private var viewCont
  • 为什么这个基本的 imagejpeg() resizer 返回黑色图像?

    EDIT 感谢您的所有回答 特别是 Mailerdaimon 他注意到我没有在imagecopyresampled功能 我不再得到黑色图像 但我仍然得到一些黑色部分 所以我认为我的比例公式应该更新 如果我上传横向图像 新图像的高度小于 17
  • SwiftUI - 如何编辑列表中的行?

    我想使用 EditButton 切换编辑模式 并将列表行切换到编辑模式 我想在编辑模式下包含一个用于打开模式的新按钮 我什至根本无法获取 EditMode 值来切换行内容 struct ContentView View Environmen
  • Django:ImageField 需要文件路径还是实际的图像对象?

    Running Windows 7 Python 3 3 Django 1 6 我对如何将图像存储为 Django 数据库中表的一部分感到困惑 有一个领域叫做ImageField 这是Docs https docs djangoprojec
  • 如何取消 jquery.load()?

    当 load 在 5 秒内没有返回时 我想取消 load 操作 如果是这样 我会显示一条错误消息 例如 抱歉 没有加载图片 我所拥有的是 超时处理 jQuery fn idle function time postFunction var
  • asp.net 检查 imageURL 是否存在

    我正在尝试从另一个 Intranet 站点获取用户的缩略图 但其中一些不遵循预定义的格式 这意味着我想加载默认的缩略图 检查图像 URL 是否有效的最佳方法是什么 根据您获取图像的方式 此方法的变体可能会起作用 img src alt My
  • 在 Java 中有效地对图像进行颜色循环

    我正在编写一个曼德尔布罗分形查看器 我想以智能的方式实现颜色循环 给定一个图像 我想修改它的 IndexColorModel 据我所知 没有办法修改 IndexColorModel 也没有办法为图像提供新的 IndexColorModel
  • 将base64字符串转换为图像c#时出错

    我想在我的网页上显示图像 并单击应该下载的链接按钮 存储的图像文件以二进制格式存储在db中 将 base64 字符串转换为图像时显示错误 详细信息如下 帮助我找到合适的解决方案 谢谢 Error Code protected void Pa
  • Python Flask 不更新图像[重复]

    这个问题在这里已经有答案了 这里有一些关于图像的 Flask 问题 但没有一个能解决我的问题 我有一个应用程序可以创建图像 保存它 然后显示它 一次 它应该多次执行此操作 每次更改图像时 它应该加载新图像 它不是 它只显示与其显示的文件名关
  • 特定日期的plotly js图像标记

    我正在使用这个例子 https plot ly javascript images add multiple images https plot ly javascript images add multiple images并尝试在特定日

随机推荐