【问题标题】:How to resize an UIImage based on device size and scale?如何根据设备大小和比例调整 UIImage 的大小?
【发布时间】:2015-06-20 23:06:42
【问题描述】:

我有一个尺寸为 (1008, 669) 的 UIImage 我如何根据我的设备尺寸调整它的大小(例如,如果我在 iPhone4s 中查看它,它的宽度将为 640 x 960 ((320 *retina_scale) x (480 *retina_scale))。我正在使用下面的方法,但我的图像只是在UIImageView 中拉伸。如何处理这个?如何使它动态,以便它适用于所有类型的图像?

- (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;
}

【问题讨论】:

    标签: ios resize uiimage scale crop


    【解决方案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;
    }
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2012-01-28
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2019-08-18
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多