如何保存/分享按比例缩小的图像而不会模糊

问题描述:

我有一个真正的问题。我已经使用以下算法进行图像大小调整和分享。如何保存/分享按比例缩小的图像而不会模糊

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 但是,当我尝试保存或共享缩小的图像时,它会获得与实际图像相同的尺寸,但会变得模糊。请看下面的图片。 Actual image size and dimensions

以上是实际图像尺寸和600×600的 Resized image size and dimensions

尺寸和被保存/共享这个调整大小的图像(150×150)。
我希望此图像在150x150尺寸中保存/共享,但实际像素图像质量较高。请帮助我,这对我来说是一个严重的问题和头痛。 enter image description here

+0

你可以发布你的共享代码吗? –

+0

done @ReinierMelian我正在使用UIActivityViewController进行图像共享/保存。 –

+0

您的代码(保存)的重要部分丢失了,不是吗? – Trilarion

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。 –