为什么UIImagePNGRepresentation返回的数据大于(10倍于)图像的原始数据大小

时间:2017-04-21 06:19:44

标签: ios uiimage sdwebimage

当我下载图像时使用sdwebimage,并在图像下载程序操作中打印- (void)URLSession:(NSURLSession *)session task:(NSURLSessionTask *)task didCompleteWithError:(NSError *)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的表示(无压缩)将使原始数据更大。是什么让这件事发生了?

1 个答案:

答案 0 :(得分:0)

PNG文件

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

Portable Network Graphics是一种无损文件格式,旨在取代GIF格式,因为GIF压缩的专利限制。该项目取得了成功,我们现在可以完全访问该格式,该格式无专利,具有很强的压缩性,并得到Web浏览器的广泛支持。 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只是失败。