最新の 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 パラメータ
「返されるイメージのターゲット サイズ。」
最も明確な説明ではありませんが、私の実験ではこれと一致しません。
何か提案があれば、ぜひ聞きたいです!