簡體   English   中英

如何找到給定UIImage-size的最大文件大小?

[英]How can I find out what the largest possible file-size for a given UIImage-size is?

我正在創建回合制游戲,並使用GameCenter進行處理。 在這里的某一點上,我想在matchData中發送小圖片/圖標以進行匹配。 雖然此查詢與Game Center沒有關系,但是由於Game Center matchData的最大值為64kb,因此我想知道如何確定圖像尺寸為x * x時可以占用多少空間。 我已經測試了幾個圖標/圖像,並且它們在文件大小上有很大的不同。 兩張圖片均為128x128像素,一張為13kb,另一張為34kb。 我以為它們具有不同的“分辨率”或其他某種東西(每英寸像素數?),而且我猜有些顏色比其他顏色“更大”,但是我想知道如何找出我必須預期的顏色多大文件(總是假設是最壞的,對吧?)。 我已經制作了一個裁剪工具,因此圖像始終為128x128, 是否有辦法知道128x128圖像的大小(以字節為單位)? 如果他們的“分辨率”達到一百萬,那么我該如何以編程方式降低該分辨率呢?(請注意,我完全不知道“分辨率”到底是什么)

對於具有255,255,255的RGB代碼的白色,其中255實際上是一個完整字節,這意味着128x128像素(16,384像素)的完全白色圖像每個白色像素使用三個字節(R,G,B)(總計= 49) ,2KB)? 我顯然是在猜測NO,因為全黑圖像的總大小為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
*/

如果我將第一次轉換更改為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(或至少是我上次檢查的像素)。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM