私の会社では、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
}]
アップロードを行う前に、すべての画像の高解像度バージョンから正確なサイズを取得することは、ライブラリから大量のアセットを選択するときに多くのパフォーマンスを低下させるため、私たちのオプションではありません.
私たちは行方不明ですか、それとも何か間違っていますか? フル解像度の画像をメモリにロードせずにアセット サイズをピクセル単位で取得する方法はありますか? 助けてくれてありがとう