feat: add png download button
This commit is contained in:
parent
79b9261b51
commit
5c517696a4
1 changed files with 57 additions and 11 deletions
48
index.html
48
index.html
|
@ -12,7 +12,10 @@
|
|||
</style>
|
||||
</head>
|
||||
<body>
|
||||
<h1>Antifa-Sticker-Generator</h1>
|
||||
<h1>Antifa Sticker Generator</h1>
|
||||
<p>
|
||||
A purely client-side sticker generator. <a href="https://git.kabelsalat.ch/s3lph/antifa-sticker-generator">Source Code.</a>
|
||||
</p>
|
||||
<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 500 500" width="500" height="500" id="svg">
|
||||
<style>
|
||||
text {
|
||||
|
@ -42,6 +45,7 @@
|
|||
<path id="upper" stroke="red" fill="none" d="M 40 250 A 210 210 0 0 1 460 250" />
|
||||
<path id="lower" stroke="red" fill="none" d="M 10 250 A 230 230 0 0 0 490 250" />
|
||||
</defs>
|
||||
<g id="svgroot" transform="scale(1, 1)">
|
||||
<circle id="bleed" cx="250" cy="250" r="249" stroke="#ff00ff" fill="none" stroke-width="0" />
|
||||
<circle cx="250" cy="250" r="225" stroke="black" fill="white" stroke-width="50" />
|
||||
<g id="icon">
|
||||
|
@ -50,6 +54,7 @@
|
|||
</g>
|
||||
<text><textPath id="uppertext" startOffset="50%" href="#upper">ANTIFASCHISTISCHE</textPath></text>
|
||||
<text><textPath id="lowertext" startOffset="50%" href="#lower">AKTION</textPath></text>
|
||||
</g>
|
||||
</svg>
|
||||
<form>
|
||||
<label for="input-text-upper">Upper text</label>
|
||||
|
@ -80,11 +85,15 @@
|
|||
<input type="checkbox" id="input-check-lock-scale" name="lock-scale" />
|
||||
<label for="input-check-lock-scale">Same scale for red and black</label>
|
||||
</div>
|
||||
<div>
|
||||
<input type="button" id="input-button-download" value="Download SVG" />
|
||||
<input type="button" id="input-button-download-png" value="Download PNG" />
|
||||
</div>
|
||||
<label for="input-file-import-svg">Import downloaded SVG</label>
|
||||
<input type="file" id="input-file-import-svg" name="import-svg" accept="image/svg+xml" />
|
||||
</form>
|
||||
<a id="download" download="antifa.svg" filename="antifa.svg"></a>
|
||||
<a id="download-png" download="antifa.png" filename="antifa.png"></a>
|
||||
<script>
|
||||
let doc = document.getElementById('svg');
|
||||
let inputTextUpper = document.getElementById("input-text-upper");
|
||||
|
@ -101,6 +110,7 @@
|
|||
let inputCheckLockScale = document.getElementById("input-check-lock-scale");
|
||||
let inputRangeBleed = document.getElementById("input-range-bleed");
|
||||
let inputButtonDownload = document.getElementById("input-button-download");
|
||||
let inputButtonDownloadPng = document.getElementById("input-button-download-png");
|
||||
let inputFileImportSvg = document.getElementById("input-file-import-svg");
|
||||
inputTextUpper.oninput = (ev) => {
|
||||
doc.getElementById("uppertext").textContent = inputTextUpper.value;
|
||||
|
@ -209,7 +219,43 @@
|
|||
let a = document.getElementById('download');
|
||||
a.setAttribute('href', 'data:image/svg+xml;charset=utf-8,' + encodeURIComponent(serialized));
|
||||
a.click();
|
||||
};
|
||||
inputButtonDownloadPng.onclick = (ev) => {
|
||||
let imgSize = parseInt(prompt("Enter image size (e.g. 2048)", "2048"));
|
||||
let svgRoot = doc.getElementById("svgroot");
|
||||
if (Number.isNaN(imgSize)) {
|
||||
return;
|
||||
}
|
||||
|
||||
doc.getElementById("bleed").style.stroke = 'black';
|
||||
doc.width.baseVal.value = imgSize;
|
||||
doc.height.baseVal.value = imgSize;
|
||||
doc.viewBox.baseVal.width = imgSize;
|
||||
doc.viewBox.baseVal.height = imgSize;
|
||||
svgRoot.transform.baseVal[0].matrix.a = imgSize/500;
|
||||
svgRoot.transform.baseVal[0].matrix.d = imgSize/500;
|
||||
let serialized = new XMLSerializer().serializeToString(doc);
|
||||
doc.getElementById("bleed").style.stroke = '#ff00ff';
|
||||
svgRoot.transform.baseVal[0].matrix.a = 1;
|
||||
svgRoot.transform.baseVal[0].matrix.d = 1;
|
||||
doc.viewBox.baseVal.width = 500;
|
||||
doc.viewBox.baseVal.height = 500;
|
||||
doc.width.baseVal.value = 500;
|
||||
doc.height.baseVal.value = 500;
|
||||
|
||||
let canvas = document.createElement('canvas');
|
||||
canvas.width = imgSize;
|
||||
canvas.height = imgSize;
|
||||
let ctx = canvas.getContext("2d");
|
||||
let image = new Image();
|
||||
image.onload = () => {
|
||||
ctx.drawImage(image, 0, 0);
|
||||
let a = document.getElementById('download-png');
|
||||
a.setAttribute('href', canvas.toDataURL());
|
||||
a.click();
|
||||
};
|
||||
image.src = 'data:image/svg+xml;charset=utf-8,' + encodeURIComponent(serialized);
|
||||
};
|
||||
inputFileImportSvg.onchange = (ev) => {
|
||||
let file = ev.target.files[0];
|
||||
let reader = new FileReader();
|
||||
|
|
Loading…
Reference in a new issue