首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >如何在不模糊的情况下保存/共享缩小的图像

如何在不模糊的情况下保存/共享缩小的图像
EN

Stack Overflow用户
提问于 2017-08-11 09:15:11
回答 1查看 123关注 0票数 1

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

代码语言:javascript
复制
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!
}
代码语言:javascript
复制
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的尺寸保存/共享,但实际的像素质量更高,如下图所示。请帮帮我,这对我来说是一个严重的问题和令人头疼的问题。

EN

回答 1

Stack Overflow用户

发布于 2017-08-11 12:53:42

代码语言:javascript
复制
 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
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/45625530

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档