我有一张图片,我需要保存它不降低质量或调整大小。文件大小应尽可能小。但我什至无法以原始文件大小保存它。
我有一个 image.jpg(文件大小为 2.1Mb)。我把它放在包里并读入一个 Swift 代码。在我使用 .pngData() 将它提取到 PNG 并保存为 .png 后,文件大小为 18.1 Mb - 这太荒谬了,即使我删除了 Alpha 通道 - 它仍然会有 9-12 Mb。
如果我使用 .jpegData() - 它仍然比源图像多得多 仅当我获得质量为 0.65% 的 jpeg 时 - 我可以获得 2.1Mb - 与源相同,但质量有明显损失。
解决方案在哪里?如何在不损失质量和不增加文件大小的情况下对其进行优化和保存?
func foo() {
let bundleURL = Bundle.main.bundleURL
// Source file size: 2.1 MB
let assetURL = bundleURL.appendingPathComponent("sourceBundle.bundle/image.jpg")
let srcUImage = UIImage.init(contentsOfFile: assetURL.relativePath)
if let dataPng = srcUImage!.pngData() {
printSize(data: dataPng) // Size: 18.1 MB
}
if let dataJpg = srcUImage!.jpegData(compressionQuality: 1.0) {
printSize(data: dataJpg) // Size: 5.3 MB
}
if let dataJpg = srcUImage!.jpegData(compressionQuality: 0.65) {
printSize(data: dataJpg) // Size: 2.1 MB
}
}
func printSize(data: Data) {
let bcf = ByteCountFormatter()
bcf.allowedUnits = [.useMB]
bcf.countStyle = .file
let string = bcf.string(fromByteCount: Int64(data.count))
print("Size: \(string)")
}