2012-06-29 64 views
6

我有一個UIImagePickerController讓用戶選擇的圖像進行圖像庫,和我通過didFinishPickingMediaWithInfo方法獲取其結果。使用的UIImagePickerController獲得的圖像 - 如何知道是否保存PNG或JPEG?

我需要能夠以保存生成的圖像到磁盤(在應用程序的文件夾),後來又重新裝入。

的問題是,我不能告訴是否將其保存爲PNG或JPEG。我不能總是將它作爲PNG存儲,因爲對於較大的照片來說,它的速度會非常慢(更別說我必須分別存儲圖像的方向)。我不能總是將它作爲JPEG存儲,因爲在某些情況下,圖像具有透明度,如果我這樣做會丟失圖像。

我檢查了圖像選擇器返回的信息字典中的UIImagePickerControllerMediaType鍵,無論我是否選擇了PNG或JPEG,返回的結果是"image.public"

所以......

有一些辦法知道用戶是否選擇了一個PNG?也許有些方法只是檢查圖像是否有任何透明度或其他?

謝謝。

回答

2

關鍵UIImagePickerControllerReferenceURL會給你的類型

(GDB)PO信息

{ 
    UIImagePickerControllerMediaType = "public.image"; 
    UIImagePickerControllerOriginalImage = "<UIImage: 0x5cfd00>"; 
    UIImagePickerControllerReferenceURL = "assets-library://asset/asset.JPG?id=EFC44C3C-9C82-4669-924B-A2B9DE6F1F45&ext=JPG"; 
} 

在這種情況下,如圖EXT一個jpg = JPG

+0

我的信息最終以上面詳述的解決方案進行,但是這是非常好的信息,並且會讓我的任務變得更直接。謝謝! – DanM

6

OK,所以我想它了。這可能不適合所有情況的工作,但它足以讓我:

CGImageAlphaInfo imgAlpha = CGImageGetAlphaInfo(theImage.CGImage); 

    // Is this an image with transparency (i.e. do we need to save as PNG?) 
    if ((imgAlpha == kCGImageAlphaNone) || (imgAlpha == kCGImageAlphaNoneSkipFirst) || (imgAlpha == kCGImageAlphaNoneSkipLast)) { 
     // save as a JPEG 
    } else { 
     // save as a PNG 
    } 

...當然你需要記住哪種類型的保存圖像的,給予適當的文件擴展名,並調用合適的一回在...但基本上這需要照顧它。具有透明度的圖像將保存爲PNG,其他所有內容均爲JPEG。

如果任何人有任何更好的方法,我很願意聽到他們的聲音。謝謝!

在字典
相關問題