2012-01-07 20 views
9

Tôi có một ứng dụng iPad chụp ảnh từ ứng dụng Ảnh bằng cách sử dụng ALAssetsLibrary và sau đó tải chúng lên máy chủ web. Cho đến nay mọi thứ đều hoạt động tốt.Truy cập hình ảnh đã cắt hoặc chỉnh sửa bằng ALAssetsLibrary

Bây giờ nếu tôi truy cập ứng dụng ảnh và chỉnh sửa hình ảnh (nói cắt) và tải lên, bản gốc chưa cắt sẽ được tải lên. Tôi đang truy cập/lưu ảnh bằng url nội dung.

Ex:

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

Đây không phải là một vấn đề ALAssetsLibrary bộ nhớ cache bởi vì, tôi đã cố gắng chỉnh sửa, giết ứng dụng, bắt đầu, tải lên mà vẫn tải lên hình ảnh cũ.

Câu hỏi:

  1. Làm thế nào để tôi biết nếu một chỉnh sửa (cắt/đỏ mắt/nâng cao) phiên bản của bức ảnh có sẵn?
  2. Làm cách nào để truy cập vào phiên bản đã chỉnh sửa của ảnh?

Trả lời

4

Tôi đã nhận ra hành vi tương tự và đã thực hiện một số thử nghiệm trước đây. Hãy để tôi chia sẻ kết quả của tôi với bạn:

  1. Hình ảnh đã chỉnh sửa bạn chỉ nhận được thông qua phương thức fullScreenImage. Điều này cũng được đề cập trong tài liệu của Apple: "Trong iOS 5 trở lên, phương thức này trả lại hình ảnh đã được cắt, xoay và điều chỉnh chính xác như người dùng sẽ thấy trong Ảnh hoặc trong bộ chọn hình ảnh".

  2. Phương thức fullResolutionImage và getBytes trả về hình ảnh chưa chỉnh sửa. Tuy nhiên, các thông số chỉnh sửa như crop được lưu trong siêu dữ liệu hình ảnh. Tuy nhiên, thông tin siêu dữ liệu này chỉ được các ứng dụng của Apple giải thích như Aperture và iPhoto.

  3. Bạn có thể tìm hiểu, nếu một hình ảnh đã được chỉnh sửa, bằng cách kiểm tra siêu dữ liệu hình ảnh của anh ấy. So sánh siêu dữ liệu của hình ảnh chưa chỉnh sửa và chỉnh sửa và tìm sự khác biệt trong trường siêu dữ liệu.

+0

Tôi in chiều rộng và chiều cao của CGImageRef ' fullResolutionImage: 3968 X 2232 fullScreenImage: 841 X 1024 ' Thật không may fullScreenImage nhỏ hơn nhiều so với hình ảnh toàn màn hình. Tôi cần hình ảnh đã chỉnh sửa đầy đủ để tải lên. Có cách nào khác để truy cập hình ảnh có độ phân giải đầy đủ đã chỉnh sửa hay không. – mithuntnt

+2

Không có API nào cho ứng dụng của bên thứ ba thực hiện điều đó không may. – holtmann

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; 
} 

Trong chức năng trên vượt qua giá trị ALAsset sau đó bạn hình ảnh thay đổi nội dung ... :)

Trên mã cho nhận hình ảnh thay đổi nội dung từ dữ liệu Meta

Nếu u đi với hình ảnh toàn màn hình, bạn cũng sẽ nhận được hình ảnh đã chỉnh sửa

ALAssetRepresentation *representation = [asset defaultRepresentation]; 
CGImageRef iref = [representation fullScreenImage]; 
UIImage *editedImage = [UIImage imageWithCGImage:iref]; 
Các vấn đề liên quan