De SVG à PNG avec javascript

Le problème exposé dans ce sujet a été résolu.

Bonjour, J’espère pouvoir expliquer mon problème et avoir une solution. J’ai trouvé un javascript qui me permet, dans une page html, de transformer des .svg en .png et de les télécharger. Le problème c’est que tous les svg présents sur le page sont transformés et téléchargés. Dans mon cas il y a en 2 : svg id="dessin_1" et svg id="dessin_2" Je souhaiterais donc que lorsque je clique sur le bouton de téléchargement, je puisse télécharger uniquement svg id="dessin_2"… donc qu’il y ait qu’une seule transformation de svg à png càd cibler l’action sur un seul svg.

Voici le javascript :

(function (global) {

let document = global.document;
let body = document.body;
let svg = document.querySelectorAll('svg')

let download_button = document.querySelector('#download');

download_button.addEventListener('click', function () {

    for (let i = 0; i < svg.length; i++) {

        let canvas = document.createElement("canvas");
        let context = canvas.getContext("2d");
        let image = new Image;
        let width = 750;
        let height = 750;
        let imageUrl = URL.createObjectURL(new Blob([(new XMLSerializer).serializeToString(svg[i])], { type: "image/svg+xml" }));

        image.onload = function () {

            setTimeout(function () {

                context.drawImage(image, 0, 0, width, height);
                canvas.toBlob(function (blob) {
                    let link = document.createElement("a");
                    let linkUrl = URL.createObjectURL(blob);
                    link.download = "image.png";
                    link.href = linkUrl;
                    body.appendChild(link);

                    setTimeout(function () {
                        link.click();
                        linkUrl = URL.revokeObjectURL(linkUrl);
                        imageUrl = URL.revokeObjectURL(imageUrl);
                        body.removeChild(link);
                    }, 10);
                });
            }, 10);
        };

        canvas.width = width;
        canvas.height = height;
        image.src = imageUrl;
    }

})

})(this);

Y a-t-il un élément à rajouter ou à transformer dans ce script / si oui, lequel et comment ?

Merci pour votre aide

Bonjour,

La ligne suivante sélectionne tous les SVG qui se trouvent sur la page :

let svg = document.querySelectorAll('svg')

Idéalement, il faudrait utiliser document.getElementById('dessin_2') mais le code attend un tableau à parcourir (ligne 9) et cette fonction retourne un unique élément. Il faut soit utiliser document.getElementById et retirer le for, soit utiliser :

let svg = document.querySelectorAll('#dessin_2')

Même si ça n’a pas beaucoup de sens car un id est censé être unique.

Connectez-vous pour pouvoir poster un message.
Connexion

Pas encore membre ?

Créez un compte en une minute pour profiter pleinement de toutes les fonctionnalités de Zeste de Savoir. Ici, tout est gratuit et sans publicité.
Créer un compte