调整UIImage的大小并添加空白区域

3
我已经搜索了一下,但似乎找不到解决方案。这是我的问题:我需要将UIImage调整为特定尺寸,即宽度和高度都是2的幂次方的尺寸。我的图片来自相机,因此其尺寸不是2的幂次方。我需要保持整个图像,并保持正确的长宽比(即“适应模式”)。我知道如何调整UIImage大小,但我无法弄清楚如何调整图像并适当地在顶部和底部添加空白,以保持正确的整体图像大小,同时保留正确的长宽比。有人对此有见解吗?
顺便说一下,这是我的当前调整大小代码(仅调整大小)。
- (UIImage *) resizeImage:(UIImage *)initialImage
{
    CGSize newSize = CGSizeMake(256, 256);
    UIGraphicsBeginImageContextWithOptions(newSize, NO, 0.0);
    [initialImage drawInRect:CGRectMake(0, 0, newSize.width, newSize.height)];
    UIImage *newImage = UIGraphicsGetImageFromCurrentImageContext();    
    UIGraphicsEndImageContext();
    return newImage;
}

我尝试使用这篇博客,但是当我指定内容模式为UIViewContentModeScaleAspectFit时,它并不能给我正确的图像大小。

2个回答

3
一个简单的方法是将您的图像放入UIImageView中,使用留白和白色背景颜色设置所需的大小,然后设置UIViewContentModeScaleAspectFit模式,最后将其转换为UIImage。
UIImageView *imageView = [[UIImageView alloc] initWithFrame:yourFrame];
imageView.image = yourImage;
imageView.contentMode = UIViewContentModeScaleAspectFit ;
imageView.backgroundColor = [UIColor whiteColor];

UIGraphicsBeginImageContextWithOptions(imageView.bounds.size, imageView.opaque, 0.0);
[imageView.layer renderInContext:UIGraphicsGetCurrentContext()];
//the image you want
UIImage *image = UIGraphicsGetImageFromCurrentImageContext();
UIGraphicsEndImageContext();

你成了


0

你已经有了一个基本的解决方案。只需更改 [initialImage drawInRect:] 中的 rect 参数即可。解决方案可能如下所示(未经测试!):

CGSize size = initialImage.size;
CGFloat max = (size.width > size.height) ? size.width : size.height;
CGSize newSize = CGSizeMake(size.width * newSize.width / max, size.height * newSize.height / max);
CGRect rect = CGRectMake((newSize.width-newSize.width)/2.0,
                         (newSize.height-newSize.height)/2.0,
                         newSize.width, newSize.height);
[initialImage drawInRect:rect];

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接