我能找到的所有代码都围绕将图像直接加载到可视控件中 .
但是,我有自己的缓存系统(从另一种语言转换项目),所以我尽可能高效地想要以下内容:
-
加载jpg / png图像 - 可能是一个位图/ cgimage . (他可以来自文件系统,也可以来自在线下载的图像)
-
可能将图像保存为压缩/调整大小的png / jpg文件
-
为可视控件提供图像参考
我是swift和ios平台的新手,但据我所知,cgimage尽可能接近?但是,在使用cgimage时,似乎没有办法从文件系统加载图像......但是我发现有人在讨论例如UIImage,所以我现在怀疑我最初的印象ha cgimage是我最需要的 .
3 回答
在
UIImage
,CGImage
和CIImage
之间很容易混淆 . 区别在于:UIImage:
UIImage
object是一种显示图像数据的高级方法 . 您可以从文件,Quartz
图像对象或您收到的原始图像数据创建图像 . 它们是不可变的,必须在初始化时指定图像的属性 . 这也意味着可以从任何线程安全地使用这些图像对象 . 通常,您可以获取包含PNG
或JPEG
表示图像的NSData
对象,并将其转换为UIImage .CGImage:
CGImage
只能代表位图 . CoreGraphics中的操作,例如混合模式和屏蔽需要CGImageRefs
. 如果需要访问和更改实际位图数据,可以使用CGImage
. 它也可以转换为NSBitmapImageReps
.CIImage:
CIImage
是一个表示图像的不可变对象 . 这不是一个图像 . 它只有与之关联的图像数据 . 它具有生成图像所需的所有信息 . 您通常将CIImage
对象与其他Core Image类结合使用,例如CIFilter
,CIContext
,CIColor
和CIVector
. 您可以使用从各种来源提供的数据创建CIImage对象,例如Quartz
2D图像,核心视频图像等 . 需要使用各种GPU
优化的核心图像过滤器 . 它们也可以转换为NSBitmapImageReps
. 它可以基于CPU或GPU .总之,
UIImage
正是您所寻找的 . 原因是:You can get image from device memory and assign it to UIImage
You can get image from URL and assign it to UIImage
You can write UIImage in your desired format to device memory
You can resize image assigned to UIImage
Once you have assigned an image to UIImage, you can use that instance in controls directly. e.g. setting background of a button, setting as image for UIImageView
会添加代码示例,但所有这些都是Stackoverflow上已经回答的基本问题,所以没有意义 . 更不用说添加代码会使这不必要地变大 .
总结差异的信用:Randall Leung
您可以轻松地将图像加载到UIImage对象中......
如果您想在视图中显示它,可以使用
UIImageView
:在UIImage documentation中查看更多信息 .
根据以下文件:https://developer.apple.com/documentation/uikit/uiimage