我一直在谷歌搜索,似乎无法找到解决方案。这是我的问题。我需要将UIImage的大小调整为特定大小 - 即大小,以便宽度和高度都是2的幂。我的图像来自相机,所以尺寸不是两个。我需要保留整个图像,同时保持正确的方面 - 即宽高比适合模式。我知道如何调整UIImage的大小,但我无法弄清楚如何调整图像大小并在顶部和底部添加适当的空白以保持正确的整体图像大小,同时保留正确的方面。有没有人对此有所了解?
BTW,这是我目前的调整大小代码(只是调整大小)
- (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;
}
我尝试使用this博客,但是当我为内容模式指定UIViewContentModeScaleAspectFit
时,它确实为我提供了合适的图片尺寸。
答案 0 :(得分:3)
这样做的一种方法是
将您的图像放入UIImageView,使用空白和白色backgournd颜色设置所需的大小,然后设置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();
你明白了
答案 1 :(得分: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];