1. 程式人生 > >JS使用canvas給圖片打馬賽克

JS使用canvas給圖片打馬賽克

簡介

利用canvas載入圖片後,畫布上的各畫素的顏色(r,g,b)值來填充色塊,達到馬賽克效果。

效果圖

宮本-馬賽克

程式碼

  • html
<canvas id="canvas" data-src="images/test.jpg" width="800" height="600"></canvas>
  • javascript
    const mosaicImage = (target, mosaicSize = 20) => {

        let canvas = document.getElementById(target),
            _canvas = document.createElement('canvas');

        if (!canvas || !canvas.getContext) {

            return false;

        }

        /**
         * 根據圖片填充馬賽克塊
         */
        const createMosaic = (context, width, height, size, data) => {

            for (let y = 0; y < height; y += size) {

                for (let x = 0; x < width; x += size) {

                    /**
                     * 取出畫素的r,g,b,a值
                     */
                    let cR = data.data[(y * width + x) * 4],
                        cG = data.data[(y * width + x) * 4 + 1],
                        cB = data.data[(y * width + x) * 4 + 2];

                    context.fillStyle = `rgb(${cR},${cG},${cB})`;
                    context.fillRect(x, y, x + size, y + size);

                }

            }

        };

        /**
         * 將資料畫到canvas
         */
        const draw = (_context, imageData, context) => {

            createMosaic(_context, _canvas.width, _canvas.height, mosaicSize, imageData);
            context.drawImage(_canvas, 0, 0);

        };


        const init = () => {

            let context = canvas.getContext('2d');

            /**
             * 設定圖片來源
             */
            let img = new Image();
            img.src = canvas.getAttribute('data-src');

            /**
             * 載入圖片
             */
            img.onload = () => {

                let _context = _canvas.getContext('2d'),
                    imageData;

                /**
                 * 圖片大小與canvas匹配
                 */
                _canvas.width = img.width;
                _canvas.height = img.height;

                /**
                 * 重置canvas畫布大小
                 */
                canvas.width = img.width;
                canvas.height = img.height;

                _context.drawImage(img, 0, 0);

                /**
                 * 獲取canvas各畫素的顏色資訊
                 * 畫素的顏色資訊從左到右,r, g, b, a 值排列
                 */
                imageData = _context.getImageData(0, 0, _canvas.width, _canvas.height);

                draw(_context, imageData, context);

            };

        };
        init();

    };

    /**
     * div物件, 及馬賽克大小
     */
    mosaicImage('canvas', 8);


檢視原文:https://www.huuinn.com/archives/469
更多技術乾貨:風勻坊
關注公眾號:風勻坊

相關推薦

JS使用canvas圖片馬賽克

簡介 利用canvas載入圖片後,畫布上的各畫素的顏色(r,g,b)值來填充色塊,達到馬賽克效果。 效果圖 程式碼 html <canvas id="canvas" data-src="images/test.jpg" width="800" height="6

linux下使用open(),write(),bmp圖片馬賽克

本程式用於在linux下使用檔案操作對bmp圖片進行打馬賽克,效果很不錯。 對於bmp格式,只需要知道這兩點,1,偏移為18byte的地方儲存了bmp圖片的寬度和高度,分別佔4byte,2,偏移為54byte的地方為圖片的資料區,若為24位彩色圖,則一個畫素佔3byte空間

[Xcode10 實際操作]六、媒體與動畫-(5)使用CoreImage框架圖片新增馬賽克效果

本文將演示如何使用CoreImage影象處理框架,給圖片新增畫素化的濾鏡效果。 在專案導航區,開啟檢視控制器的程式碼檔案【ViewController.swift】 1 import UIKit 2 //首先匯入要使用的框架,該框架提供了強大和高效的影象處理功能, 3 //用來對基於畫素的

6.5 使用CoreImage框架圖片新增馬賽克效果 [原創iOS開發-Xcode教程]

1. 在歡迎視窗右側的歷史專案列表中,雙擊開啟之前建立的單檢視專案模板。 2. 本節課將為您演示,如何使用影象處理框架,給圖片新增畫素化濾鏡效果。首先在一個空白專案中,開啟檢視控制器的程式碼檔案。 3. 接著開始編寫程式碼,實現這項功能。 4. 首先匯入需要用到的框架。 5.

[Xcode10 實際操作]六、媒體與動畫-(5)使用CoreImage框架圖片添加馬賽克效果

create dds bsp 視圖 after core 圖像 color inpu 本文將演示如何使用CoreImage圖像處理框架,給圖片添加像素化的濾鏡效果。 在項目導航區,打開視圖控制器的代碼文件【ViewController.swift】 1 impor

ios開發之人臉識別(眼睛馬賽克

#import "ViewController.h" @interfaceViewController () @end @implementationViewController - (v

ps技術--批量圖片加水印

photos strong http jpg 記錄 介紹 可見 出現 同一文件   在日常的辦公過程中,對於一些比較重要的文件的掃描件需要特殊處理,這時我們就需要給它們加上水印,保證它們的用途唯一,而這些掃描件很多,不可能一一給他們加水印,所以為提高工作效率,我們就可以使用

php圖片加文字水印

img black rom filename 這不 data- 等等 con rac <?php /*給圖片加文字水印的方法*/ $dst_path = ‘http://f4.topitme.com/4/15/11/1166351597fe111154l.jpg‘

圖片添加屬性:鼠標移上後變小手並且跳轉到指定的url

rip point images win ges omd scrip oca div 給圖片添加屬性:鼠標移上後變小手並且跳轉到指定的url style="cursor: pointer;" onclick="javascript:window.location.hr

php圖片添加圓角並且保持透明,可做圓形頭像

ger ++ href bsp esc ring 顏色 com 公式 原文鏈接:https://www.zhaokeli.com/article/8031.html 給圖片添加圓角, 用到的主要的(判斷一個點是否在圓內)的公式在上面所說的生成圓形圖片文章中。 然後掃描

使用canvas圖片添加水印, canvas轉換base64,,canvas,圖片,base64等轉換成二進制文檔流的方法,並將合成的圖片上傳到服務器,

web don 可能 work box rac return ros font 一,前端合成帶水印的圖片 一般來說,生成帶水印的圖片由後端生成,但不乏有時候需要前端來處理。當然,前端處理圖片一般不建議,一方面js的處理圖片的方法不全,二是有些老版本的瀏覽器對canvas

Bootstrap3基礎 img-thumbnail 圖片加一個圓角的邊框

dev scala boot 一個 studio styles 比例 rip ast 禮悟:   公恒學思合行悟,尊師重道存感恩。葉見尋根三返一,江河湖海同一體。 虛懷若谷良心主,願行無悔給最苦。讀書鍛煉養身心,誠勸且行且珍惜。   

JAVA圖片添加水印

lin highlight val read blog gre mat print ora package com.test; import org.junit.Test; import javax.imageio.ImageIO; import java.awt.*;

java 圖片和動圖添加水印

port buffere imp 結束 exce cat screen rem *** 這兩天根據需求在做圖片上傳添加水印,實話說重來不知道java還可以這樣操作,既然有個這要求我就去找資料研究了一番,現在把它分享一下,希望能幫到有需要的兄弟。 給普通圖片添加水印和給動圖添

HTTP請求頭圖片

HTTP請求頭圖片打開 import java.io.File; import java.io.FileInputStream; import java.io.IOException; import java.io.InputStream; import java.io.OutputStream; impo

美國亞馬遜圖片不開

網站 找到 原因 內網 mage googl 時間 技術分享 技術 訪問美國亞馬遜的時候,圖片不加載,就是一把叉 嚴重的時候甚至css也沒了,整個頁面變成了沒有排版的文字 網上說是網絡的問題,確實有這個問題 比如我換成手機上移動的網,整個網站都打不開了 電信比移動好點,大部

Tomcat開遠程debug端口

apach -o 添加 mpi add vim ava agen art >cd apache-tomcat-8.5.24 >cd conf >vim catalina.sh 在文件開始處添加: CATALINA_OPTS="-server -Xdeb

用什麽方法圖片文件瘦身變小

方便 軟件安裝 我們 希望 類型 路徑 電腦 一個 遇到 我們在日常工作生活中會遇到比較大的圖片文件,這些圖片文件我們使用者不方便,不管是上傳還是其它的都會很麻煩,今天教給大家一種將圖片文件瘦身變小的方法。 1:在瀏覽器搜索圖片壓縮,進入到這樣一個在線壓縮的網站,在網站的首

如何使用Java代碼圖片增加倒影效果

nal create gin button 二維 根據 效果 alt cimage 效果 倒影率為90%時的效果: 倒影率10%時的效果: 實現原理 倒影率作為參數rate 傳入Reflection button的事件處理函數: CreateImageWithRefl

linux系統,CentOS7.2安裝ffmpeg擴充套件,PHP用FFmpeg擷取視訊第一幀作為視訊封面,並圖片新增播放視訊按鈕

最近做公司的專案中,有使用者上傳視訊,後臺這邊接收視訊並上傳,獲取視訊第一幀作為視訊封面的功能,在網上查找了好多資料,並且安裝 了ffmpeg-php的PHP擴充套件,由於版本問題,安裝好幾個版本都不成功,最後放棄安裝擴充套件,後來執行程式碼發現不用安裝那個擴充套件也能實現截圖並上傳的功能,所以要擷