resized
original
如图所示,当我将SVG图像的大小调整到200X200时,SVG图像的质量正在下降。这不是违反SVG图像的逻辑吗?我认为SVG图像不应该被破坏,无论我将其放大到多大。我能做些什么呢?我可以遵循哪种方法?
我在SwiftUI中调整了SVG图像的大小,如下所示
Image(uiImage: .flame.resize(targetSize: CGSize(width: 200, height: 200)))
我用这段代码来调整图像的大小。这不工作。你可以看到在上面调整大小的图像。我发现这个解决方案在这里。Click
extension UIImage {
func resize(targetSize: CGSize) -> UIImage {
return UIGraphicsImageRenderer(size:targetSize).image { _ in
self.draw(in: CGRect(origin: .zero, size: targetSize))
}
}
}
2条答案
按热度按时间k3bvogb11#
我对SwiftUI了解不多,但这里有一个示例,说明单个SVG在UIKit图像视图中以多种大小准确显示:
我所做的只是在资产目录中配置SVG,使其具有单一大小并保留矢量数据:
这和你现在做的完全不同您正在将SVG“绘制”到一个图形环境中,因此您丢弃了矢量数据并替换为位图,这当然不能完美地缩放。
dfty9e192#
不是假装给予了完整的答案,只是几个想法:
1.请检查此nice tutorial,它解释了在
SwiftUI.Image
的这种情况下使用.interpolation(.none)
的必要性。1.不要调整UI图像的大小-只调整SwiftUI图像的大小,因为现在你知道了一个非常简单的拒绝插值的方法。
1.如果步骤2不起作用(例如,没有透明度(alpha通道)或其他一些问题),可能您必须使用CoreGraphics对
UIImage
进行预处理(这肯定不是很好的性能,但可能看起来不错)。1.在最坏的情况下,必须使用
CGContext
实现UIImage.resize
函数,注意插值质量。所以,主要的想法是:
1.您尝试了
UIGraphicsImageRenderer
,但仍然有许多其他选项需要探索,您应该逐一检查它们,以获得一些直觉,了解哪些可行,哪些不可行。1.调整大小后的图像看起来很模糊,所以主要问题可能是插值(在缩小时混合了相邻像素的Alpha通道),因此您应该拒绝插值。您可以在一切渲染良好后研究如何修复性能问题。