utils.canvasMasking = function(img) { var deferred = $.Deferred(); var newImg = document.createElement('img'); newImg.setAttribute('crossOrigin', 'Anonymous'); //解决跨域问题 newImg.src = img.src; //源图片加载失败 newImg.onerror = function() { deferred.reject('源图片加载失败'); }; //源图片加载成功 newImg.onload = function() { var imageWidth = img.width; var imageHeight = img.height; var mask = document.createElement('img'); mask.setAttribute('crossOrigin', 'Anonymous'); mask.src = img.getAttribute('data-mask'); //遮罩图片加载失败 mask.onerror = function() { deferred.reject('遮罩图片加载失败'); }; //遮罩图片加载成功 mask.onload = function() { var maskCanvas = document.createElement('canvas'); var maskContext = maskCanvas.getContext('2d'); var maskWidth = mask.width; var maskHeight = mask.height; maskCanvas.width = maskWidth; maskCanvas.height = maskHeight; /** * 合并mask与处理后的原始图 */ maskContext.drawImage(mask, 0, 0, maskWidth, maskHeight); //将一个源(新的)图像绘制到目标(已有)的图像上 maskContext.globalCompositeOperation = 'source-in'; maskContext.drawImage(img, 0, 0, maskWidth, maskHeight); img.src = maskCanvas.toDataURL(); deferred.resolve(maskCanvas); }; }; return deferred.promise(); };
OS | Command |
---|---|
OS X | brew install pkg-config cairo libpng jpeg giflib |
Ubuntu | sudo apt-get install libcairo2-dev libjpeg8-dev libpango1.0-dev libgif-dev build-essential g++ |
Fedora | sudo yum install cairo cairo-devel cairomm-devel libjpeg-turbo-devel pango pango-devel pangomm pangomm-devel giflib-devel |
Solaris | pkgin install cairo pkg-config xproto renderproto kbproto xextproto |
Windows | Instructions on our wiki |