gpt4 book ai didi

ios - 将非常大尺寸的图像缩小为非常小的图像,而不会失真和质量损失

转载 作者:行者123 更新时间:2023-11-30 12:12:14 24 4
gpt4 key购买 nike

我从后端收到一张大尺寸的图像,因为我必须放置与个人资料图片相同的图像,并在大小为 30x30 的选项卡栏的底部栏上显示相同的图像。我尝试以各种方式缩小图像,但没有任何效果。

尝试了Alamofire的方法也不起作用(图像看起来模糊且扭曲):

func resizeImageWithoutDistortion(image: UIImage, size : CGSize) -> UIImage{


// 1. Scale image to size disregarding aspect ratio
let scaledImage = image.af_imageScaled(to: size)

// 2. Scale image to fit within specified size while maintaining aspect ratio
let aspectScaledToFitImage = image.af_imageAspectScaled(toFit: size)

// 3. Scale image to fill specified size while maintaining aspect ratio
let aspectScaledToFillImage = image.af_imageAspectScaled(toFill: size)

return scaledImage.roundImage()
}

还尝试了以下方法,但也不起作用:

func resizeImage(_ newWidth: CGFloat) -> UIImage {

let ratio = size.width / size.height
if ratio > 1 {
UIGraphicsBeginImageContext(CGSize(width: newWidth, height: newWidth))
draw(in: CGRect(x: newWidth * ratio / 2 - newWidth, y: 0, width: newWidth * ratio, height: newWidth))
let newImage = UIGraphicsGetImageFromCurrentImageContext()
UIGraphicsEndImageContext()

return newImage!.roundImage()
} else {
UIGraphicsBeginImageContext(CGSize(width: newWidth, height: newWidth))
draw(in: CGRect(x: 0, y: (newWidth / ratio - newWidth) / 2 * (-1), width: newWidth, height: newWidth / ratio))
let newImage = UIGraphicsGetImageFromCurrentImageContext()
UIGraphicsEndImageContext()

return newImage!.roundImage()
}
}

在屏幕截图中,底部的图像非常扭曲。 enter image description here

最佳答案

Ishika,你的问题不是质量损失。您的问题是您没有考虑 iOS 缩放。

点和像素不是同一件事。

如果您有一个 W: 30 H: 30 (点)的 UIImageView 以像素为单位计算您的图像以清晰地显示它而不影响质量,您需要图像像素大小为:

30 * UIScreen.main.scale = 60 像素(如果是 2 倍缩放)

30 * UIScreen.main.scale = 90 像素(如果是 3 倍缩放)

这也是为什么你需要为 iOS 提供 @2x 和 @3x 缩放图像的原因。

因此,如果您想将 UIImage 调整为较小的尺寸,则需要考虑缩放。否则,您的图像将缩放以填充您的 UIImageView 并且它们将变得模糊,因为 UIImageView 大于 UIImage 尺寸。

看到这一点的一个好方法是,如果您设置 yourImageView.contentMode = .Center,您会发现 UIImage 比 UIImageView 本身小。

我不会用 Swift 编写代码,所以我无法为您提供直接代码(翻译起来很累),但如果您查看其他线程:

scale image to smaller size in swift3

您看到您的 UIGraphicsBeginImageContext例如缺少比例输入。

scale

The scale factor to apply to the bitmap. If you specify a value of 0.0, the scale factor is set to the scale factor of the device’s main screen.

编辑:对于你的情况,是这样的:

newWidth = newWidth / UIScreen.main.scale

UIGraphicsBeginImageContextWithOptions(CGSize(width: newWidth, height: newWidth), true, 0)

关于ios - 将非常大尺寸的图像缩小为非常小的图像,而不会失真和质量损失,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/45908008/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com