将 UIImages 高度缩放到 UIImageView 高度

Posted

技术标签:

【中文标题】将 UIImages 高度缩放到 UIImageView 高度【英文标题】:Scale UIImages height to UIImageView height 【发布时间】:2013-08-13 17:41:35 【问题描述】:

我正在创建一个 ios 应用程序,其中的图像比我的 UIImageView 大。我想缩放这些图像,使图像高度与图像视图高度相同。图像不会被剪裁在两侧,而只会被剪裁在一侧。如何缩放 UIImages? UIViewContentModeScaleAspectFit 适合最长端,因此整个图像都在屏幕上,但我希望它适合高度而不是最长端。

【问题讨论】:

你在storyboard中插入了UIImageView吗? 它是 100% 以编程方式创建的,是的,我确实看到了图像,但它非常大。 你是什么意思,你“希望它适合高度而不是最长端”?不管你想让高度完全填满整个屏幕,但如果它在宽度上被截断也没关系? @WendiKidd 是的,我希望它始终填满高度,但如果宽度被切断也可以 【参考方案1】:

试试这个代码,

        //find out the width and height ratio of your image.
        double ratio = [UIImage imageNamed:@"Your_image.png"].size.width / [UIImage imageNamed:@"Your_image.png"].size.height;

        //determine the calculate width according the height. here height is set as 568.
        double calculatedWidth = ratio * 568;

        float xPosition = 0.0;
        //if calculated width is greater than the screen width than we need to change the starting position which was set to 0 initially.
        if (calculatedWidth > [UIScreen mainScreen].bounds.size.width)
        
            xPosition = (calculatedWidth - [UIScreen mainScreen].bounds.size.width) * - 1;
        

       //initiate your image view here.
        UIImageView *yourImageView = [[UIImageView alloc] initWithFrame:CGRectMake(xPosition, 0, calculatedWidth, 568)];
        yourImageView.image = [UIImage imageNamed:@"Your_image.png"];
        [self.view addSubview:yourImageView];

【讨论】:

我让它适合屏幕,但我希望它适合高度而不是较长的一端。 你能解释更多吗?比如你的图像分辨率是多少,你的图像视图的框架是什么。而你真正想要的。 UIViewContentModeScaleAspectFit 将始终保持分辨率并相应地适合视图。 设备:iphone5 图像:3000 像素 x 2000 像素图像视图:640 像素 x 1136 像素。我希望 2000px 缩放到 1136,然后 3000 会比屏幕大。 然后使用 contentMode UIViewContentModeScaleAspectFill【参考方案2】:

如果您只想使高度完全适合图像视图,则需要进行一些数学运算以找出合适的宽度比。试试这个:

float maxHeight = 480.0f;   //this is the height of your container view.
float origHeight = imageView.frame.size.height;
float origWidth = imageView.frame.size.width;

//at this point we can create a proportion. 
//origHeight / origWidth = maxHeight / X (where X = the new width)
//divide the expression by maxHeight and you can solve for the new width: 
float newWidth = (origHeight / origWidth) / maxHeight;

此时您已经有了制作图像所需的尺寸;您总是希望高度与 maxHeight 相同,并且您已经完成了数学运算以找出当 height = maxHeight 时与原始图像尺寸成比例的新宽度。

查看this answer here on ***,了解如何调整 UIImageViews 的大小。将该高度和宽度传递给该答案中的函数。一切都会好起来的!

【讨论】:

【参考方案3】:

您可以通过以下方式获得您想要的东西:

// Set image view to clip to bounds
self.imageView.clipToBounds = YES;
// Calculate aspect ratio of image
CGFloat ar1 = self.imageView.image.size.width / self.imageView.image.size.height;
// Calculate aspect ratio of image view
CGFloat ar2 = self.imageView.frame.size.width / self.imageView.frame.size.height;
// Set fill mode accordingly
if (ar1 > ar2) 
  self.imageView.contentMode = UIViewContentModeScaleAspectFill;
 else 
  self.imageView.contentMode = UIViewContentModeScaleAspectFit;

【讨论】:

以上是关于将 UIImages 高度缩放到 UIImageView 高度的主要内容,如果未能解决你的问题,请参考以下文章

如何将 UIImages 数组添加到集合视图

如何将数组复制到 UIImages 到另一个数组中?

如何使 ReactPlayer 随高度和宽度缩放

Android ImageView 将较小的图像缩放到具有灵活高度的宽度,而不会裁剪或扭曲

BitmapUtil缩放bitmap以及将bitmap保存成图片到SD卡中

FFMPEG - 宽度/高度不能被 2 整除(缩放以生成 MBR 输出)