2010-09-09 3 views
8

Ich frage mich, ob es möglich ist, zwei oder mehr Bilder auf einer Webseite mit Blend-Modi, wie Sie es in Photoshop finden (Overlay, Bildschirm, Aufhellen, etc.) zu mischen.Photoshop-ähnliche Mischung Modus in Webseiten mit CSS oder JavaScript?

Ich weiß, dass diese Art von Sache mit Flash und Java möglich ist, aber ist es möglich, ohne Plugins, also mit CSS oder JavaScript? Ich habe ein paar Javascript-Beispiele für diesen Effekt gesehen, die auf relativ kleinen Bildern arbeiten, aber ich bin daran interessiert, dies auf hochauflösenden Bildern zu tun ... das ist rein zu experimentellen Zwecken.

Antwort

5

Ich habe eine separate, leicht, Open-Source-Bibliothek erstellt für Photoshop-Stil Mischmodi von einer HTML-Canvas Kontext zu einem anderen auszuführen: context-blender. Hier ist die Probe Nutzung:

// Might be an 'offscreen' canvas 
var over = someCanvas.getContext('2d'); 
var under = anotherCanvas.getContext('2d'); 

over.blendOnto(under, 'screen', {destX:30,destY:15}); 

Siehe README für weitere Informationen, einschließlich der Mischmodi in der aktuellen Version nicht unterstützt.

+0

Wie ist die Effizienz dieser Bibliothek? – Greg

+0

@Greg Ich erhalte ~ 210fps auf einer geraden Kopie einer 141x141-Region und ~ 160fps führe den "Differenz" -Modus (der aktuell schlechtere Performer) mit Safari v5 aus. Leistung auf Chrome ist besser, Firefox ist schlechter. Es gibt nur eine Hauptoptimierung, die ich (absichtlich) nicht gemacht habe: Momentan gibt es einen 'Schalter' innerhalb einer 'for'-Schleife über die Pixel. Das Explodieren der Loops in jedem "Case" liefert stattdessen eine 5- bis 10-prozentige Geschwindigkeitssteigerung, aber bei einer hässlichen, nicht-DRY-Erweiterung der Codebasis doppelte Berechnungen, die für alle Modi gelten. – Phrogz

+0

@Greg Die Bibliothek ist derzeit lesbar [145 Zeilen Code] (https://github.com/Phrogz/context-blender/blob/master/context_blender.js) (mit etwa 14 davon sind Kommentare, die ich wirklich brauche einfach löschen). – Phrogz

Verwandte Themen