完全缩放图像而不会丢失其内容
Posted
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了完全缩放图像而不会丢失其内容相关的知识,希望对你有一定的参考价值。
我正在swift中的一个项目,我使用xib文件来加载我的标题图像。截至目前,在我的图像视图中只能部分显示。我怎么能解决这个问题呢。
但我得到的是这个。
正如你所看到的那样,屏幕上的“月亮”一直不在图片中。我怎样才能正确地缩放?
您需要使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个图像。
- 请设计师为您制作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 网络缩放功能 ( 音符分离线 | 片段分离线 | 窗口滚动条 | 网格缩放 | 修改图像显示位置 | 显示五线谱 )