簡體   English   中英

iOS UIImage轉換為固定內存大小

[英]iOS UIImage convert to fixed memory size

在我的iOS應用中,我必須處理一些大圖像,特別是大小可能在1MB到30MB之間。

現在,我必須以最小的質量損失將大圖像轉換為大約400KB(380〜400)。

我們有一些解決方案可以將其轉換為特定尺寸(CGSize),但是我不知道如何將圖像轉換為磁盤上的其他尺寸...

最簡單的方法是使用JPEG圖像格式,因為將圖像轉換為數據時,可以指定簡單的壓縮質量值。 這是使用UIImageJPEGRepresentation完成的。

另一部分是,在操作完成之前,您不知道大小。 因此,您需要測試結果並決定要做什么。

顯然,您可以優化並檢查原始圖像是否已經足夠小。 如果不是,則可以運行二進制搜索以找到適當的壓縮質量設置。

二進制搜索意味着始終將當前狀態和目標狀態之間的距離減半。 因此,壓縮質量在0到1之間,這意味着您從0.5的壓縮質量開始,然后查看結果是什么。 如果圖像仍然太大,則丟棄數據,然后以0.25(0.5-(0.5 / 2))的壓縮質量重試。 如果圖像太小,請丟棄數據,然后以0.75(0.5 +(0.5 / 2))的壓縮質量重試。

繼續這樣做,直到圖像尺寸在可接受的范圍內。

+ (UIImage *)scaleImage:(UIImage *)image toSize:(CGSize)newsizeimage
{

    CGSize actualSize = image.size;

float scale = actualSize.width/actualSize.height;

if (scale < 1) {
    newsizeimage.height = newsizeimage.width/scale;
} 
else {
    newsizeimage.width = newsizeimage.height*scale;
}

UIGraphicsBeginImageContext(newsizeimage);
[image drawInRect:CGRectMake(0, 0, newsizeimage.width, newsizeimage.height)];
UIImage* mynewImage = UIGraphicsGetImageFromCurrentImageContext();
UIGraphicsEndImageContext();

return mynewImage;

}

更新

縮小圖像尺寸:

第1步:

jpeg格式保存圖像,以減小圖像尺寸,如下所示:

 NSData *imageData = UIImageJPEGRepresentation(your UIImage to save, 0.5);


[imageData writeToFile:path of doc_dir with image name atomically:YES];

第2步

為了降低圖像的質量和尺寸,請使用以下方法:

CGSize newSize=CGSizeMake(50,50); // you can change resolution as pe your need


  UIGraphicsBeginImageContext(newSize);
[image drawInRect:CGRectMake(0, 0, newSize.width, newSize.height)];


UIImage* newImage = UIGraphicsGetImageFromCurrentImageContext();

UIGraphicsEndImageContext();

暫無
暫無

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

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