Sto usando context-blender per applicare un effetto moltiplicativo sui primi 192 pixel dell'immagine di sfondo html con un colore fisso per ottenere un effetto di trasparenza sull'intestazione della pagina.html5 image cropping
Sul html ho 2 tele. Uno per la parte dell'immagine per applicare l'effetto moltiplica e uno per il colore.
In javascript, dopo aver impostato il colore del colore-tela e la larghezza di entrambi tela per la window.innerWidth sto ottenendo l'immagine di sfondo con:
imageObj.src = $('html').css('background-image').replace(/^url|[\(\)]/g, '');
Ora arriva il problema. Voglio disegnare un'immagine ritagliata all'immagine sul canvas dell'immagine in modo da poter applicare l'effetto moltiplicare. Sto cercando di fare quanto segue:
imageObj.onload = function(){
// getting the background-image height
var imageHeight = window.innerWidth * imageObj.height/imageObj.width;
// get the corresponding pixels of the source image that correspond to the first 192 pixels of the background-image
var croppedHeight = 192 * imageObj.height/imageHeight;
// draw the image to the canvas
imageCanvas.drawImage(imageObj, 0, 0, imageObj.width, croppedHeight, 0, 0, window.innerWidth, 192);
// apply the multiply effect
colorCanvas.blendOnto(imageCanvas, 'multiply');
}
Ma sto facendo qualcosa di sbagliato ottenendo l'altezza ritagliata.
Es: Per un'immagine 1536x1152 e un contenitore del browser 1293x679, il valore sto diventando la fonte ritagliata altezza è di 230, ma per ottenere il raccolto corretta ho bisogno di usare qualcosa intorno a 296.
Edit:
sto usando background-size: copertura sul css per creare l'immagine di sfondo
Edit2:
Ho creato uno fiddle per illustrare il problema. Se disattivi la riga //cHeight *= magicConstant;
, l'immagine ritagliata è molto migliore ma le cose non hanno più senso. Ho rimosso l'effetto moltiplicatore sul violinista ma non è necessario riprodurre il problema. Ho anche notato che il comportamento è cambiato se rimuovo il secondo canvas dall'URL.
Btw, questo comportamento si è verificato con google chrome, ma penso che la stessa cosa avvenga in Safari e Firefox.
Sareste in grado di creare un esempio di jsfiddle.net? Potrebbe aiutarci a trovare una risposta per te. Inoltre il comportamento (ottenendo 230px vs 296px) è coerente su più browser? –
@MarcGagne Ho aggiunto l'esempio alla domanda – dcarneiro