OGeek|极客世界-中国程序员成长平台

标题: ios - 为什么 UIImagePNGRepresentation 返回的数据大于(10 倍于)图像的原始数据大小 [打印本页]

作者: 菜鸟教程小白    时间: 2022-12-11 19:32
标题: ios - 为什么 UIImagePNGRepresentation 返回的数据大于(10 倍于)图像的原始数据大小

当我下载图像时使用 sdwebimage,并在图像下载器操作的 中打印 - (void)URLSessionNSURLSession *)session taskNSURLSessionTask *)task didCompleteWithErrorNSError *)error {

        UIImage *image = [UIImage sd_imageWithData:self.imageData];
        NSString *key = [[SDWebImageManager sharedManager] cacheKeyForURL:self.request.URL];
        image = [self scaledImageForKey:key image:image];
        NSLog(@"didCompleteWithError:%@ data lenght:%ld png::%ld,jpg:%ld",self.request.URL,[self.imageData length],[UIImagePNGRepresentation(image) length],[UIImageJPEGRepresentation(image, 1) length]);

日志证明了这一点

data lenght:163480 png::202498,jpg:131774

原始数据长度是服务器中图像文件的确切文件大小,但是当我使用这些原始数据创建图像并使用 UIImagePNGRepresentation 或 UIImageJPEGRepresentation 获取 UIImage 的 NSData 长度时,似乎 png 和 jpg UIImage 的呈现(无压缩)会比原始数据更大。是什么原因造成的?



Best Answer-推荐答案


PNG 文件

PNG 格式是一种无损压缩文件格式,这使其成为在 Web 上使用的常见选择。 PNG 非常适合以小文件大小存储线条图、文本和标志性图形。

由于 GIF 压缩的专利限制,Portable Network Graphics 是一种无损文件格式,旨在取代 GIF 格式。该项目取得了成功,我们现在可以完全访问该格式,该格式没有专利,压缩率很高,并且受到网络浏览器的广泛支持。 PNG 文件主要用于透明图像、单色图像和带有硬线的图像,如文本。 PNG文件有两个版本:8位PNG(称为PNG-8)和24位PNG(称为PNG-24)。 PNG-8 被限制为 256 种索引颜色,而 PNG-24 有数百万种颜色。

JPEG 文件

联合摄影专家组创建了一种文件格式,创造性地命名为 JPEG\ˈjā-ˌpeg\,用于处理复杂色彩的摄影图像。将文件另存为 JPEG 时,用户可以选择质量还是压缩。更多的压缩会导致更小的文件大小,但您会损失质量。显然,较少的压缩会导致较大的文件大小,但也会产生更高质量的图像。 JPEG 压缩的好处在于,您通常可以找到看起来不错且文件大小较小的平衡点。不幸的是,JPEG 文件没有透明度。此外,文件格式是有损的,这意味着每次压缩时都会丢失一些数据。如果由于某种原因多次重新保存同一张图像,图像质量可能会降低。

JPG 格式是一种有损压缩文件格式。这对于以比 BMP 更小的尺寸存储照片非常有用。 JPG 是在 Web 上使用的常见选择,因为它是经过压缩的。为了以较小的文件大小存储线条图、文本和标志性图形,GIF 或 PNG 是更好的选择,因为它们是无损的。

JPEG 用于照片和逼真的图像。 PNG适用于线条艺术、文字较多的图像和颜色较少的图像。 GIF 只是失败了。

关于ios - 为什么 UIImagePNGRepresentation 返回的数据大于(10 倍于)图像的原始数据大小,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/43535295/






欢迎光临 OGeek|极客世界-中国程序员成长平台 (http://ogeek.cn/) Powered by Discuz! X3.4