13

ALAsset を使用してプルされた画像のトリミングされたバージョンを取得しようとしています。具体的には、ユーザーのフォト ライブラリからアイテムを選択してアップロードしています。問題は、ライブラリのサムネイル ビューで、iOS がトリミングされたバージョンを表示していることです。そのサムネイルを選択し、ALAsset を使用してその画像のアセットを取得すると、フル解像度のバージョンが得られます。私はいくつかの調査を行いましたが、トリミングが行われる場所の 2 番目の座標系を取得するのに役立つものは見つかりませんでした。

テストするには、ライブラリ内の画像を編集する iOS5 が必要です。画像ライブラリで画像を選択し、[編集] を選択して、画像をトリミングします。ALAsset を取得するとフル イメージが取得され、iPhoto を使用して同期すると、iPhoto もフル イメージを取得します。また、画像を再編集してトリミングを元に戻すこともできます。

これは私が画像を取得する方法です:

UIImage *tmpImage = [UIImage imageWithCGImage:[[asset defaultRepresentation] fullResolutionImage]];

明らかに、フル解像度の画像が得られます。フル解像度の画像を画面のサイズにスケーリングする fullScreenImage フラグがあります。それは私が望むものではありません。

ALAssetRepresenation クラスにはスケール フィールドがありますが、これは float 値であり、これも望ましくありません。

このトリミングされた座標系がどこにあるのか誰か教えていただければ幸いです。

4

2 に答える 2

28

オプション:

オプション 1 (ALAssetLibrary)

- (CGImageRef)fullScreenImageの方法を使用しAlAssetRepresentationます。

長所:

  • 面倒な作業はすべて自動的に行われ、写真アプリと同じように見える画像が得られます。これには、トリミングやその他の変更が含まれます。簡単。

短所:

  • 解像度は「画面サイズ」であり、使用しているデバイスと同じ大きさであり、トリミングされた画像の最大解像度ではありません。これが気にならないのであれば、これは完璧なオプションです。

オプション 2 (ALAssetLibrary)

AdjustmentXMP画像のメタデータ (@tom が参照しているもの) のキーを使用してトリミング データを抽出します。作物を適用します。

利点:

  • 可能な限り最高の解像度でトリミングされた画像を取得することが可能です

短所

  • クロッピング編集のみが取得され、その他の調整 (赤目など) は取得されません。
  • Apple が将来「編集」モードで何をサポートするかは誰にもわかりませんが、将来さらに編集を適用する必要があるかもしれません。
  • 複雑です。最初に XML データを解析してトリミング用の四角形を読み取り、回転していない画像をトリミングしてから、回転を適用する必要があります。

オプション 3 (希望的観測)

fullResolutionEditedImageすべての編集が適用された最高品質の写真を提供するような方法を含めるように Apple に依頼してください。

長所:

  • すべてが魔法のように解決されました。

短所:

  • Apple がこのメソッドを追加することはありません。

オプション 4 (UIImagePickerController)

このオプションは、画像ピッカーを使用している場合にのみ適用されます。アセット ライブラリで直接使用することはできません。

によって返される NSDictionary で-(void)imagePickerController:(UIImagePickerController *)picker didFinishPickingMediaWithInfo:(NSDictionary *)info

キーからフルサイズの調整済み画像を抽出できUIImagePickerControllerOriginalImageます。この画像をどこかに保存してください。次に、アセット ライブラリから画像を取得する代わりに、作成したコピーを読み込みます。

長所:

  • 調整を加えたフルサイズの画像が得られます
  • これは、トリミングだけでなく、すべての調整 (赤目など)を含むフルサイズの画像を取得するために Apple が提供する唯一のオプションです。これは、イメージを大幅に変更できるフィルターが導入された iOS 7 で特に重要です。

短所:

  • 画像ピッカーでのみ使用できます ( ではありませんALAssetRepresentation)
  • 画像のフルサイズのコピーを保持する必要があります。このような画像の数によっては、アプリによるディスク使用量が大幅に増加する可能性があります。

iOS 7 の更新:オプション 4またはオプション 1を検討することをお勧めします。これは、iOS 7 がフィルターなどの多くの操作をサポートするようになったためです。ユーザーは、それらが欠落していることにおそらく気付くでしょう。これら 2 つのオプションはフィルター (およびその他の編集) をサポートし、オプション 4 を使用すると、より解像度の高い結果が得られます。

于 2012-10-15T11:09:13.767 に答える
19

写真が iOS フォト アプリでトリミングされている場合、トリミング座標は ALAssetRepresentation のメタデータ ディクショナリで見つけることができます。fullResolutionImage はトリミングされていない写真を提供します。トリミングは自分で行う必要があります。

AdjustmentXMP メタデータには、クロッピング座標だけでなく、自動強調または赤目除去が適用されているかどうかも示されます。

iOS 6.0 の時点で、CIFilter は filterArrayFromSerializedXMP:inputImageExtent:error を提供します。おそらく、ここで ALAssetRepresentation の AdjustmentXMP メタデータを使用し、CIFilter を ALAssetRepresentation の fullResolutionImage に適用して、変更された画像を再作成できます。

iOS フォト アプリでは、JPG 画像と RAW 画像の処理が異なることに注意してください。JPG 画像の場合、XMP メタデータを含む新しい ALAsset がカメラ ロールに保存されます。RAW 画像の場合、ALAssetRepresentation が元の ALAsset に追加されます。この追加の ALAssetRepresentation が変更された画像であり、AdjustmentXMP メタデータがあるかどうかはわかりません。JPG および RAW 画像に加えて、RAW+JPG 画像の動作もテストする必要があります。

于 2012-09-26T18:38:13.070 に答える