优化保存在 Swift 中的图像文件大小(JPG、PNG)

时间:2021-03-21 22:55:29

标签: ios swift png jpeg

我有一张图片,我需要保存它不降低质量或调整大小。文件大小应尽可能小。但我什至无法以原始文件大小保存它。

我有一个 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)")
}

0 个答案:

没有答案
相关问题