哪种方法调整UIImage的大小更好,为什么?



对于所有的图形专家,我想知道这两种方法中哪一种更适合调整UIImage的大小:

我遇到的第一个很简单也很流行,它是:

-(UIImage *)resizeImage:(UIImage *)image width:(CGFloat)resizedWidth height:(CGFloat)resizedHeight
{
    UIGraphicsBeginImageContext(CGSizeMake(resizedWidth ,resizedHeight));
    [image drawInRect:CGRectMake(0, 0, resizedWidth, resizedHeight)];
    UIImage *result = UIGraphicsGetImageFromCurrentImageContext();    
    UIGraphicsEndImageContext();
    return result;
}

我在这个链接http://iphonesdksnippets.com/post/2009/05/06/Resize-image-and-keep-aspect-ratio.aspx上找到的第二种方法似乎与上面的方法相同,但要复杂得多(我真的不明白其中发生了什么):

-(UIImage *)resizeImage:(UIImage *)image width:(CGFloat)resizedWidth height:(CGFloat)resizedHeight
 {
    CGImageRef imageRef = [image CGImage];
    CGColorSpaceRef colorSpace = CGColorSpaceCreateDeviceRGB();
    CGContextRef bitmap = CGBitmapContextCreate(NULL, resizedWidth, resizedHeight, 8, 4 * resizedWidth, colorSpace, kCGImageAlphaPremultipliedFirst);
    CGContextDrawImage(bitmap, CGRectMake(0, 0, resizedWidth, resizedHeight), imageRef);
    CGImageRef ref = CGBitmapContextCreateImage(bitmap);
    UIImage *result = [UIImage imageWithCGImage:ref];
    CGContextRelease(bitmap);
    CGImageRelease(ref);
    return result;  
}

所以我的问题是,哪一种方式更好,为什么?

第二个是线程安全的

这是一个相当晚的回复,但我还是会继续添加它。

我实际上发现了两种方法之间的一些行为差异,除了标准之外。

在我的一个照片应用程序中,我有一个自定义相机视图,它将任何拍摄的图像发送到自定义图像编辑器。在应用程序中,自定义相机/编辑器视图是横向独占的。但是,本机相机窗口本身不是。

所以,每当照片碰巧在人像模式下拍摄时,最终的结果是扭曲的。这些扭曲很容易通过翻转宽度和高度来处理,每当宽度<高度。>

上述两种方法中的第一种方法(简单的一种)导致图像旋转90度,仍然扭曲。第二个,然而,完美地调整了图像的大小!

我猜这与基于图形上下文的行为有关。第二个方法不使用这个上下文,在我的例子中它完美地工作了。

这是一种高级和低级的方法。

哪个更好?这取决于你的目标。

高层次的方法更可读(对我来说),也许低级的方法是一个纳秒快(没有测试)。

确实有不同的方法可以调整图像的大小。即使你有一个新的宽度和高度的情况下,你可能想要调整图像到一个新的大小和忽略比例,或按比例缩放图像和裁剪到一个新的大小。

有一个项目有一个干净的API: https://github.com/mustangostang/UIImage-Resize。它使用第一种方法:-)

最新更新