Objective c 如何获得图像的精确大小(以字节为单位)?

Objective c 如何获得图像的精确大小(以字节为单位)?,objective-c,uiimageview,uiimage,nsdata,uiimagejpegrepresentation,Objective C,Uiimageview,Uiimage,Nsdata,Uiimagejpegrepresentation,我通过将图像转换为NSData计算了图像大小(以字节为单位),但它的数据长度得到了错误的值 NSData *data = UIImageJPEGRepresentation(image,0.5); NSLog(@"image size in bytes %lu",(unsigned long)data.length); 实际上,这里的UIImage.length函数并没有返回错误的值,它只是从UIImage到NSData的有损转换/恢复的结果 在UIImageJpegRepre

我通过将图像转换为NSData计算了图像大小(以字节为单位),但它的数据长度得到了错误的值

    NSData *data = UIImageJPEGRepresentation(image,0.5);
    NSLog(@"image size in bytes %lu",(unsigned long)data.length);

实际上,这里的UIImage.length函数并没有返回错误的值,它只是从UIImage到NSData的有损转换/恢复的结果

在UIImageJpegRepresentation中将compressionQuality设置为尽可能低的1.0压缩,将不会返回原始图像。虽然图像元数据在此过程中被剥离,但函数可以而且通常会生成比原始对象大的对象。请注意,文件大小的增加不会提高压缩原始图像的质量。JPEG从一开始就是高度压缩的,这就是为什么经常使用JPEG的原因,函数是先解压缩,然后再重新压缩。这有点像在你的身体拉长后注射肉毒杆菌,它看起来可能和原来的很相似,但它的内部并不像以前那么好

您可以在较大的文件上有条件地使用较低的压缩质量,接近1.0,因为质量会很快下降。除此之外,根据图像的最终用途,唯一的其他选择是调整图像大小或调整其分辨率,可能除了调整压缩比之外。此更改将以指数方式减少数据使用。网络和移动应用通常不需要分辨率,就像用于数字打印的图像一样


您可以编写一些代码,只根据需要调整每个图像和NSData表示,以适应其各自的数据约束。

对于
.length
值,您得到了什么?如果0,是
数据
?我得到了非零值。e、 g.I将大小为2,18169字节的图像转换为NSData,得到的数据长度为127201字节。当你说“大小为218169字节的图像”时,你的意思是UIImage就是这个大小吗?您是如何创建UIImage的?您是如何测量其大小的?在任何情况下,损失/收缩是否可能是由于压缩质量设置为0.5?当你通过1.0而不是0.5时会发生什么?0.75? 0.25?NSData*数据=UIImageJPEG表示(图像,1);NSLog(@“ImageData的字节数为%lu”,(无符号长)data.length);如果(data.length=200){image=[self-imageWithImage:image and-width:image.size.width/2 and-height:image.size.height/2];data=uiimagejpegresentation(image,1)}NSData*data1=uiimagejpegresentation(image,1);NSLog(@“压缩后图像大小%lu”,(无符号长)data1.length);}请检查给出的代码。我需要发送一个图像到服务器,它应该小于200KB。为此,我将UIImage转换为数据,并检查数据长度是否小于或等于204800。如果长度大于204800,则必须压缩图像。我给出了大小为218169字节的图像(如详细所示),其长度数据返回127201字节,因此该条件失败。