Sti*_*Sti 2 image objective-c uiimage ios image-size
我正在创建一个基于回合的游戏,并使用GameCenter来处理它.在这里,我想在matchData中发送一个小图片/图标进行匹配.这个查询与Game Center无关,但由于Game Center matchData是MAX 64kb,我想知道如何在x*x大小时找出图像可以占用多少空间.我已经测试了几个图标/图像,它们的文件大小非常不同.两个图像,都是128x128像素,一个是13kb,另一个是34kb.我认为他们有不同的"分辨率"或其他东西(每英寸像素数?)以及我猜测某些颜色比其他颜色"更大",但我想知道如何找出我必须有多大的预期文件是(总是假设最坏的,对吧?).我已经制作了裁剪工具,因此图像总是128x128,有没有办法知道128x128图像有多大(以字节为单位)?如果他们有一百万的"分辨率",我怎么能以编程方式减少它?(注意我完全不知道这个"分辨率"到底是什么)
白色的RGB代码为255,255,255,其中255实际上是整个字节,这意味着128x128像素(16,384像素)的完全白色图像每个白色像素使用三个字节(R,G,B)(总数= 49) ,2KB)?我显然猜不到,因为完全黑色的图像总大小为0b.什么是这个"决议"通常是72,这是什么意思?UIImageJPEGRepresentation(image, 1.0f);到目前为止,我已经习惯将图像放在NSData中,我尝试过其他值,比如0.1f.
奖金问题:
在这里,我注意到一些奇怪的行为:
//Original image at 128*128px
UIImage *image1 = [player getImage];
//Convert image to NSData with compression quality at 0.1
NSData *imageData1 = UIImageJPEGRepresentation(image1, 0.1f);
//Print out the file size of the image:
NSLog(@"Image size after 0.1: %@", [NSByteCountFormatter stringFromByteCount:imageData1.length countStyle:NSByteCountFormatterCountStyleFile]);
//Convert back to UIImage from this NSData
UIImage *image2 = [UIImage imageWithData:imageData1];
//Convert again, back to NSData, now with compression quality at 1.0 (full?)
NSData *imageData2 = UIImageJPEGRepresentation(image2, 1.0f);
//Print out the file size of this as well:
NSLog(@"Image size after 0.1 THEN 1.0: %@", [NSByteCountFormatter stringFromByteCount:imageData2.length countStyle:NSByteCountFormatterCountStyleFile]);
//Result:
/*
Image size after 0.1: 5 KB
Image size after 0.1 THEN 1.0: 34 KB
*/
Run Code Online (Sandbox Code Playgroud)
如果我将第一次转换更改为1.0而不是0.1,它也会打印出来34 KB.我不是从0.1转换为1.0?它以某种方式返回质量?或者这些只是指针,没有真正发生的事情?我试过显示图像,我看不出两者之间有什么区别,所以要么它不会显示,要么就会有一些时髦的东西.
仅仅因为一个字节不是255并不意味着它没有使用完整的字节.计算机无法理解部分字节(据我所知).32位位图中的黑色像素是4个字节.32位位图中的白色像素是4个字节.32位位图中的透明像素是4个字节.
此外,UIImage 从未对其进行任何压缩.它始终是未压缩的24位或32位位图.图形硬件无法理解JPEG或PNG等普通文件压缩方案.所以你在你的"怪异"代码中做的事情(这实际上是完全正常的行为)是这样的:接受UIImage并压缩它,然后解压缩它,然后再压缩它.在这个尺寸,你不太可能注意到JPEG质量的差异.
目前,在实践中,图像的最高分辨率是每通道1个字节,具有4个通道(红色,蓝色,绿色,alpha).这意味着128x128图像的最大可能尺寸为128x128x4字节或64 Kb.对于JPEG图像,我怀疑它会变得如此之高(图像压缩的目标是避免这种高文件大小,同时仍然保存尽可能多的质量).出现差异的原因与"每英寸像素数"无关,这只与显示硬件和打印机有关.这与某些模式比其他模式更容易压缩的事实有关.例如,一个坚实的红色方块将比你的猫的照片小得多.
72是图像的每英寸点数(DPI)值.这仅适用于打印或以英寸而不是像素显示图像.如果要打印某些内容,请以英寸为单位指定尺寸,而以像素为单位测量图片的尺寸.因此,每英寸最终会得到一定数量的像素.一英寸72像素是显示的标准,而300是(或者至少是我最后一次检查)打印标准.
| 归档时间: |
|
| 查看次数: |
516 次 |
| 最近记录: |