我正在制作一个博客应用程序。要撰写新条目,有一个“撰写条目”视图,用户可以在其中选择照片并输入文本。对于照片,有一个 UIImageView 占位符,单击此占位符后,会出现一个自定义 ImagePicker,用户可以在其中选择最多 3 张照片。
这就是问题所在。我不需要来自 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];
}
}
在这里,从全分辨率图像中,我创建了两个图像:一个预览图像(长端最大 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 缩略图的清晰度太低,同时,我不需要整个全分辨率。现在一切正常,但调整大小需要一些时间。这只是一个必然的结果吗?
谢谢!