2016-08-01 12 views
3

Wir sind Anzeigen von image1 in Website wie folgt:Overlap image2 auf image1

enter image description here

Jetzt geben wir eine Option image2 zu laden, und was wir wollen, ist hochgeladen image2 sollten existierte image1 wie here überlappen.

enter image description here

aber jetzt, wenn wir image2 laden, image1 auf image2 überlappt.

enter image description here

var canvas = new fabric.Canvas('canvas'); 
 
document.getElementById('file').addEventListener("change", function (e) { 
 
    var file = e.target.files[0]; 
 
    var reader = new FileReader(); 
 
    reader.onload = function (f) { 
 
    var data = f.target.result;      
 
    fabric.Image.fromURL(data, function (img) { 
 
    // var oImg = img.set({left: 0, top: 0, angle: 00,width:100, height:100}).scale(0.9); 
 
\t var oImg = img.set({left: 0, top: 0, angle: 00, width: canvas.getWidth(), height: canvas.getHeight()}); 
 
     canvas.add(oImg).renderAll(); 
 
     var a = canvas.setActiveObject(oImg); 
 
     var dataURL = canvas.toDataURL({format: 'png', quality: 0.8}); 
 
    }); 
 
    }; 
 
    reader.readAsDataURL(file); 
 
}); 
 

 

 
var img = new Image(); 
 
img.onload = function() { 
 
    //draw after loading 
 
    var canvas = document.getElementById('case_canvas'); 
 
    var ctx = canvas.getContext("2d"); 
 
    ctx.drawImage(img, 0, 0, img.naturalWidth, img.naturalHeight); 
 
} 
 

 
img.src = "http://i.stack.imgur.com/xgNw7.png"; 
 
//^^ this will start loading the image
/*.canvas-container { 
 
    background: url("http://i.stack.imgur.com/xgNw7.png") no-repeat fixed center; 
 

 
    } 
 
    */ 
 
    
 
.canvas-container { 
 
width: 300px; height: 500px; position: relative; -webkit-user-select: none; top:900px; 
 
} 
 
    
 
#canvas 
 
{ 
 
    border: 1px solid black; 
 
    top:500px; 
 
} 
 

 
#file 
 
{ 
 
\t position:relative;top:900px; 
 
} 
 

 
.lower-canvas 
 

 
{ 
 
\t position: absolute; width: 300px; height: 500px; bottom:400px; left: 0px; -webkit-user-select: none; 
 
} 
 

 
.upper-canvas { 
 
position: absolute; width: 300px; height: 500px; left: 0px; top: 0px; -webkit-user-select: none; cursor: default; 
 
}
<script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js"></script> 
 
<script src="https://rawgit.com/kangax/fabric.js/master/dist/fabric.min.js"></script> 
 
<input type="file" id="file"><br /> 
 
<canvas id="canvas" width="450" height="450"></canvas> \t 
 

 
<div class="canvas-container"> 
 
<canvas id="case_canvas" width="300" height="500" class="lower-canvas" ></canvas> 
 
<canvas class="upper-canvas " width="300" height="500" ></canvas> 
 
</div>

, sobald Sie auf Run code Snippet klicken, scrollen Sie bitte etwas nach unten Ergebnisse zu sehen.

+0

Ihr Snippet sagt 'Uncaught ReferenceError: Fabric ist nicht definiert ' –

+0

@NaeemShaikh vielleicht sollten Sie die Fabric.js in die Jsfiddle hochladen? –

+0

@NaeemShaikh bitte scrollen Sie ein wenig nach unten und laden Sie ein Bild mit der Option 'Datei auswählen' hoch. –

Antwort

0

#case_canvas { 
    z-index:-1 
} 

zu Ihrem CSS hinzufügen. Dadurch wird die Leinwand mit dem Umriss des Gehäuses hinter den hochgeladenen Bildern positioniert. Stellen Sie jedoch sicher, dass das hochgeladene Bild die richtige Größe hat. B. durch oder indem die Breite auf einen bestimmten Anteil der Leinwandbreite eingestellt wird, weil es so aussieht, wie es jetzt ist, es wird die gesamte Leinwand abdecken, wenn es groß genug ist und das Gehäuse überhaupt nicht sichtbar ist.

+0

sorry, aber es hat 'für mich gearbeitet als [hier] (http: // sbdev2 .kidsdial.com/golden-Wellen-Marmor-Textur-Micromax-Leinwand-Ritter-a350-phone-case.html) –

+0

@cssbeginner Hey, danke! Hast du es geschafft, es dann zu arbeiten? – AgataB

+0

Ihre Lösung arbeitete für den Code, den ich in Frage gestellt habe, ich versuchte Ihre Lösung für irgendeinen anderen Code, also hat es für mich gearbeitet. Wir planen einen alternativen Weg. Vielen Dank für Ihre Unterstützung. –

0

FabricJs fügt Ihrem DOM eigene Canvas-Elemente hinzu. Es gibt 2: eine obere Canvas, die im Grunde Ereignisse und Linien zum Ziehen/Verändern behandelt, die untere Leinwand zum Rendern von Bildern oder Objekten.

Anstatt einen weiteren hinzuzufügen, sollten Sie nur das fabricJS-Framework verwenden und Ihr Hintergrundbild als fabric.Image definieren. Sie können es anpassen, damit es von Ihrem Benutzer nicht geändert werden kann.

Das Hinzufügen eines Z-Index oder das Neustrukturieren Ihres HTML-Codes können Ihre aktuellen Probleme beheben, aber vertrauen Sie mir: Es ist nicht die Art, wie Sie gehen möchten.