Mit dem HTML5- <canvas>
Element möchte ich eine Bilddatei (PNG, JPEG usw.) laden, sie vollständig transparent auf die Leinwand zeichnen und dann einblenden. Ich habe herausgefunden, wie das Bild geladen und in die Leinwand, aber ich weiß nicht, wie ich die Deckkraft ändern soll, wenn sie einmal gezeichnet wurde.
Hier ist der Code, den ich bisher habe:
var canvas = document.getElementById('myCanvas');
if (canvas.getContext)
{
var c = canvas.getContext('2d');
c.globalAlpha = 0;
var img = new Image();
img.onload = function() {
c.drawImage(img, 0, 0);
}
img.src = 'image.jpg';
}
Kann mich bitte jemand in die richtige Richtung weisen, z. B. eine zu setzende Eigenschaft oder eine aufzurufende Funktion, die die Deckkraft ändert?
canvas
Element, das dieglobalAlpha
Eigenschaft hat, sondern der Kontext, den Sie von der Zeichenfläche erhalten.canvas2d.fillStyle = "rgba(255, 255, 255, 0.5)";
nicht. Der Wert muss hexadezimal sein.Einige einfachere Beispielcodes für die Verwendung von
globalAlpha
:Wenn Sie
img
geladen werden müssen:Anmerkungen:
Stellen Sie die
'src'
letzte ein, um sicherzustellen, dass Ihronload
Handler auf allen Plattformen aufgerufen wird, auch wenn sich das Image bereits im Cache befindet.Schließen Sie Änderungen an Dingen wie
globalAlpha
asave
undrestore
(verwenden Sie sie tatsächlich häufig) ein, um sicherzustellen, dass Sie keine Einstellungen von anderen Stellen vornehmen, insbesondere wenn Teile des Zeichencodes von Ereignissen aufgerufen werden.quelle
globalAlpha
verwischt nichts. Es wird das Alpha für alle nachfolgenden Zeichnungen festgelegt (es ändert nichts, was bereits gezeichnet wurde), weshalb ich es im Beispielcode einpackesave
undrestore
einschränke, worauf es angewendet wird.Bearbeiten:
Die als "richtig" gekennzeichnete Antwort ist nicht korrekt.Es ist einfach zu machen. Probieren Sie diesen Code aus und tauschen Sie "ie.jpg" mit dem Bild aus, das Sie zur Hand haben:
Der Schlüssel ist die Eigenschaft globalAlpha.
Getestet mit IE 9, FF 5, Safari 5 und Chrome 12 unter Win7.
quelle
Die Post ist alt, bis jetzt werde ich mit meinem Vorschlag gehen. Der Vorschlag basiert auf der Pixelmanipulation im 2D-Canvas-Kontext. Von MDN:
Um Pixel zu bearbeiten, verwenden wir hier zwei Funktionen - getImageData und putImageData
Verwendung der Funktion getImageData:
und putImageData-Syntax:
Wo Kontext ist Ihre Leinwand 2d Kontext
Um Rot-Grün-Blau- und Alpha-Werte zu erhalten, gehen wir wie folgt vor:
Wo x ist x Offset, y ist y auf Leinwand Offset
Wir haben also Code, der das Bild halbtransparent macht
Sie können Ihre eigenen "Shader" erstellen - den vollständigen MDN-Artikel finden Sie hier
quelle
Sie können. Transparente Zeichenflächen können mithilfe der globalen zusammengesetzten Ziel-Out- Operation schnell ausgeblendet werden . Es ist nicht 100% perfekt, manchmal hinterlässt es einige Spuren, aber es kann je nach Bedarf optimiert werden (dh verwenden Sie 'Source-Over' und füllen Sie es mit weißer Farbe mit Alpha bei 0,13 und verblassen Sie dann, um die Leinwand vorzubereiten).
quelle
Ich denke, dies beantwortet die Frage am besten, es ändert tatsächlich den Alpha-Wert von etwas, das bereits gezeichnet wurde. Vielleicht war dies nicht Teil der API, als diese Frage gestellt wurde.
gegeben 2d Kontext
c
.quelle
Wenn Sie die jCanvas- Bibliothek verwenden, können Sie beim Zeichnen die Opazitätseigenschaft verwenden . Wenn Sie darüber hinaus einen Fade-Effekt benötigen, zeichnen Sie einfach mit anderen Werten neu.
quelle
Das kannst du nicht. Es ist Grafik im Sofortmodus. Sie können es jedoch simulieren, indem Sie ein Rechteck in der Hintergrundfarbe mit einer Deckkraft darüber zeichnen.
Wenn das Bild über etwas anderem als einer konstanten Farbe liegt, wird es etwas schwieriger. In diesem Fall sollten Sie in der Lage sein, die Pixelmanipulationsmethoden zu verwenden. Speichern Sie einfach den Bereich, bevor Sie das Bild zeichnen, und mischen Sie ihn anschließend wieder mit einer Deckkraft.
quelle