调整大小时IOS Swift SVG图像质量问题

fcy6dtqo  于 2022-12-17  发布在  Swift
关注(0)|答案(2)|浏览(215)

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))
        }
    }
}
k3bvogb1

k3bvogb11#

我对SwiftUI了解不多,但这里有一个示例,说明单个SVG在UIKit图像视图中以多种大小准确显示:

我所做的只是在资产目录中配置SVG,使其具有单一大小并保留矢量数据:

这和你现在做的完全不同您正在将SVG“绘制”到一个图形环境中,因此您丢弃了矢量数据并替换为位图,这当然不能完美地缩放。

dfty9e19

dfty9e192#

不是假装给予了完整的答案,只是几个想法:
1.请检查此nice tutorial,它解释了在SwiftUI.Image的这种情况下使用.interpolation(.none)的必要性。
1.不要调整UI图像的大小-只调整SwiftUI图像的大小,因为现在你知道了一个非常简单的拒绝插值的方法。
1.如果步骤2不起作用(例如,没有透明度(alpha通道)或其他一些问题),可能您必须使用CoreGraphics对UIImage进行预处理(这肯定不是很好的性能,但可能看起来不错)。
1.在最坏的情况下,必须使用CGContext实现UIImage.resize函数,注意插值质量。
所以,主要的想法是:
1.您尝试了UIGraphicsImageRenderer,但仍然有许多其他选项需要探索,您应该逐一检查它们,以获得一些直觉,了解哪些可行,哪些不可行。
1.调整大小后的图像看起来很模糊,所以主要问题可能是插值(在缩小时混合了相邻像素的Alpha通道),因此您应该拒绝插值。您可以在一切渲染良好后研究如何修复性能问题。

相关问题