完全缩放图像而不会丢失其内容

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了完全缩放图像而不会丢失其内容相关的知识,希望对你有一定的参考价值。

我正在swift中的一个项目,我使用xib文件来加载我的标题图像。截至目前,在我的图像视图中只能部分显示。我怎么能解决这个问题呢。

我想要的是enter image description here

但我得到的是这个。

enter image description here

一旦我将内容情绪设置为方面适合我得到的就是这个。 enter image description here

这是我的故事板enter image description here enter image description here

正如你所看到的那样,屏幕上的“月亮”一直不在图片中。我怎样才能正确地缩放?

答案

您需要使imageView和图像的比例相等,即如果imageView的大小为26:46(高度:宽度),则图像应遵循相同的比率标准13:23或52:92。您需要根据宽度/高度更改UIImageView以匹配图像的比例。无法拉伸图像。

另一答案

请通过在预览应用中查看图像,将宽高比设置为imageView。一旦打开图像集图像宽度与xib中UIImageView的宽度相同,则相应的高度将在预览编辑器中调整。

现在转到您的xib文件并将imageview高度设置为与预览中显示的高度相同,然后设置imageView宽高比。

确保您已在xib中为imageView提供了足够的约束。

这样,图像将根据不同的设备尺寸进行调整。确保图像宽度不小于从xib计算的最大imageView宽度,由于纵横比属性,imageview高度将相应调整。

另一答案

这里要理解的主要一点是它不适用于使用1张图像的所有屏幕。

为什么:Designer为您提供了58高度和375宽度(iphone 8的宽度)的图像。

所以有一个问题如何在iPhone SE和iPhone 8plus上显示这个图像?而你只有1张图片。答案是你不能用1张图像使像素完美。

解决方案:

  1. 询问设计师他是否想要它也看起来像是为所有设备使用1个图像。
  2. 请设计师为您制作3种不同的图像。
  3. 单独的图像和文字。要求1个图像并使其成为scaleFill内容模式并为您自己添加文本标签。

希望能帮助到你。

另一答案

你必须使用scaleToFill它会有所帮助

AspectFill缩放内容以完全填充视图,保持纵横比和ScaleToFill拉伸视图以填充可用空间而不保持纵横比

所以,这可以拉伸你的图像,但它会工作

另一答案

尝试使用下面的行调整图像大小

[[UIImage imageNamed:@"YOURIMAGE"] resizableImageWithCapInsets:UIEdgeInsetsMake(0, 0, 0, 0)]

UIEdgeInsetsMake左上角的右下角必须正确。

另一答案

如果您只想在不保持纵横比的情况下拟合给定图像,那么只需使用即可

imageView.contentMode = .scaleToFill

但如果要保持纵横比,则需要调整图像大小以适合imageView。您可以使用以下功能并传递imageView大小并应用返回的图像。阅读更多关于它here

extension UIImageView {

  func imageScaledToFit(_ size: CGSize) -> UIImage {
    let imageAspectRatio = self.size.width / self.size.height
    let canvasAspectRatio = size.width / size.height
    var resizeFactor: CGFloat

    if imageAspectRatio > canvasAspectRatio {        
       resizeFactor = size.width / self.size.width
    } else {
       resizeFactor = size.height / self.size.height
    }

    let scaledSize = CGSize(width: self.size.width * resizeFactor, height: self.size.height * resizeFactor)
    let origin = CGPoint(x: (size.width - scaledSize.width) / 2.0, y: (size.height - scaledSize.height) / 2.0)

    UIGraphicsBeginImageContextWithOptions(size, false, 0.0)
    draw(in: CGRect(origin: origin, size: scaledSize))

    let scaledImage = UIGraphicsGetImageFromCurrentImageContext()!
    UIGraphicsEndImageContext()

    return scaledImage 
  }
}

现在你可以像使用它一样

imageView.contentMode = .scaleAspectFit
imageView.image = image.imageScaledToFit(imageView.bounds.size) 

以上是关于完全缩放图像而不会丢失其内容的主要内容,如果未能解决你的问题,请参考以下文章

在通知单击时启动片段而不会丢失状态

音频处理Melodyne 网络缩放功能 ( 音符分离线 | 片段分离线 | 窗口滚动条 | 网格缩放 | 修改图像显示位置 | 显示五线谱 )

在响应框中制作响应图像而不会导致页面速度出现可见内容问题

切换到片段选项卡主机中的选项卡时查看寻呼机丢失其内容

在 asp.net 中调整图像大小而不会丢失图像质量

在不丢失纵横比的情况下将图像放入特定大小的盒子中?