swift - 快速转换后保持相同的图像质量
问题描述
我指的是ZImageCropper用于我的项目来裁剪图像。但是,它会在转换过程中降低图像的质量。
我知道图像质量降低的原因之一是UIGraphicsBeginImageContextWithOptions(imageView.bounds.size, false, 1)
我已经尝试将其更改UIGraphicsBeginImageContextWithOptions(imageView.bounds.size, false, 0)
为UIGraphicsBeginImageContextWithOptions(imageView.bounds.size, false, UIScreen.main.scale)
我从 Resize and Crop 2 Images 引用了我的代码影响了原始图像质量它确实有帮助,但是当我检查图像的质量时,它仍然降低了。有什么方法可以防止图像质量下降?
解决方案
在 iOS 10 及更高版本中,您可以调整任何 UIImage 的大小而不会造成质量损失,希望这会有所帮助:
func resize(targetSize: CGSize) -> UIImage {
if #available(iOS 10.0, *) {
return UIGraphicsImageRenderer(size: targetSize).image { _ in
self.draw(in: CGRect(origin: .zero, size: targetSize))
}
} else {
return resizeImage(maxSize: targetSize.width)
}
}
func resizeImage(maxSize: CGFloat) -> UIImage {
var newWidth = size.width
var newHeight = size.height
if size.width >= maxSize {
newWidth = min(maxSize, size.width)
newHeight = maxSize * size.height / size.width
} else if size.height >= maxSize {
newHeight = min(maxSize, size.height)
newWidth = maxSize * size.width / size.height
}
UIGraphicsBeginImageContext(CGSize(width: newWidth, height: newHeight))
draw(in: CGRect(x: 0, y: 0, width: newWidth, height: newHeight))
let newImage = UIGraphicsGetImageFromCurrentImageContext()
UIGraphicsEndImageContext()
return newImage!
}
推荐阅读
- java - 为什么在某些情况下我们必须将 Immutable 转换为 Pair?
- node.js - 在 MongoDB 中存储 Amazon SNS 的令牌
- python - 如何使用此时间序列数据进行作物预测?
- javascript - addEventListener("change" ... 用于改变 innerHTML 的输入工程的值上升但不下降
- powerbi - 如何设置 Power BI 许可证
- javascript - 访问复杂 javascript 对象的元素
- python - 是否有更有效的方法来迭代矩阵并在特定列上执行计算?
- html - 向下滚动时,如何使它与我的视频重叠?
- sql - 为什么在 Postgres 中查询 LTREE 时字符串连接不起作用?
- grails - grails 4 sessionRegistry为空