ndern Sie die Größe eines HTML 5-Canvas und seines Inhalts in reinem Javascrip

Ich möchte eine "Zoom" -Funktion in meiner Web-App implementieren, um die Größe eines Canvas und seines Inhalts proportional zu ändern (schmutzige Qualität ist mir egal).

Hier ist mein Code. Jedes Mal, wenn wir zoomen möchten, wird die Zeichenfläche zurückgesetzt, um ein Bildobjekt zu erhalten (für die Verwendung der drawImage-Methode), die Größe der Zeichenfläche zu ändern und dann die drawImage-Methode zu verwenden, um die Größe des Inhalts proportional zu ändern ...

var Editor = {
    // The following variables contains informations
    // about the original canvas
    data: ..., // imageData
    width: 200,
    height: 50,

    // Zoom canvas
    zoomCanvas: function(zoom){ // zoom in percents
        var canvas = $('#canvas').get(0);
        var context = canvas.getContext();
        var data = this.data;
        var scale = zoom / 100;
        var width = this.width * scale;
        var height = this.height * scale;

        // Reset canvas to original size and imageData
        this.resizeCanvas(this.width, this.height); 
        context.scale(1, 1);
        context.putImageData(data, 0, 0);

        // Get Image from original canvas data
        var url = canvas.toDataURL();
        var img = $('<img src="' + url + '">').get(0);

        // Resize canvas, apply scale and draw Image with new proportions
        this.resizeCanvas(width, height);
        context.scale(scale, scale);
        context.drawImage(img, 0, 0);
    },

    // Resize canvas
    resizeCanvas: function(width, height){
        // NOTE : I don't know exactly how to resize it so...
        var canvas = $('#canvas').get(0);
        canvas.width = width;
        canvas.height = height;
        $(canvas).width(width).attr('width', width);
        $(canvas).height(height).attr('height', height);

        var context = canvas.getContext('2d');
        context.width = width;
        context.height = height;
    }
}

Es funktioniert für Zoom +, aber nicht für Zoom -.

Anyway, ich denke nicht, dass es die beste Möglichkeit ist, das zu tun, was ich erwarte. Es wäre besser, eine Möglichkeit zu finden, direkt von Editor.data aus zu arbeiten, ohne die Zeichenfläche jedes Mal zurücksetzen oder das Image-Objekt speichern zu müssen. Außerdem bin ich mir nicht sicher, ob ich die Skalierungsmethode verwenden soll ...

Jede Hilfe wäre dankbar

(Entschuldige mein Englisch

Antworten auf die Frage(2)

Ihre Antwort auf die Frage