6

UIImagePickerControllerユーザーが画像ライブラリから画像を選択できるようにし、didFinishPickingMediaWithInfoメソッドを介してその結果を取得しています。

結果の画像をディスク(アプリのドキュメントフォルダー)に保存し、後で再読み込みできるようにする必要があります。

問題は、PNGまたはJPEGのどちらとして保存するかがわからないことです。大きい写真の場合は非常に遅いため、常にPNGとして保存できるわけではありません(言うまでもなく、画像の向きを個別に保存する必要があります)。常にJPEGとして保存できるとは限りません。画像に透明度がある場合があり、そうすると画像が失われることがあります。

画像ピッカーから返される情報ディクショナリのキーを調べましたがUIImagePickerControllerMediaType、PNGとJPEGのどちらを選択したかに関係なく、返されるのはです"image.public"

それで...

ユーザーがPNGを選択したかどうかを知る方法はありますか?たぶん、画像に透明度などがあるかどうかを確認する方法はありますか?

ありがとう。

4

2 に答える 2

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として保存されます。

誰かがもっと良い方法を持っているなら、私はそれらを聞いてみたいです。ありがとう!

于 2012-06-30T02:59:58.233 に答える
2

辞書のキーUIImagePickerControllerReferenceURLは、タイプに関する情報を提供します

(gdb)po info

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

この場合、ext=JPGで示されるjpgです。

于 2012-07-16T14:31:20.167 に答える