Swift压缩图片到指定大小以内,尺寸和体积双压缩
在Swift中,可以使用Core Graphics和Image I/O框架来实现图片的压缩。以下是将图片压缩到指定大小以内的示例代码:
func compressImage(image: UIImage, maxSize: Int) -> Data? {
var compression: CGFloat = 1.0 let maxCompression: CGFloat = 0.1 let targetSize = CGSize(width: 1024, height: 1024) //指定尺寸 let scale = UIScreen.main.scale //根据设备屏幕缩放比例调整尺寸
var imageData = image.jpegData(compressionQuality: compression)
var imageSize = imageData?.count ?? 0 var sizeExceeded = imageSize > maxSize
while sizeExceeded && compression > maxCompression {
compression -= 0.1 imageData = image.jpegData(compressionQuality: compression)
imageSize = imageData?.count ?? 0 sizeExceeded = imageSize > maxSize
}
if let imageSource = CGImageSourceCreateWithData(imageData as CFData, nil) {
let options: [CFString: Any] = [
kCGImageSourceThumbnailMaxPixelSize: max(targetSize.width, targetSize.height) * scale,
kCGImageSourceCreateThumbnailFromImageAlways: true,
kCGImageSourceCreateThumbnailWithTransform: true ]
if let scaledImage = CGImageSourceCreateThumbnailAtIndex(imageSource, 0, options as CFDictionary) {
if let scaledImageData = UIImage(cgImage: scaledImage).jpegData(compressionQuality: compression) {
imageData = scaledImageData
}
}
}
return imageData
}
该函数的参数image是要压缩的图片,maxSize是指定的最大尺寸,单位为字节。该函数会先尝试将图片质量压缩到指定大小以内,如果仍然超过指定大小,则会将图片尺寸缩小到指定大小以内。
在上面的代码中,首先定义了压缩质量的初始值compression为1.0,最小压缩质量maxCompression为0.1。然后通过循环将压缩质量逐渐降低,直到图片大小不超过指定大小或者压缩质量降到最小值为止。
接着使用Core Graphics框架中的CGImageSourceCreateWithData函数创建了一个图片源imageSource,然后通过指定缩略图的最大像素大小和其他选项,使用CGImageSourceCreateThumbnailAtIndex函数创建了一个缩略图。最后再将缩略图转换为JPEG格式的二进制数据返回即可。
需要注意的是,上述代码中指定了缩略图的尺寸为1024x1024,可以根据实际需求进行调整。同时,该函数返回的是JPEG格式的二进制数据,可以根据需要进行存储或展示。