簡體   English   中英

使用UIImagePickerController獲取圖像 - 如何知道是否保存PNG或JPEG?

[英]Using UIImagePickerController to get image — how to know whether to save PNG or JPEG?

我有一個UIImagePickerController讓用戶從圖像庫中選擇一個圖像,並通過didFinishPickingMediaWithInfo方法獲得結果。

我需要能夠將生成的圖像保存到磁盤(在應用程序的文檔文件夾中),並在以后重新加載。

問題是我無法判斷是將其存儲為PNG還是JPEG。 我不能總是將它存儲為PNG,因為對於較大的照片,它的速度很慢(更不用說我必須單獨處理存儲圖像方向)。 我不能總是將它存儲為JPEG,因為在某些情況下,圖像具有透明度,如果我這樣做會丟失。

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

所以...

有沒有辦法知道用戶是否選擇了PNG? 也許只是檢查圖像是否有任何透明度的某種方法?

謝謝。

好的,所以我想通了。 這可能不適用於所有情況,但對我來說已經足夠了:

    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。

如果有人有更好的方法,我很樂意聽到。 謝謝!

在字典中,鍵UIImagePickerControllerReferenceURL將為您提供有關該類型的信息

(gdb)po信息

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

在這種情況下,它是一個jpg,如ext = JPG所示

暫無
暫無

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

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