如何保存/分享按比例缩小的图像而不会模糊
问题描述:
我有一个真正的问题。我已经使用以下算法进行图像大小调整和分享。如何保存/分享按比例缩小的图像而不会模糊
func resizeImageWith(newSize: CGSize) -> UIImage {
let horizontalRatio = newSize.width/size.width
let verticalRatio = newSize.height/size.height
let ratio = max(horizontalRatio, verticalRatio)
let newSize = CGSize(width: size.width * ratio, height: size.height * ratio)
UIGraphicsBeginImageContextWithOptions(newSize, true, 0)
draw(in: CGRect(origin: CGPoint(x: 0, y: 0), size: newSize))
let newImage = UIGraphicsGetImageFromCurrentImageContext()
UIGraphicsEndImageContext()
return newImage!
}
func shareImageToSM(image : UIImage) {
let imageToShare = [ image ]
let activityVC = UIActivityViewController(activityItems: imageToShare, applicationActivities: nil)
//New Excluded Activities Code
if #available(iOS 9.0, *) {
activityVC.excludedActivityTypes = [UIActivityType.airDrop, UIActivityType.addToReadingList, UIActivityType.openInIBooks]
} else {
activityVC.excludedActivityTypes = [UIActivityType.airDrop, UIActivityType.addToReadingList]
}
//
activityVC.popoverPresentationController?.sourceView = self.view
self.present(activityVC, animated: true, completion: nil)
}
它正确地调整图像大小。就像它将我的600x600图像缩小为150x150 但是,当我尝试保存或共享缩小的图像时,它会获得与实际图像相同的尺寸,但会变得模糊。请看下面的图片。
尺寸和被保存/共享这个调整大小的图像(150×150)。
我希望此图像在150x150尺寸中保存/共享,但实际像素图像质量较高。请帮助我,这对我来说是一个严重的问题和头痛。
答
enum ImageQuality:CGFloat {
case iq_50 = 50, iq_100 = 100 ,iq_320 = 320, iq_480 = 480 , iq_640 = 640 , iq_720 = 720 , iq_1024 = 1024
}
static func scaleImage(sourceImage: UIImage, imageQuality:ImageQuality) -> UIImage{
let finalSize:CGSize = getNewsize(sourceSize: sourceImage.size, targetSize: imageQuality.rawValue)
UIGraphicsBeginImageContextWithOptions(finalSize, false, 0)
sourceImage.draw(in: CGRect(origin: .zero, size: finalSize))
let newImage = UIGraphicsGetImageFromCurrentImageContext()!
UIGraphicsEndImageContext()
return newImage
}
static func getNewsize(sourceSize:CGSize, targetSize:CGFloat) -> CGSize{
let width: CGFloat = sourceSize.width
let height: CGFloat = sourceSize.height
var scaleFactor: CGFloat = 0.0
var scaledWidth: CGFloat = targetSize
var scaledHeight: CGFloat = targetSize
let widthFactor: CGFloat = targetSize/width
let heightFactor: CGFloat = targetSize/height
if widthFactor > heightFactor {
scaleFactor = widthFactor
}
else {
scaleFactor = heightFactor
}
scaledWidth = width * scaleFactor
scaledHeight = height * scaleFactor
return CGSize(width: scaledWidth, height: scaledHeight)
}
+0
Vaneet你几乎使用我使用的相同的源代码。您只是添加了一个函数来计算缩放图像的新大小。我的问题不是图像大小,我的问题是为什么它保存/显示模糊图像?它就像在600x600的画布尺寸上保存150x150图像一样。它应该将画布尺寸减小到150x150。 –
你可以发布你的共享代码吗? –
done @ReinierMelian我正在使用UIActivityViewController进行图像共享/保存。 –
您的代码(保存)的重要部分丢失了,不是吗? – Trilarion