9

写真アプリケーションから画像ALAssetsLibraryを取得し、それらをWebサーバーにアップロードするiPadアプリがあります。これまでのところ、すべてが正常に機能しています。

ここで、写真アプリケーションに移動して画像を編集し (トリミングなど)、アップロードすると、トリミングされていない元の画像がアップロードされます。アセット URL を使用して写真にアクセス/保存しています。

元:

createPhoto: 
assetUrl: assets-library://asset/asset.JPG?id=542F09CA-00E1-412E-A7E6-0C222E3F8FFB&ext=JPG, 
UTIs: (
    "public.jpeg"
), 
UTI:public.jpeg

これはALAssetsLibraryキャッシュの問題ではないため、編集、アプリの強制終了、開始、アップロードを試みましたが、それでも古い画像がアップロードされます。

質問:

  1. 写真の編集 (トリミング/赤目/強調) バージョンがあるかどうかを確認するにはどうすればよいですか?
  2. 写真の編集済みバージョンにアクセスするにはどうすればよいですか?
4

2 に答える 2

4

私は同じ動作を認識し、少し前にいくつかのテストを行いました. 私の結果をあなたと共有しましょう:

  1. fullScreenImage メソッドでのみ取得できる編集済みの画像。これは、Apple のドキュメントにも記載されています。

  2. fullResolutionImage および getBytes メソッドは、編集されていない画像を返します。ただし、クロップなどの編集パラメータは画像メタデータに保存されます。ただし、このメタデータ情報は、Aperture や iPhoto などの Apple アプリによってのみ解釈されます。

  3. 画像が編集されたかどうかは、画像のメタデータを調べることで確認できます。未編集の画像と編集済みの画像のメタデータを比較し、メタデータ フィールドの違いを探します。

于 2012-01-08T02:24:29.577 に答える
1
-(UIImage*)fullScreenImage:(ALAsset *)imageAsset{
    ALAssetRepresentation *assetRepresentation = [imageAsset defaultRepresentation];
    CGImageRef fullResImage = [assetRepresentation fullResolutionImage];
    NSString *adjustment = [[assetRepresentation metadata] objectForKey:@"AdjustmentXMP"];
    if (adjustment) {
        NSData *xmpData = [adjustment dataUsingEncoding:NSUTF8StringEncoding];
        CIImage *image = [CIImage imageWithCGImage:fullResImage];

        NSError *error = nil;
        NSArray *filterArray = [CIFilter filterArrayFromSerializedXMP:xmpData
                                                     inputImageExtent:image.extent
                                                                error:&error];
        CIContext *context = [CIContext contextWithOptions:nil];
        if (filterArray && !error) {
            for (CIFilter *filter in filterArray) {
                [filter setValue:image forKey:kCIInputImageKey];
                image = [filter outputImage];
            }
            fullResImage = [context createCGImage:image fromRect:[image extent]];
        }
    }
    UIImage *result = [UIImage imageWithCGImage:fullResImage
                                          scale:[assetRepresentation scale]
                                    orientation:(UIImageOrientation)[assetRepresentation orientation]];
    return result;
}

上記の関数では、ALAsset 値を渡し、編集した画像を取得します ...:)

メタデータから編集された画像を取得するための上記のコード

フルスクリーン画像を使用すると、編集された画像も取得されます

ALAssetRepresentation *representation = [asset defaultRepresentation];
 CGImageRef iref = [representation fullScreenImage];
 UIImage *editedImage = [UIImage imageWithCGImage:iref];
于 2015-01-30T08:53:19.527 に答える