微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

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

如何解决缩放图像以适应特定尺寸并保持纵横比 SwiftUI

我知道不可能在帧为 120 和 430 的图像上使用 .scaledToFit() 修饰符,使用像 .frame(height: 100,width: 100) 这样的帧修饰符,并期望图像以某种方式保持纵横比和适合宽100高100的框架。

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

谢谢

解决方法

如果我正确理解您的问题,您想将非方形图像 (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
  }
}
,

您可以使用aspectRatio(contentMode:)

Image("imageName")
    .resizable()
    .aspectRatio(contentMode: .fit)
    .frame(height: 100,width: 100)

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。