3

我一直在谷歌搜索,似乎找不到解决方案。这是我的问题。我需要将 UIImage 调整为特定大小 - 即大小,以便宽度和高度都是 2 的幂。我的图像来自相机,因此尺寸不是 2 的幂。我需要保留整个图像,同时保持正确的 aspect-ie aspect fit mode。我知道如何调整 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博客,但是当我为内容模式指定时,它确实给了我正确的图像大小。

4

2 回答 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();

你说对了

于 2012-05-11T15:41:40.107 回答
0

您拥有的解决方案大部分已经存在。只需更改 [initialImage drawInRect:] 的矩形。解决方案看起来像这样(未经测试!):

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];
于 2012-05-11T16:19:29.560 回答