从UIImage检索数据时,图像大小会增加

时间:2019-04-25 10:02:53

标签: ios swift

当我将图像从文件路径加载到UIImage中时,大小最终会增加。我在做错什么吗?

let imageData = try! Data(contentsOf: imageUrl)
print("Original file size : \(imageData.count.readableSize())") // Displays 2.34 MB

let image = UIImage(contentsOfFile: imageUrl.path)
print("UIImage file size : \(image.pngData()!.readableSize())") // Displays 5.71 MB

extension Int
{
    func readableSize() -> String
    {
        let units = ["bytes", "KB", "MB", "GB", "TB"]

        var count = 0
        var readableFileSize = self

        while readableFileSize > 1024
        {
            readableFileSize = readableFileSize/1024
            count += 1
        }

        return String(format: "%.2f", readableFileSize) + " " + units[count]
    }
}

在上面的代码示例中,假定加载的图像是png格式。

我正在寻找一种方法来避免这种情况并获取最初加载的实际数据

编辑:我正在尝试将图像加载到UIImage中,调整其大小,然后将其保存回文件系统中。由于上述原因,我正在寻找一种在不增加文件大小的情况下实现此目标的方法。我甚至愿意在不将图像加载到UIImage中的情况下调整大小。

2 个答案:

答案 0 :(得分:0)

尝试一下:

let remoteImageData = try? Data(contentsOf: URL(string: "https://upload.wikimedia.org/wikipedia/de/b/bb/Png-logo.png")!)
print(remoteImageData)

if let imageFileUrl = Bundle.main.url(forResource: "Png-logo", withExtension: "png") {
    let imageFileData = try? Data(contentsOf: imageFileUrl)
    print(imageFileData)
}

打印:

Optional(811068 bytes)
Optional(811068 bytes)

答案 1 :(得分:0)

也许它不能回答您的问题,但我想分享一些有用的信息。

代码:

let documentsDirectory = FileManager.default.urls(for: .documentDirectory, in: .userDomainMask).first!
let fileName = "2.png"
let fileURL = documentsDirectory.appendingPathComponent(fileName)

let imageData = try! Data(contentsOf: fileURL)
print("Original file size : \(imageData.count/1024)")

let image = UIImage(contentsOfFile: fileURL.path)
print("UIImage file size : \(image!.pngData()!.count/1024)")

问题中提到的调试日志(大小不同):

Original file size : 6083
UIImage file size : 14982

结论:

  

经过大量的研究和挫折,我意识到   文档目录(14982)中的图片,并且来自数据的图片大小为   相同的(14982),这意味着当我们从URL获取数据时,系统会自动对其进行压缩。