快速转换后保持相同的图像质量
Posted
技术标签:
【中文标题】快速转换后保持相同的图像质量【英文标题】:Keep same image quality after converting in swift 【发布时间】:2018-08-29 05:43:19 【问题描述】:我指的是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 affected the original image quality 引用了我的代码,它确实有帮助,但是当我检查图像的质量时,它仍然降低了。有什么办法可以防止画质下降?
【问题讨论】:
您裁剪了一张图片,将其拉伸到与原始图片相同的大小,但您对质量下降感到失望?你期望会发生什么? (顺便说一句,我没有投反对票) 嗨@Alexander 感谢您没有投票,我很抱歉,但我有点困惑。拉伸图像是什么意思?图像实际上并不模糊,但是当我计算图像中的像素时,它是应有的 1/3 【参考方案1】:在 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!
【讨论】:
以上是关于快速转换后保持相同的图像质量的主要内容,如果未能解决你的问题,请参考以下文章