12

最新の iOS8 フォト フレームの作業を徹底的に読み、ユーザー ライブラリからいくつかのアセットを取得して表示しようとしています。ユーザーに一度に 4 つの画像を編集させます。しかし、このため、画像を圧縮する必要があります。そうしないと、アプリがクラッシュします。

次のコードを使用して、PHImageManager を使用して画像をロードしています。

func processImages()
    {
        println("Processing")
        _selectediImages = Array()
        _cacheImageComplete = 0
        for asset in _selectedAssets
        {
            var options:PHImageRequestOptions = PHImageRequestOptions()
            options.version = PHImageRequestOptionsVersion.Unadjusted
            options.synchronous = true
            var minRatio:CGFloat = 1
            if(CGFloat(asset.pixelWidth) > UIScreen.mainScreen().bounds.width || CGFloat(asset.pixelHeight) > UIScreen.mainScreen().bounds.height)
            {
               minRatio = min(UIScreen.mainScreen().bounds.width/(CGFloat(asset.pixelWidth)), (UIScreen.mainScreen().bounds.height/CGFloat(asset.pixelHeight)))
            }
            var size:CGSize = CGSizeMake((CGFloat(asset.pixelWidth)*minRatio),(CGFloat(asset.pixelHeight)*minRatio))
            println("Target size is \(size)")
            PHImageManager.defaultManager().requestImageForAsset(asset, targetSize:size, contentMode: .AspectFill, options: options)
                {
                    uiimageResult, info in
                    var image = iImage(uiimage: uiimageResult)
                    println("Result Size Is \(uiimageResult.size)")
            }

        }

    }

ご覧のとおり、画像が少なくとも画面より大きくならないように、目標サイズを計算しています。そうであれば、画像の比率を縮小します。ただし、これは典型的な印刷ログです

ターゲット サイズは (768.0,798.453531598513) 結果サイズは (1614.0,1678.0)

ターゲットサイズを768x798に設定していますが(その特定のケースでは)、結果として得られるUIImageはその2倍以上です。ドキュメントによると、 targetSize パラメータ

「返されるイメージのターゲット サイズ。」

最も明確な説明ではありませんが、私の実験ではこれと一致しません。

何か提案があれば、ぜひ聞きたいです!

4

4 に答える 4

9

これは、requestImageForAssetが 2 回呼び出されるためです。

初めて、(60 * 45) のような非常に同じサイズの画像が返されますが、これはその画像のサムネイルだと思います。

2 回目は、フル サイズの画像が表示されます。

私が使う

if ([[info valueForKey:@"PHImageResultIsDegradedKey"]integerValue]==0){ // Do something with the FULL SIZED image } else { // Do something with the regraded image }

2 つの異なるイメージを区別します。

参考:iOS 8 PhotoKit. iCloud 写真共有アルバムから最大サイズの画像を取得する

于 2015-10-09T20:35:47.300 に答える
6

resizeModePHImageRequestOptionsResizeModeExactと deliveryMode をに設定してみてくださいPHImageRequestOptionsDeliveryModeHighQualityFormat

PHImageRequestOptionsResizeModeExact, 
// same as above but also guarantees the delivered image is exactly targetSize (must be set when a normalizedCropRect is specified)
于 2014-10-31T00:59:20.943 に答える
3

依頼用PHImageManagerMaximumSizeとしてご利用いただけます。targetSizePHImageManager

のドキュメントによるとPHImageManagerMaximumSize元の画像または利用可能な最大のレンダリングされた画像を要求するときに渡すサイズ(resizeModeは無視されます)

于 2016-06-12T06:58:25.127 に答える