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 |