【发布时间】:2020-12-04 09:21:26
【问题描述】:
我使用许多 SVG(所有相同的宽度/高度,位置:绝对)创建了一个头像/角色制作器,按 z-index 排列并使用滑块进行选择。
它运行良好,但我的目标是现在将所选 SVG 的扁平版本保存为 PNG 以保存/导出。我一直在研究画布标签,但请阅读我需要使用多个画布标签作为图层,听起来我会回到原点。
谁能指出我正确的方向?为了清楚起见,我已经发布了我当前代码的 sn-p。
JS 和 SVG 新手,没有使用画布的经验,因此非常感谢任何建议。
<body>
<div class="image eyes" id="eyesImages">
<img src="parts/eyes/01.svg">
<img src="parts/eyes/02.svg">
<img src="parts/eyes/03.svg">
</div>
<div class="image nose" id="noseImages">
<img src="parts/nose/01.svg">
<img src="parts/nose/02.svg">
<img src="parts/nose/03.svg">
</div>
<div class="image mouth" id="mouthImages">
<img src="parts/mouth/01.svg">
<img src="parts/mouth/02.svg">
<img src="parts/mouth/03.svg">
</div>
<div class="sliders">
<div id="slider1">
<label for="slider1">Eyes</label>
<input type="range" min="1" max="50" value="1" class="slider" id="sliderEyes">
</div>
<div id="slider2">
<label for="slider2">Nose</label>
<input type="range" min="1" max="50" value="1" class="slider" id="sliderNose">
</div>
<div id="slider3">
<label for="slider3">Mouth</label>
<input type="range" min="1" max="50" value="1" class="slider" id="sliderMouth">
</div>
</div>
<script type="text/javascript">
window.addEventListener('load', function() {
var slider1 = document.getElementById("sliderEyes");
var images = document.getElementById("eyesImages");
slider1.addEventListener('input', function() {
for (var i = 0; i < images.children.length; i++) {
images.children[i].style.display = 'none';
}
i = Number(this.value) - 1;
images.children[i].style.display = 'block';
});
});
window.addEventListener('load', function() {
var slider2 = document.getElementById("sliderNose");
var images = document.getElementById("noseImages");
slider2.addEventListener('input', function() {
for (var i = 0; i < images.children.length; i++) {
images.children[i].style.display = 'none';
}
i = Number(this.value) - 1;
images.children[i].style.display = 'block';
});
});
window.addEventListener('load', function() {
var slider3 = document.getElementById("sliderMouth");
var images = document.getElementById("mouthImages");
slider3.addEventListener('input', function() {
for (var i = 0; i < images.children.length; i++) {
images.children[i].style.display = 'none';
}
i = Number(this.value) - 1;
images.children[i].style.display = 'block';
});
});
</script>
</body>
谢谢
【问题讨论】:
-
您只需要一张画布。使用
canvas,width和height属性(不是CSS 值)设置其分辨率,并在一个画布上使用2D 上下文drawImage(SVGImage, x, y);从下到上依次绘制SVG 图像。然后,您可以保存为单个 PNG 或 JPG。 developer.mozilla.org/en-US/docs/Web/API/… 上有关 2D 渲染上下文的信息和更多信息
标签: javascript svg canvas