iOS图片调整大小

时间:2018-03-12 02:41:18

标签: ios uiimage

我想在iPhone 6 plus上将(900 * 900)图片压缩为(600 * 600)。

如果我使用:

UIGraphicsBeginImageContextWithOptions(CGSizeMake(600, 600), NO, 0)

生成的UIImage变为(1800 * 1800)。

如果我使用:

UIGraphicsBeginImageContextWithOptions(CGSizeMake(200, 200), NO, 0)

UIGraphicsBeginImageContextWithOptions(CGSizeMake(600, 600), NO, 1)

生成的图像会模糊,这显然是错误的。

有解决这个问题的好方法吗?

这是代码

- (UIImage*)imageByScalingForSize:(CGSize)targetSize withSourceImage:(UIImage *)sourceImage
{
    UIImage *newImage = nil;
    //Omit scaledWidth/scaledHeight calculation
    CGFloat scaledWidth = targetSize.width;
    CGFloat scaledHeight = targetSize.height;
        //UIGraphicsBeginImageContext(targetSize);
    UIGraphicsBeginImageContextWithOptions(targetSize, NO, 0);
    CGRect thumbnailRect = CGRectZero;
    thumbnailRect.origin = CGPointMake(0, 0);
    thumbnailRect.size.width= scaledWidth;
    thumbnailRect.size.height = scaledHeight;
    [sourceImage drawInRect:thumbnailRect];
    newImage = UIGraphicsGetImageFromCurrentImageContext();
    UIGraphicsEndImageContext();
    return newImage;
}

2 个答案:

答案 0 :(得分:0)

试试这个lib!

的UIImage + Zoom.h

bottom:false

的UIImage + Zoom.m

#import <UIKit/UIKit.h>

enum {
    enSvResizeScale,            // image scaled to fill
    enSvResizeAspectFit,        // image scaled to fit with fixed aspect. remainder is transparent
    enSvResizeAspectFill,       // image scaled to fill with fixed aspect. some portion of content may be cliped
};
typedef NSInteger SvResizeMode;

@interface UIImage (Zoom)

- (UIImage*)resizeImageToSize:(CGSize)newSize resizeMode:(SvResizeMode)resizeMode;

@end

答案 1 :(得分:0)

  

如果我使用:

UIGraphicsBeginImageContextWithOptions(CGSizeMake(600, 600), NO, 0)
     

生成的UIImage变为(1800 * 1800)。

这不太正确。确实,图像底层的位图是1800乘1800,但这并不是图像中唯一重要的东西; UIImage也有一个比例,比例为3.因此,UIImage实际上被处理(相对于屏幕几何)为600乘600,再加上它是三分辨率,以匹配Plus屏幕的三重分辨率 - 这正是你想要的。

(当然,如果您还使用原始图像的三分辨率版本开始,缩放效果最佳。但这是另一回事。)