我有一个真心的问题。我使用了以下算法来调整图像大小和共享图像。
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的尺寸保存/共享,但实际的像素质量更高,如下图所示。请帮帮我,这对我来说是一个严重的问题和令人头疼的问题。

发布于 2017-08-11 12:53:42
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)
}https://stackoverflow.com/questions/45625530
复制相似问题