Tôi đang sử dụng context-blender để áp dụng hiệu ứng nhân trên 192 pixel đầu tiên của hình nền html với màu cố định để đạt được hiệu ứng trong suốt trên tiêu đề của trang.Cắt xén hình ảnh html5
Trên html, tôi có 2 canvas. Một phần cho hình ảnh để áp dụng hiệu ứng nhân và một cho màu sắc.
Trên javascript, sau khi cài đặt màu sắc của màu vải và độ rộng của cả vải đến window.innerWidth tôi nhận được hình nền với:
imageObj.src = $('html').css('background-image').replace(/^url|[\(\)]/g, '');
Bây giờ đến vấn đề này. Tôi muốn vẽ một hình ảnh đã cắt vào hình ảnh với khung hình ảnh để tôi có thể áp dụng hiệu ứng nhân. Tôi đang cố gắng thực hiện những việc sau:
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');
}
Nhưng tôi đang làm sai điều gì đó khi nhận được chiều cao cắt.
Ex: Đối với một hình ảnh 1536x1152 và một container trình duyệt 1293x679, giá trị tôi nhận được cho các nguồn cắt chiều cao là 230 nhưng để có được những cây trồng chính xác tôi cần phải sử dụng một cái gì đó xung quanh 296.
Chỉnh sửa:
tôi đang sử dụng nền-size: bìa trên css để tạo background-image
Edit2:
Tôi đã tạo một fiddle để minh họa sự cố. Nếu bạn bỏ ghi chú dòng //cHeight *= magicConstant;
hình ảnh được cắt trông sẽ đẹp hơn nhiều nhưng mọi thứ sẽ không có ý nghĩa. Tôi đã loại bỏ hiệu ứng nhân trên fiddler nhưng không bắt buộc phải tái tạo vấn đề. Tôi cũng nhận thấy rằng hành vi đã thay đổi nếu tôi xóa canvas thứ hai khỏi URL.
Btw, hành vi này đã xảy ra với google chrome, nhưng tôi nghĩ điều tương tự cũng xảy ra trên safari và firefox.
Bạn có thể tạo một ví dụ trên jsfiddle.net không? Có thể giúp chúng tôi đưa ra câu trả lời cho bạn. Ngoài ra Liệu hành vi (nhận được 230px so với 296px) có nhất quán trên nhiều trình duyệt không? –
@MarcGagne Tôi đã thêm ví dụ vào câu hỏi – dcarneiro