我在 iOS 应用程序中遇到了一个与图像大小调整和上传相关的特殊问题。我实现了一种在将图像上传到服务器之前调整图像大小以适应特定尺寸范围(最小尺寸:320px,最大尺寸:1536px)的方法。通过在调整大小后直接检查 UIImage 来验证,调整大小似乎工作得很好。然而,当我将调整大小的图像转换为数据(JPEG 格式)以准备上传时,它似乎恢复到其原始大小或不保持调整大小的尺寸。
这是我正在使用的调整大小方法:
func resizedImage(minimumSize: CGFloat, maximumSize: CGFloat) -> UIImage? {
let originalWidth = size.width
let originalHeight = size.height
var scaleFactor: CGFloat
var newWidth: CGFloat
var newHeight: CGFloat
if originalWidth < minimumSize || originalHeight < minimumSize {
scaleFactor = max(minimumSize / originalWidth, minimumSize / originalHeight)
} else if originalWidth > maximumSize || originalHeight > maximumSize {
scaleFactor = min(maximumSize / originalWidth, maximumSize / originalHeight)
} else {
scaleFactor = 1.0
}
newWidth = originalWidth * scaleFactor
newHeight = originalHeight * scaleFactor
UIGraphicsBeginImageContextWithOptions(CGSize(width: newWidth, height: newHeight), false, 0)
draw(in: CGRect(x: 0, y: 0, width: newWidth, height: newHeight))
let resizedImage = UIGraphicsGetImageFromCurrentImageContext()
UIGraphicsEndImageContext()
return resizedImage
}
调整大小后,当我尝试将调整大小的 UIImage 转换为如下数据时:
if let resizedImage = resizedImage(minimumSize: 320, maximumSize: 1536) {
let imageData = resizedImage.jpegData(compressionQuality: 1.0)
// Proceed to upload imageData
}
尽管调整了大小,
imageData
似乎反映了原始图像大小而不是调整后的图像大小。此问题发生在上传之前、为请求正文准备图像数据期间。目标是确保上传到服务器的图像遵守指定的大小限制。在调整大小或数据转换过程中是否有我忽略的事情可能导致图像恢复到其原始尺寸?
任何关于如何确保调整大小的图像在转换为上传数据时保持其尺寸的建议或见解将不胜感激。谢谢!
UIGraphicsBeginImageContextWithOptions
与使用 0
比例的最后一个参数一起使用意味着它将使用设备的比例。例如,如果在具有 3× 视网膜屏幕的设备上将图像渲染为尺寸为 100×100、比例为 0
的图像,则生成的 UIImage
将具有 100×100 的 size
,但其 scale
将是 3
,其生成的 JPEG 将为 300×300px。
如果您希望生成的图像为 100×100 像素,请使用
1
比例。