我正在尝试从默认相机捕获的图像创建贴纸图像。
我需要将此图像的大小调整为特定的 512x512 尺寸,最大尺寸为 100 kb。但是,我找不到任何解决方案。
我尝试将图像大小调整为 512x512。使用以下代码。
var image = imgFront?.resizeWithWidth(width: 512)
extension UIImage {
func resizeWithWidth(width: CGFloat) -> UIImage? {
let imageView = UIImageView(frame: CGRect(origin: .zero, size: CGSize(width: width, height: width)))
imageView.contentMode = .scaleAspectFit
imageView.image = self
UIGraphicsBeginImageContextWithOptions(CGSize(width: width, height: width), false, scale)
guard let context = UIGraphicsGetCurrentContext() else { return nil }
imageView.layer.render(in: context)
guard let result = UIGraphicsGetImageFromCurrentImageContext() else { return nil }
UIGraphicsEndImageContext()
return result
}
}
这使得图像正确地变为 512x512。但是,当我尝试使用以下方法将图像大小减小到 100 kb 以下时,它会改变图像的尺寸。
extension UIImage {
func resized(withPercentage percentage: CGFloat) -> UIImage? {
let canvasSize = CGSize(width: 512, height: 512)
UIGraphicsBeginImageContextWithOptions(canvasSize, false, scale)
defer { UIGraphicsEndImageContext() }
draw(in: CGRect(origin: .zero, size: canvasSize))
return UIGraphicsGetImageFromCurrentImageContext()
}
func resizedTo100KB() -> UIImage? {
guard self.pngData() != nil else { return nil }
let megaByte = 800.0
var resizingImage = self
var imageSizeKB = 990.0 // ! Or devide for 1024 if you need KB but not kB
while imageSizeKB > megaByte { // ! Or use 1024 if you need KB but not kB
guard let resizedImage = resizingImage.resized(withPercentage: 0.1),
let imageData = resizedImage.pngData() else { return nil }
resizingImage = resizedImage
imageSizeKB = Double(imageData.count) / megaByte // ! Or devide for 1024 if you need KB but not kB
}
return resizingImage
}
}
任何人都可以建议我实现这一目标的好解决方案吗?
约束
- 图片尺寸必须为 512x512
- 图像大小必须是小于 100 的任意大小 kb。
最佳答案
您应该使用 jpg 数据而不是 png 数据来获得小字节大小的图像。
关于ios - 在 iOS 中将图像大小减小至最大 100 kb,并固定尺寸 512x512,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/57740105/