【问题标题】:How to save/share scaled down image without getting blurred如何在不模糊的情况下保存/共享缩小的图像
【发布时间】:2018-01-19 09:36:51
【问题描述】:

我有一个真正的问题。我使用了以下算法来调整图像大小和共享。

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 尺寸保存/共享,但实际像素质量更高,如下图所示。请帮助我,这对我来说是一个严重的问题和头痛。

【问题讨论】:

  • 您可以发布您的代码以供分享吗?
  • 完成 @ReinierMelian 我正在使用 UIActivityViewController 进行图像共享/保存。
  • 缺少代码的重要部分(保存),不是吗?
  • @Trilarion 不,UIActivityViewController 也允许您将附加的图像直接保存到图库。

标签: ios iphone image-processing uiimage image-resizing


【解决方案1】:
 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)
}

【讨论】:

  • Vaneet 您几乎使用了与我相同的源代码。您刚刚添加了一个函数来计算缩放图像的新大小。我的问题不在于图像大小,我的问题是为什么保存/显示模糊图像?就像在 600x600 画布尺寸上保存 150x150 图像一样。它也应该将画布尺寸减小到 150x150。
猜你喜欢
  • 2018-08-27
  • 2011-07-29
  • 1970-01-01
  • 2021-08-11
  • 2014-11-17
  • 2022-12-05
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多