我有这段代码可以将视图转换为图像。但是我希望我的图像采用jpeg格式。我需要在此代码中进行哪些更改才能将我的图像转换为JPEG格式。我没有在设备中显示我的视图。
extension UIView{
func createTransparentImage() -> UIImage {
let renderFormat = UIGraphicsImageRendererFormat.default()
renderFormat.opaque = false
self.isOpaque = false
self.layer.isOpaque = true
self.backgroundColor = UIColor.clear
self.layer.backgroundColor = UIColor.clear.cgColor
let renderer = UIGraphicsImageRenderer(size: bounds.size, format: renderFormat)
return renderer.image{
(context) in
layer.render(in: context.cgContext)
}
}
}
答案 0 :(得分:1)
extension UIView{
func captureViewAsImage() -> UIImage? {
var screenshotImage :UIImage?
let layer = self.layer
UIGraphicsBeginImageContextWithOptions(layer.frame.size, false, UIScreen.main.scale);
guard let context = UIGraphicsGetCurrentContext() else {return nil}
layer.render(in:context)
screenshotImage = UIGraphicsGetImageFromCurrentImageContext()
UIGraphicsEndImageContext()
return screenshotImage
}
}
并将此功能用作
let img = view.captureViewAsImage()
答案 1 :(得分:1)
因此,通过扩展名,您可以返回UIImage
,如果您可以将其转换为JPEG
或{{1},则可以另存为PNG
或Data
}在目标C中:
NSData
如果要保存此图像,您可以在let viewSnapshot = view.createTransparentImage()
//save as JPEG
if let data = viewSnapshot.jpegData(compressionQuality: 0.8) {
//variable data has the JPEG image with quality of 80%
}
//save as PNG
if let data = viewSnapshot.pngData() {
//variable data has the PNG data of the snapshot
}
if let data
鉴于您不需要let paths = FileManager.default.urls(for: .documentDirectory, in: .userDomainMask)
if let documentsDirectory = paths.first {
let fileName = documentsDirectory.appendingPathComponent("myImage.jpg")
try? data.write(to: fileName)
}
,而仅需要JPEG UIImage
,只需对扩展名进行如下修改:
data
请注意,最后一行已更改为:
extension UIView{
func createImageData(quality: CGFloat = 0.8) -> Data {
let renderFormat = UIGraphicsImageRendererFormat.default()
renderFormat.opaque = false
self.isOpaque = false
self.layer.isOpaque = true
self.backgroundColor = UIColor.clear
self.layer.backgroundColor = UIColor.clear.cgColor
let renderer = UIGraphicsImageRenderer(size: bounds.size, format: renderFormat)
return renderer.jpegData(withCompressionQuality: quality, actions: { context in
layer.render(in: context.cgContext)
})
}
}
因此,您只需执行以下操作即可
:return renderer.jpegData(withCompressionQuality: quality, actions: { context in
根据LeoDabus,如果需要,可以使用以下扩展名获取具有alpha透明性的let viewSnapshotData = view.createImageData(quality: 0.9)
的快照:
UIView