91超碰碰碰碰久久久久久综合_超碰av人澡人澡人澡人澡人掠_国产黄大片在线观看画质优化_txt小说免费全本

溫馨提示×

溫馨提示×

您好,登錄后才能下訂單哦!

密碼登錄×
登錄注冊×
其他方式登錄
點擊 登錄注冊 即表示同意《億速云用戶服務條款》

canvas如何給圖片加馬賽克

發布時間:2023-01-31 17:29:01 來源:億速云 閱讀:214 作者:iii 欄目:web開發

本篇內容介紹了“canvas如何給圖片加馬賽克”的有關知識,在實際案例的操作過程中,不少人都會遇到這樣的困境,接下來就讓小編帶領大家學習一下如何處理這些情況吧!希望大家仔細閱讀,能夠學有所成!

實現

canvas如何給圖片加馬賽克

實現過程

思路

最開始需要實現馬賽克功能是需要通過canvas提供的一個獲取到圖片每一個像素的方法,我們都知道,圖片本質上只是由像素組成的,越清晰的圖片,就有著越高的像素,而像素的本質,就只是一個個擁有顏色的小方塊而已,只要把一張圖片放大多倍,就能夠清楚的發現。

canvas實現

通過 canvas 的 getImageData 這個方法,我們就能夠拿到圖像上所有像素組成的數組,并且需要生成馬賽克,意味著我們需要把一個范圍內的色塊的顏色都改成一樣的,也就是通過canvas來重繪圖片,

 let pixeArr = ctx.getImageData(0, 0, w, h).data;
let sampleSize = 40;

for (let i = 0; i < h; i += sampleSize) {
   for (let j = 0; j < h; j += sampleSize) {
     let p = (j + i * w) * 4;
     ctx.fillStyle =
       "rgba(" +
       pixeArr[p] +
       "," +
       pixeArr[p + 1] +
       "," +
       pixeArr[p + 2] +
       "," +
       pixeArr[p + 3] +
       ")";
     ctx.fillRect(j, i, sampleSize, sampleSize);
   }
}

通過雙重循環來循環圖片所有的色塊,其中的跨度就是我們設定好的色塊大小,色塊調整的越大,馬賽克后圖片更模糊,越小,圖片的模糊度就會降低。在通過 fillStyle 選取顏色,以及 fillRect 重繪 canvas 實現了將整個 canvas 的色塊都進行改變,最后在導出重繪后的圖片,無論是改變原來的圖片地址,或者是新加一張圖片作為對比,就都是可行的了。

canvas 跨域問題

在使用 getImageData 獲取圖片的時候,如果使用的是線上圖片,瀏覽器會爆出跨域的錯誤:

canvas如何給圖片加馬賽克

而上文中出現問題的圖片是存放在本地的或者線上的,本地的圖片默認是沒有域名的,線上的圖片并且是跨域的,所以瀏覽器都認為你是跨域,導致報錯。

那么對于本地圖片,我們只需要將圖片放到和html對應的文件夾下,子文件夾也是不可以的,就能夠解決,對于線上的圖片,我們可以采用先把它下載下來,再用方法來獲取數據的這種方式來進行。

function getBase64(imgUrl) {
 return new Promise(function (resolve, reject) {
   window.URL = window.URL || window.webkitURL;
   let xhr = new XMLHttpRequest();
   xhr.open("get", imgUrl, true);
   xhr.responseType = "blob";
   xhr.onload = function () {
     if (this.status == 200) {
       let blob = this.response;
       let oFileReader = new FileReader();
       oFileReader.onloadend = function (e) {
         let base64 = e.target.result;
         resolve(base64);
       };
       oFileReader.readAsDataURL(blob);
     }
   };
   xhr.send();
 });
}

下載圖片就不說了,通過瀏覽器提供的 API 或者其他封裝好的請求工具都是可以的,在請求成功之后,我們將圖片轉化為 base64 并且返回,這樣就能夠獲取線上圖片的數據了。

“canvas如何給圖片加馬賽克”的內容就介紹到這里了,感謝大家的閱讀。如果想了解更多行業相關的知識可以關注億速云網站,小編將為大家輸出更多高質量的實用文章!

向AI問一下細節

免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。

AI

庆城县| 木兰县| 太康县| 尚志市| 沂南县| 伊春市| 祁连县| 大足县| 洛阳市| 晋州市| 万山特区| 界首市| 广平县| 贵港市| 苏州市| 宁夏| 集贤县| 鲁甸县| 乡宁县| 揭阳市| 宜君县| 玛纳斯县| 昌黎县| 株洲县| 格尔木市| 翁源县| 白河县| 周宁县| 日土县| 建始县| 莱阳市| 扬州市| 新建县| 四子王旗| 宣武区| 云林县| 邛崃市| 上杭县| 五台县| 金川县| 阜新市|