2

私の会社では、PHAssets を取得して正しいサイズのメタデータを取得することに大きな問題があります。お客様がライブラリから写真を選択し、それぞれのサイズ (ピクセル単位) を取得し、販売するガジェットに合わせて座標を計算し、高品質の写真をサーバーにアップロードしてガジェットを印刷できるようにする iOS アプリケーションを開発しました。お客様によっては、送信された一部の高品質バージョンの画像のピクセル単位のサイズが、PHAsset オブジェクトによって指定された pixelWidth および pixelHeight と一致しないという問題が発生しています。例を作るために、次の図があります。

  • PHAsset オブジェクトによって 2096x3724 であると報告されています
  • ただし、フルサイズの画像が要求されると、1536x2730 の画像が生成されます

写真は iCloud になく、iOS 10.2 を実行している iPhone 6 SE から送信されています。フルサイズの画像バージョンを取得するコードは次のとおりです。

PHImageRequestOptions *imgOpts = [[PHImageRequestOptions alloc] init];
imgOpts.deliveryMode = PHImageRequestOptionsDeliveryModeHighQualityFormat;
imgOpts.networkAccessAllowed = YES;
imgOpts.resizeMode = PHImageRequestOptionsResizeModeExact;
imgOpts.version = PHImageRequestOptionsVersionCurrent;  

PHCachingImageManager *imageManager = [[PHCachingImageManager alloc] init];

[imageManager requestImageForAsset:imageAsset targetSize:PHImageManagerMaximumSize contentMode:PHImageContentModeDefault options:imgOpts resultHandler:^(UIImage *  result, NSDictionary *  info) {
    NSData * imageData = UIImageJPEGRepresentation(result, 0.92f);
    //UPLOAD OF imageData TO SERVER HERE
}]

requestImageDataForAsset メソッドでも試してみましたが、うまくいきませんでした:

PHImageRequestOptions *imgOpts = [[PHImageRequestOptions alloc] init];
imgOpts.deliveryMode = PHImageRequestOptionsDeliveryModeHighQualityFormat;
imgOpts.networkAccessAllowed = YES;
imgOpts.resizeMode = PHImageRequestOptionsResizeModeExact;
imgOpts.version = PHImageRequestOptionsVersionCurrent;  

PHCachingImageManager *imageManager = [[PHCachingImageManager alloc] init];

[imageManager requestImageDataForAsset:imageAsset options:imgOpts resultHandler:^(NSData * imageData, NSString * dataUTI, UIImageOrientation orientation, NSDictionary *  info) {
    //UPLOAD OF imageData TO SERVER HERE
}]

アップロードを行う前に、すべての画像の高解像度バージョンから正確なサイズを取得することは、ライブラリから大量のアセットを選択するときに多くのパフォーマンスを低下させるため、私たちのオプションではありません.

私たちは行方不明ですか、それとも何か間違っていますか? フル解像度の画像をメモリにロードせずにアセット サイズをピクセル単位で取得する方法はありますか? 助けてくれてありがとう

4

2 に答える 2