gpt4 book ai didi

ruby-on-rails - 如何将 Canvas 保存为矢量图像?

转载 作者:行者123 更新时间:2023-12-01 13:52:15 25 4
gpt4 key购买 nike

我正在开发使用 fabricjs javascript 库设计 T 恤的应用程序。 T 恤模板 (png) 相对于 Canvas 绝对定位。因此,当 Canvas 被栅格化为 SVG 时, Canvas 上的对象将被保存。

我目前正在数据库中存储 SVG 数据以供显示。设计 T 恤的过程完成后,需要将其保存为矢量图像,以便在缩放时保持其原始质量。如何做到这一点?

或者系统怎么样this保存高质量图像?

最佳答案

FabricJS 的 canvas.toSVG 是一个非常好的功能,它采用创建 Canvas 内容的绘图命令并将它们转换为完全形成的 svg 元素。

例如,此代码在 Canvas 上创建绿色矩形,然后使用 canvas.toSVG 将其转换为完整的 svg 元素。

canvas.add(new fabric.Rect({
left: 50,
top: 50,
height: 20,
width: 20,
fill: 'green'
}));
console.log(canvas.toSVG());

这是生成的 svg 元素的样子:

<?xml version="1.0" standalone="no" ?><!DOCTYPE svg PUBLIC "-//W3C//DTD SVG 20010904//EN" "http://www.w3.org/TR/2001/REC-SVG-20010904/DTD/svg10.dtd"><svg xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" version="1.1" width="800" height="700" xml:space="preserve"><desc>Created with Fabric.js 0.9.21</desc><rect x="-10" y="-10" rx="0" ry="0" width="20" height="20" style="stroke: none; stroke-width: 1; stroke-dasharray: ; fill: green; opacity: 1;" transform="translate(50 50)" /></svg>    </body>

作为 SVG 元素,它可以由客户缩放而不会损失清晰度。

由于 FabricJS 为您提供了一个完整的 svg 元素,您所要做的就是告诉您的服务器将该 svg 元素包含在提供给客户端的网页的 DOM 中。

它实际上就是这么简单(这个 SVG 矩形缩放时几乎没有清晰度损失)。

<!doctype html>
<html>
<body>
<!-- This is the exact SVG produced by canvas.toSVG and which was saved in your DB -->
<?xml version="1.0" standalone="no" ?><!DOCTYPE svg PUBLIC "-//W3C//DTD SVG 20010904//EN" "http://www.w3.org/TR/2001/REC-SVG-20010904/DTD/svg10.dtd"><svg xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" version="1.1" width="800" height="700" xml:space="preserve"><desc>Created with Fabric.js 0.9.21</desc><rect x="-10" y="-10" rx="0" ry="0" width="20" height="20" style="stroke: none; stroke-width: 1; stroke-dasharray: ; fill: green; opacity: 1;" transform="translate(50 50)" /></svg> </body>
</html>

关于ruby-on-rails - 如何将 Canvas 保存为矢量图像?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/30859426/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com