2017-08-11 77 views
1

我有一個真正的問題。我已經使用以下算法進行圖像大小調整和分享。如何保存/分享按比例縮小的圖像而不會模糊

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

回答

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

相關問題