如何根据设备大小和规模调整UIImage的大小?

时间:2015-04-15 06:00:01

标签: ios resize uiimage scale crop

我有一个大小的UIImage(1008,669)我如何根据我的设备大小调整大小(例如,如果我在iPhone4s中查看它的宽度将是640 x 960(( 320 * retina_scale)x(480 * retina_scale))。我使用下面的方法来做到这一点,但我的图像只是在UIImageView拉伸。如何处理这个?如何使它成为动态的#&# 39; ll工作会有各种各样的图像吗?

- (UIImage *) hResizeImage:(UIImage *)image withTargetSize:(CGSize)targetSize {
    CGSize size = image.size;
    CGFloat widthRatio = targetSize.width / image.size.width;
    CGFloat heightRatio = targetSize.height / image.size.height;

    // Figure out what our orientation is, and use that to form the rectangle
    CGSize newSize;
    if(widthRatio > heightRatio) {
        newSize = CGSizeMake(size.width * heightRatio, size.height * heightRatio);
    } else {
        newSize = CGSizeMake(size.width * widthRatio,  size.height * widthRatio);
    }

    // This is the rect that we've calculated out and this is what is actually used below
    CGRect scaledRect = CGRectMake(0, 0, newSize.width * [UIScreen mainScreen].scale, newSize.height * [UIScreen mainScreen].scale);

    // Actually do the resizing to the rect using the ImageContext stuff
    UIGraphicsBeginImageContextWithOptions(scaledRect.size, false, [UIScreen mainScreen].scale);
    [image drawInRect:scaledRect];
    UIImage *newImage = UIGraphicsGetImageFromCurrentImageContext();
    UIGraphicsEndImageContext();
    return newImage;
}

1 个答案:

答案 0 :(得分:1)

由于在UIGraphicsBeginImageContextWithOptions中指定了比例因子,因此在计算scaledRect时,不需要将宽度和高度乘以屏幕比例。

如果在UIGraphicsBeginImageContextWithOptions中指定值0.0,则比例因子将自动设置为设备主屏幕的比例因子。

- (UIImage *)hResizeImage:(UIImage *)image withTargetSize:(CGSize)targetSize {
    CGSize size = image.size;
    CGFloat widthRatio = targetSize.width / image.size.width;
    CGFloat heightRatio = targetSize.height / image.size.height;

    // Figure out what our orientation is, and use that to form the rectangle
    CGSize newSize;
    if(widthRatio > heightRatio) {
        newSize = CGSizeMake(size.width * heightRatio, size.height * heightRatio);
    } else {
        newSize = CGSizeMake(size.width * widthRatio,  size.height * widthRatio);
    }

    // This is the rect that we've calculated out and this is what is actually used below
    CGRect scaledRect = CGRectMake(0, 0, newSize.width, newSize.height);

    // Actually do the resizing to the rect using the ImageContext stuff
    UIGraphicsBeginImageContextWithOptions(scaledRect.size, false, 0.0f);
    [image drawInRect:scaledRect];
    UIImage *newImage = UIGraphicsGetImageFromCurrentImageContext();
    UIGraphicsEndImageContext();
    return newImage;
}