[英]How to Save Image to Application Folder from UIImagePickerController?
[英]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.