Wie in den Kommentaren zu Ihrer Frage vorgeschlagen, ist ein Ansatz DOM-Elemente zu überlagern - das Top-DOM-Element ein PNG mit Transparenz sein sollte, und die unteren Ihre Hintergrundmuster sein sollte. Dies funktioniert auch (und es ist schneller, da Sie das kombinierte Bild nicht berechnen müssen), bietet aber ein wenig weniger Flexibilität in Bezug auf die Art, wie die Bilder kombiniert werden. Mit der Canvas-Methode können Sie einen beliebigen Mischmodus verwenden.
Eine zweite Option, die von den meisten Browsern noch nicht unterstützt wird, ist die Verwendung von CSS background blend modes. Auf diese Weise können Sie ein PNG-Bild mit Transparenz erstellen, ihm eine Hintergrundfarbe zuweisen und die Überblendung mit CSS verwenden. Dies ist schnell und benötigt nur ein DOM-Element.
Ein dritter Ansatz ist die Verwendung von Leinwänden. (Edit: markE Leinwand-Ansatz ist schneller und einfacher.) implementiert ich eine Leinwand-basierten Ansatz in diesem JSFiddle: http://jsfiddle.net/IceCreamYou/uzzLa/ - hier ist der Kern:
// Get the base image data
var image_data = ctx.getImageData(0, 0, ctx.canvas.width, ctx.canvas.height);
var image_data_array = image_data.data;
// Get the pattern image data
var overlay_data = ovlyCtx.getImageData(0, 0, ovlyCtx.canvas.width, ovlyCtx.canvas.height).data;
// Loop over the pixels in the base image and merge the colors
for (var i = 0, j = image_data_array.length; i < j; i+=4) {
// Only merge when the base image pixel is nontransparent
// Alternatively you could implement a border-checking algorithm depending on your needs
if (image_data_array[i+3] > 0) {
image_data_array[i+0] = combine(image_data_array[i+0], overlay_data[i+0]); // r
image_data_array[i+1] = combine(image_data_array[i+1], overlay_data[i+1]); // g
image_data_array[i+2] = combine(image_data_array[i+2], overlay_data[i+2]); // b
}
}
// Write the image data back to the canvas
ctx.putImageData(image_data, 0, 0);
Was sie tut, ist eine Leinwand mit dem Basisbild erstellen und eine zweite Leinwand, die Ihr Musterbild Fliesen, verwendet Die Pixeldaten überlagern das Muster über der Basis, wenn die Basispixel nicht transparent sind.
Sie können dies nicht leicht, aber wenn Sie es tun wollen, ich nicht über jede Bibliothek für Bildmanipulation machen Ihre zweite Bild ein wenig transparent, und füllen Bereich auf dem ersten Bild sagen kann, So wird auch die erste Bildkurve angezeigt, aber Sie haben ein wenig Opazität verloren. können Sie magik, gd für PHP verwenden, und das gleiche gilt für Leinwand, aber müssen Sie auf seine Dokumente über Ablage Muster –
Dank für die Richtung verweisen. –
Verwenden Sie [PNGa und CSS] (http://imgur.com/86fZO1i). –