簡體   English   中英

如何在不模糊的情況下保存/共享按比例縮小的圖像

[英]How to save/share scaled down image without getting blurred

我有一個真正的問題。 我使用以下算法進行圖像大小調整和共享。

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一樣,但是當我嘗試保存或共享該縮小的圖像時,它的大小與實際圖像相同,但是變得模糊。 請查看以下圖像。 實際圖像尺寸和尺寸

以上是實際圖片尺寸和尺寸600x600 調整圖像大小和尺寸

這是保存/共享的尺寸調整后的圖片(150x150)。
我希望此圖像以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)
}

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM