将图像缩放以适应特定尺寸并保持纵横比 SwiftUI

8

我知道在使用.frame(height: 100, width: 100)等框架修饰符的情况下,无法在大小为120和430的框架上使用.scaledToFit()修饰符,并期望图像以某种方式保持长宽比并适合100x100的框架。

所以,似乎唯一的解决方法是强制用户在使用图像选择器上传时将图像裁剪成正方形。这在SwiftUI中是否可行/我是否漏了什么?

谢谢

2个回答

7
你可以使用 aspectRatio(contentMode:)
Image("imageName")
    .resizable()
    .aspectRatio(contentMode: .fit)
    .frame(width: 100, height: 100)

对我来说效果很好,我只是选择了我想要的高度。 - Soferio

3
如果我正确理解了您的问题,您想将非正方形图像(120x430)放入正方形框(100x100)中。为此,您可以按比例缩放图像。图像将被缩放到最大高度或宽度(取决于目标宽度和高度)。
请查看以下文章:https://www.robertpieta.com/resize-uiimage-no-stretching-swift/ 这是复制粘贴的解决方案:
extension UIImage {
  func scalePreservingAspectRatio(width: Int, height: Int) -> UIImage {
    let widthRatio = CGFloat(width) / size.width
    let heightRatio = CGFloat(height) / size.height
    
    let scaleFactor = min(widthRatio, heightRatio)
    
    let scaledImageSize = CGSize(
      width: size.width * scaleFactor,
      height: size.height * scaleFactor
    )
    
    let format = UIGraphicsImageRendererFormat()
    format.scale = 1
    
    let renderer = UIGraphicsImageRenderer(
      size: scaledImageSize,
      format: format
    )
    
    let scaledImage = renderer.image { _ in
      self.draw(in: CGRect(
        origin: .zero,
        size: scaledImageSize
      ))
    }
    
    return scaledImage
  }
}

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接