私が作っているブログアプリケーションがあります。新しいエントリを作成するには、ユーザーが写真を選択してテキストを入力できる「エントリの作成」ビューがあります。写真の場合、UIImageView プレースホルダーがあり、これをクリックすると、ユーザーが最大 3 枚の写真を選択できるカスタム ImagePicker が表示されます。
ここで問題が発生します。ALAsset からのフル解像度の写真は必要ありませんが、同時にサムネイルの解像度が低すぎて使用できません。
この時点で行っているのは、fullResolution の写真のサイズを小さいサイズに変更することです。ただし、特に 3 枚までの写真を小さいサイズにリサイズする場合は、時間がかかります。
これは、私が何をしているのかを示すために切り取られたコードです。
ALAssetRepresentation *rep = [[dict objectForKey:@"assetObject"] defaultRepresentation];
CGImageRef iref = [rep fullResolutionImage];
if (iref)
{
CGRect screenBounds = [[UIScreen mainScreen] bounds];
UIImage *previewImage;
UIImage *largeImage;
if([rep orientation] == ALAssetOrientationUp) //landscape image
{
largeImage = [[UIImage imageWithCGImage:iref] scaledToWidth:screenBounds.size.width];
previewImage = [[UIImage imageWithCGImage:iref] scaledToWidth:300];
}
else // portrait image
{
previewImage = [[[UIImage imageWithCGImage:iref] scaledToHeight:300] imageRotatedByDegrees:90];
largeImage = [[[UIImage imageWithCGImage:iref] scaledToHeight:screenBounds.size.height] imageRotatedByDegrees:90];
}
}
ここでは、フル解像度の画像から 2 つの画像を作成しています。プレビュー画像 (長辺で最大 300 ピクセル) と大きな画像 (長辺で最大 960 ピクセルまたは 640 ピクセル) です。プレビュー画像は、「新しいエントリ」プレビューでアプリ自体に表示されるものです。大きな画像は、サーバーにアップロードするときに使用されるものです。
サイズ変更に使用している実際のコードは、次の場所から取得しました。
-(UIImage*)scaledToWidth:(float)i_width
{
float oldWidth = self.size.width;
float scaleFactor = i_width / oldWidth;
float newHeight = self.size.height * scaleFactor;
float newWidth = oldWidth * scaleFactor;
UIGraphicsBeginImageContext(CGSizeMake(newWidth, newHeight));
[self drawInRect:CGRectMake(0, 0, newWidth, newHeight)];
UIImage *newImage = UIGraphicsGetImageFromCurrentImageContext();
UIGraphicsEndImageContext();
return newImage;
}
私はここで間違ったことをしていますか?現状では、ALAsset のサムネイルは明瞭度が低すぎます。同時に、完全な解像度は必要ありません。現在はすべて機能していますが、サイズ変更には時間がかかります。これは単に必要な結果ですか?
ありがとう!