1

我的应用程序处理从相机拍摄的图像。我希望能够将这些图像调整为缩略图大小,以便可以在表格视图的单元格内显示它们。

“动态”调整大小似乎相当慢,所以我计划在用户将它们导入应用程序时调整它们的大小,并将完整大小和缩略图存储在我的业务对象上,使用缩略图来存储表格视图等内容

这是我用于生成缩略图的代码:

#import "ImageUtils.h"

@implementation ImageUtils

+(UIImage*) generateThumbnailFromImage:(UIImage*)theImage
{
    UIImage * thumbnail;
    CGSize destinationSize = CGSizeMake(100,100);

    UIGraphicsBeginImageContext(destinationSize);
    [theImage drawInRect:CGRectMake(0,0,destinationSize.width, destinationSize.height)];
    thumbnail = UIGraphicsGetImageFromCurrentImageContext();
    UIGraphicsEndImageContext();

    return thumbnail;
}

@end

虽然这似乎可以正确调整图像大小,并大大提高了我的表格的响应能力,但图像的缩放比例是关闭的。

以上将创建一个 100 * 100 的 UIImage,如何强制它使用 AspectFit 或 AspectFill 方法?

我的表格单元格上的 UIImageView 是 100 * 100,所以我需要调整图像的大小以适应它,而不会扭曲它。

任何指针都会很棒!

4

2 回答 2

3

我意识到这是一个旧线程,但是如果你偶然发现这个,现在 iOS6 中有一个更简单的方法。在我在 Apple 的文档中找到以下内容之前,我在尝试使用此解决方案时浪费了很多时间。

使用任一:

+ (UIImage *)imageWithCGImage:(CGImageRef)imageRef 
scale:(CGFloat)scale
orientation:(UIImageOrientation)orientation

或者

+ (UIImage *)imageWithCIImage:(CIImage *)ciImage
scale:(CGFloat)scale
orientation:(UIImageOrientation)orientation

如果您想使用它从名为“image”的 UIImage 制作缩略图,可以使用一行代码:

UIImage *thumbnail = [UIImage imageWithCGImage:image.cgImage
scale:someScale
orientation:image.imageOrientation];

我发现大于 1 的数字会缩小图像,小于 1 的数字会扩大图像。它必须使用比例作为基础大小属性的分母。

确保导入必要的框架!

于 2013-04-12T01:48:36.023 回答
0

输入:

imageSize // The image size, for example {1024,768}
maxThumbSize // The max thumbnail size, for example {100,100}

伪代码:

thumbAspectRatio = maxThumbSize.width / maxThumbSize.height
imageAspectRatio = imageSize.width / imageSize.height

if ( imageAspectRatio == thumbAspectRatio )
{
    // The aspect ratio is equal
    // Resize image to maxThumbSize
}
else if ( imageAspectRatio > thumbAspectRatio )
{
    // The image is wider
    // Thumbnail width: maxThumbSize.width
    // Thumbnail height: maxThumbSize.height / imageAspectRatio
} 
else if ( imageAspectRatio < thumbAspectRatio )
{
    // The image is taller
    // Thumbnail width: maxThumbSize.width * imageAspectRatio
    // Thumbnail height: maxThumbSize.height
} 
于 2012-06-20T09:32:31.013 回答