中文字幕av专区_日韩电影在线播放_精品国产精品久久一区免费式_av在线免费观看网站

溫馨提示×

溫馨提示×

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

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

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

巴林右旗| 五河县| 仪陇县| 长泰县| 赤水市| 郯城县| 崇阳县| 四子王旗| 明星| 潼南县| 丰县| 司法| 济源市| 伊宁市| 襄汾县| 平江县| 渭南市| 科尔| 邳州市| 南阳市| 全州县| 固阳县| 塘沽区| 三穗县| 芦溪县| 谢通门县| 苗栗市| 鄂州市| 德州市| 旌德县| 阳春市| 濉溪县| 利辛县| 航空| 沙湾县| 甘肃省| 抚顺市| 清涧县| 眉山市| 丹寨县| 隆化县|