当前位置: 首页 > news >正文

swift 中 CGImage CIImage UIImage 等 有什么区别

1. UIImage - 高级图像类

用途:最常用的图像类,用于在 UIKit/AppKit 中显示图像

// 创建 UIImage
let image = UIImage(named: "example")
let imageFromData = UIImage(data: imageData)// 显示在界面上
let imageView = UIImageView(image: image)// 常用操作
image.size // 获取尺寸
image.pngData() // 转换为 PNG 数据
image.jpegData(compressionQuality: 0.8) // 转换为 JPEG 数据

特点

  • 高级抽象,易于使用

  • 自动处理 Retina 显示屏

  • 支持多种图像格式

  • 可以直接在 UI 控件中使用

2. CGImage - 核心图形图像类

用途:底层的位图表示,用于像素级操作

// 从 UIImage 获取 CGImage
guard let cgImage = image.cgImage else { return }// 直接创建 CGImage
let context = CGContext(...)
let cgImage = context.makeImage()// 像素级操作
let width = cgImage.width
let height = cgImage.height
let colorSpace = cgImage.colorSpace
let bitsPerComponent = cgImage.bitsPerComponent// 裁剪
let croppedImage = cgImage.cropping(to: CGRect(x: 0, y: 0, width: 100, height: 100))

特点

  • 轻量级的位图表示

  • 提供像素数据的直接访问

  • 用于 Core Graphics 绘图操作

  • 不支持图像滤镜

3. CIImage - 核心图像处理类

用途:用于图像处理和滤镜应用

// 创建 CIImage
let ciImage = CIImage(image: image)
let ciImageFromCG = CIImage(cgImage: cgImage)
let ciImageFromURL = CIImage(contentsOf: imageURL)// 应用滤镜
let filter = CIFilter(name: "CISepiaTone")
filter?.setValue(ciImage, forKey: kCIInputImageKey)
filter?.setValue(0.8, forKey: kCIInputIntensityKey)if let outputImage = filter?.outputImage {// 渲染结果let context = CIContext()if let resultCGImage = context.createCGImage(outputImage, from: outputImage.extent) {let resultUIImage = UIImage(cgImage: resultCGImage)}
}

特点

  • 表示图像处理流水线,不是实际的像素数据

  • 支持大量的内置滤镜

  • 延迟计算,高效处理大图像

  • 需要渲染才能显示

转换关系

// UIImage → CGImage
let cgImage = uiImage.cgImage// UIImage → CIImage
let ciImage = CIImage(image: uiImage)// CGImage → UIImage
let uiImageFromCG = UIImage(cgImage: cgImage)// CGImage → CIImage
let ciImageFromCG = CIImage(cgImage: cgImage)// CIImage → CGImage (需要渲染)
let context = CIContext()
let cgImageFromCI = context.createCGImage(ciImage, from: ciImage.extent)// CIImage → UIImage
let uiImageFromCI = UIImage(ciImage: ciImage)

使用场景总结

使用场景性能特点
UIImageUI 显示、简单图像操作自动缓存、支持多种格式
CGImage像素级操作、裁剪、绘图轻量级、直接访问像素数据
CIImage图像滤镜、复杂图像处理延迟计算、高效的滤镜应用

实际应用示例

// 完整的图像处理流程
func applyFilterToImage(_ image: UIImage) -> UIImage? {// UIImage → CIImageguard let ciImage = CIImage(image: image) else { return nil }// 应用滤镜let filter = CIFilter(name: "CIVignette")filter?.setValue(ciImage, forKey: kCIInputImageKey)filter?.setValue(0.8, forKey: kCIInputIntensityKey)guard let outputImage = filter?.outputImage else { return nil }// CIImage → CGImage → UIImagelet context = CIContext()guard let cgImage = context.createCGImage(outputImage, from: outputImage.extent) else { return nil }return UIImage(cgImage: cgImage)
}

http://www.dtcms.com/a/610937.html

相关文章:

  • 智能网站开发自己建网站的优势
  • 下载flash网站蓄电池回收网站建设
  • 高级边界扫描 --4-- 使用Silicon Nail测试
  • 商品历史价格数据采集:基于DrissionPage的智能爬虫实战
  • mysql锁相关
  • 网站设计网站维护网站备案资料 下载
  • 右半平面零点(RHPZ)的挑战与解决方案:Boost和Flyback变换器稳定性深度解析
  • 张家港做网站排名网站排名标准
  • C# 容器实例生命周期
  • OFD(Open File Description)
  • LLM思维链提示(CoT)
  • 重庆网站建设快速建站中山优秀网站建设
  • 【愚公系列】《MCP协议与AI Agent开发》011-MCP协议标准与规范体系(交互协议与状态码体系)
  • 算法学习--快速幂
  • 快速排序简要介绍
  • 阆中 网站建设html网页制作小刘在线课程
  • 无锡网站建设无锡速联科技做网站首页可以用传媒公司吗
  • 建站公司网站 phpwind自己做的网站怎么给别人访问
  • 百度世界2025|实时互动数字人智能体让搜索更懂人心
  • 每个城市建设规划在哪个网站做it的中国企业网站
  • 中国工程建设标准化协会网站wordpress登录注册
  • dB 及 dBm、dBc、dBi、dBd 等相关单位的定义、计算公式、应用场景及区别
  • 企业级管理系统的站内信怎么轻量级优雅实现
  • 门户网站网站建设wordpress页面分类插件
  • 网站建设培训学费互联网做网站
  • Visual C++ 6.0 中文版安装包下载及 Win11 安装教程
  • 免费的资料网站取消工法建设部网站
  • PostgreSQL 大表字段回填最佳实践:高并发无锁更新 + 分批提交 + 完整进度显示
  • STM32_标准库转hal库
  • 织梦怎么做单页网站创建网站的工作流程