關于tui-image-editor在vue項目中的使用

**應用于前臺頁面的圖片編輯器膊毁、方便澳骤、快捷挫掏、簡單好用西土、(裁剪杭措、涂鴉拳话、標注珍剑、旋轉钓辆、濾鏡...)

安裝:**

? ? npm i tui-image-editor

? ? yarn add tui-image-editor

由于是老外開發(fā)的缕溉,默認的文字描述都是英文考传,這里我們需要先漢化一下:

? ? const locale_zh = {

? ? ? ZoomIn: "放大",

? ? ? ZoomOut: "縮小",

? ? ? ...

? ? },

效果如下:

**自定義樣式:**

默認風格為暗黑系,如果想改成白底证鸥,或者想改變按鈕的大小僚楞、顏色等樣式,可以使用自定義樣式枉层。

? ? const customTheme = {

? ? ? "common.bi.image": "", // 左上角logo圖片

? ? ? "common.bisize.width": "0px",

? ? ? "common.bisize.height": "0px",

? ? ? "common.backgroundImage": "none",

? ? ? "common.backgroundColor": "#f3f4f6",

? ? ? "common.border": "1px solid #333",

? ? ? ...},

使用如下:

? ? this.instance = new ImageEditor(

? ? ? document.querySelector("#tui-image-editor"),

? ? ? {

? ? ? ? includeUI: {

? ? ? ? ? loadImage: {

? ? ? ? ? ? path: "https://img1.baidu.com/it/u=4131209051,1689521986&fm=253&fmt=auto&app=138&f=JPEG?w=800&h=500",

? ? ? ? ? ? name: "image",

? ? ? ? ? },

? ? ? ? ? initMenu: "draw", // 默認打開的菜單項

? ? ? ? ? menuBarPosition: "bottom", // 菜單所在的位置

? ? ? ? ? locale: locale_zh, // 本地化語言為中文

? ? ? ? ? theme: customTheme, // 自定義樣式

? ? ? ? },

? ? ? ? cssMaxWidth: 1000, // canvas 最大寬度

? ? ? ? cssMaxHeight: 600, // canvas 最大高度

? ? ? }

? ? );

**以下是調整顯示樣式以及調整畫筆顏色為黑色泉褐,雖然寫入的是紅色**

? ? document.getElementsByClassName("tui-image-editor-main")[0].style.top ="45px"; // 調整圖片顯示位置

? ? document.getElementsByClassName("tie-btn-reset tui-image-editor-item help")[0].style.display = "none"; // 隱藏頂部重置按鈕

? ? document.getElementsByClassName("tui-image-editor-button line")[0].style.display = "none"; // 隱藏直線

? ? document.getElementsByClassName("tie-draw-color tui-image-editor-button")[0].style.display = "none"; // 隱藏顏色

? ? document.getElementsByClassName("tui-image-editor-partition")[0].style.display = "none"; // 隱藏顏色

? ? _that.instance.ui.draw.color = "red";

**為了保證與后端交互所需要的圖片格式為黑底白色涂鴉部分的圖片,做出以下更改:**

思路:

1鸟蜡、得到上傳或者選擇的圖片數據格式膜赃,先處理成4個為一組的數組數據,然后再來解析改變數值為0的改為其他相近值揉忘,然后重新生成canvas

2跳座、在重新繪制后就可以開始涂鴉了

2端铛、得到涂鴉后的圖片后,再次獲取圖片數據疲眷,先獲取不為0的數值改為0黑色沦补,為0的數值給為255白色,然后重新生成canvas就可以得到想要的圖片咪橙。

以下是需要的方法:

? ? ? // 獲取到圖片的一維數組

? ? ? getImageData(dom, url) {

? ? ? ? ? const ctx = dom.getContext("2d"); // 設置在畫布上繪圖的環(huán)境

? ? ? ? ? const image = new Image();

? ? ? ? ? image.src = url;

? ? ? ? ? //獲取畫布寬高

? ? ? ? ? const w = dom.width;

? ? ? ? ? const h = dom.height;

? ? ? ? ? return new Promise((resolve) => {

? ? ? ? ? ? image.onload = function () {

? ? ? ? ? ? ? ctx.drawImage(image, 0, 0, w, h); // 將圖片繪制到畫布上

? ? ? ? ? ? ? const imgData = ctx.getImageData(0, 0, w, h); // 獲取畫布上的圖像像素

? ? ? ? ? ? ? resolve(imgData.data); // 獲取到的數據為一維數組,包含圖像的RGBA四個通道數據

? ? ? ? ? ? ? ctx.clearRect(0, 0, w, h);

? ? ? ? ? ? };

? ? ? ? ? });

? ? ? ? },

? ? ? ? // 轉化成多維數組

? ? ? ? normalize(data, width, height) {

? ? ? ? ? const list = [];

? ? ? ? ? const result = [];

? ? ? ? ? const len = Math.ceil(data.length / 4);

? ? ? ? ? // 將每一個像素點的rgba四個值組合在一起

? ? ? ? ? for (let i = 0; i < len; i++) {

? ? ? ? ? ? const start = i * 4;

? ? ? ? ? ? list.push([

? ? ? ? ? ? ? data[start],

? ? ? ? ? ? ? data[start + 1],

? ? ? ? ? ? ? data[start + 2],

? ? ? ? ? ? ? data[start + 3],

? ? ? ? ? ? ]);

? ? ? ? ? }

? ? ? ? ? //根據圖形的寬和高將數據進行分類

? ? ? ? ? for (let hh = 0; hh < height; hh++) {

? ? ? ? ? ? const tmp = [];

? ? ? ? ? ? for (let ww = 0; ww < width; ww++) {

? ? ? ? ? ? ? tmp.push(list[hh * width + ww]);

? ? ? ? ? ? }

? ? ? ? ? ? result.push(tmp);

? ? ? ? ? }

? ? ? ? ? return result;

? ? ? ? },

? ? ? ? // 在保存時改變圖形的顏色(黑色夕膀、白色)

? ? ? ? peeling(data, w, h) {

? ? ? ? ? data = this.normalize(data, w, h); // 轉化成多維數組

? ? ? ? ? // 將黑色變成白色 (0,0,0) -> (255,255,255)

? ? ? ? ? for (let i = 0; i < data.length; i++) {

? ? ? ? ? ? for (let j = 0; j < data[i].length; j++) {

? ? ? ? ? ? ? //排除透明度的比較

? ? ? ? ? ? ? if (data[i][j].slice(0, 3).join("") != "000") {

? ? ? ? ? ? ? ? data[i][j] = [0, 0, 0, data[i][j][3]];

? ? ? ? ? ? ? } else {

? ? ? ? ? ? ? ? data[i][j] = [255, 255, 255, data[i][j][3]];

? ? ? ? ? ? ? }

? ? ? ? ? ? }

? ? ? ? ? }

? ? ? ? ? return this.restoreData(data); // 轉化成一維數組

? ? ? ? },

? ? ? ? // 在上傳或者選擇圖片時改變顏色(將黑色改成相近顏色)

? ? ? ? peeling1(data, w, h) {

? ? ? ? ? data = this.normalize(data, w, h); // 轉化成多維數組

? ? ? ? ? // 將黑色變成相近顏色 (0,0,0) -> (10, 10, 10)

? ? ? ? ? for (let i = 0; i < data.length; i++) {

? ? ? ? ? ? for (let j = 0; j < data[i].length; j++) {

? ? ? ? ? ? ? //排除透明度的比較

? ? ? ? ? ? ? if (data[i][j].slice(0, 3).join("") == "000") {

? ? ? ? ? ? ? ? data[i][j] = [10, 10, 10, data[i][j][3]];

? ? ? ? ? ? ? }

? ? ? ? ? ? }

? ? ? ? ? }

? ? ? ? ? return this.restoreData(data); // 轉化成一維數組

? ? ? ? },

? ? ? ? // 重新轉化成一維數組

? ? ? ? restoreData(data) {

? ? ? ? ? const result = [];

? ? ? ? ? for (let i = 0; i < data.length; i++) {

? ? ? ? ? ? for (let j = 0; j < data[i].length; j++) {

? ? ? ? ? ? ? result.push(

? ? ? ? ? ? ? ? data[i][j][0],

? ? ? ? ? ? ? ? data[i][j][1],

? ? ? ? ? ? ? ? data[i][j][2],

? ? ? ? ? ? ? ? data[i][j][3]

? ? ? ? ? ? ? );

? ? ? ? ? ? }

? ? ? ? ? }

? ? ? ? ? return result;

? ? ? ? },

? ? ? ? //最后重新渲染到畫圖之后,并且dom為當前圖片需要的dom美侦,得到寬高产舞,而不是canvas本身的寬高

? ? ? ? drawImage(dom, data) {

? ? ? ? ? const ctx = dom.getContext("2d");

? ? ? ? ? const matrix_obj = ctx.createImageData(dom.width, dom.height);

? ? ? ? ? matrix_obj.data.set(data);

? ? ? ? ? ctx.putImageData(matrix_obj, 0, 0);

? ? ? ? },

以上就是所有使用啦~

最后編輯于
?著作權歸作者所有,轉載或內容合作請聯(lián)系作者
  • 序言:七十年代末,一起剝皮案震驚了整個濱河市菠剩,隨后出現(xiàn)的幾起案子易猫,更是在濱河造成了極大的恐慌,老刑警劉巖具壮,帶你破解...
    沈念sama閱讀 217,657評論 6 505
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件准颓,死亡現(xiàn)場離奇詭異,居然都是意外死亡棺妓,警方通過查閱死者的電腦和手機攘已,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 92,889評論 3 394
  • 文/潘曉璐 我一進店門,熙熙樓的掌柜王于貴愁眉苦臉地迎上來怜跑,“玉大人样勃,你說我怎么就攤上這事⌒苑遥” “怎么了峡眶?”我有些...
    開封第一講書人閱讀 164,057評論 0 354
  • 文/不壞的土叔 我叫張陵,是天一觀的道長植锉。 經常有香客問我辫樱,道長,這世上最難降的妖魔是什么俊庇? 我笑而不...
    開封第一講書人閱讀 58,509評論 1 293
  • 正文 為了忘掉前任狮暑,我火速辦了婚禮,結果婚禮上暇赤,老公的妹妹穿的比我還像新娘心例。我一直安慰自己,他們只是感情好鞋囊,可當我...
    茶點故事閱讀 67,562評論 6 392
  • 文/花漫 我一把揭開白布止后。 她就那樣靜靜地躺著,像睡著了一般。 火紅的嫁衣襯著肌膚如雪译株。 梳的紋絲不亂的頭發(fā)上瓜喇,一...
    開封第一講書人閱讀 51,443評論 1 302
  • 那天,我揣著相機與錄音歉糜,去河邊找鬼乘寒。 笑死,一個胖子當著我的面吹牛匪补,可吹牛的內容都是我干的伞辛。 我是一名探鬼主播,決...
    沈念sama閱讀 40,251評論 3 418
  • 文/蒼蘭香墨 我猛地睜開眼夯缺,長吁一口氣:“原來是場噩夢啊……” “哼蚤氏!你這毒婦竟也來了?” 一聲冷哼從身側響起踊兜,我...
    開封第一講書人閱讀 39,129評論 0 276
  • 序言:老撾萬榮一對情侶失蹤竿滨,失蹤者是張志新(化名)和其女友劉穎,沒想到半個月后捏境,有當地人在樹林里發(fā)現(xiàn)了一具尸體于游,經...
    沈念sama閱讀 45,561評論 1 314
  • 正文 獨居荒郊野嶺守林人離奇死亡,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內容為張勛視角 年9月15日...
    茶點故事閱讀 37,779評論 3 335
  • 正文 我和宋清朗相戀三年垫言,在試婚紗的時候發(fā)現(xiàn)自己被綠了贰剥。 大學時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片。...
    茶點故事閱讀 39,902評論 1 348
  • 序言:一個原本活蹦亂跳的男人離奇死亡骏掀,死狀恐怖鸠澈,靈堂內的尸體忽然破棺而出柱告,到底是詐尸還是另有隱情截驮,我是刑警寧澤,帶...
    沈念sama閱讀 35,621評論 5 345
  • 正文 年R本政府宣布际度,位于F島的核電站葵袭,受9級特大地震影響,放射性物質發(fā)生泄漏乖菱。R本人自食惡果不足惜坡锡,卻給世界環(huán)境...
    茶點故事閱讀 41,220評論 3 328
  • 文/蒙蒙 一、第九天 我趴在偏房一處隱蔽的房頂上張望窒所。 院中可真熱鬧鹉勒,春花似錦、人聲如沸吵取。這莊子的主人今日做“春日...
    開封第一講書人閱讀 31,838評論 0 22
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽。三九已至脯倒,卻和暖如春实辑,著一層夾襖步出監(jiān)牢的瞬間,已是汗流浹背藻丢。 一陣腳步聲響...
    開封第一講書人閱讀 32,971評論 1 269
  • 我被黑心中介騙來泰國打工剪撬, 沒想到剛下飛機就差點兒被人妖公主榨干…… 1. 我叫王不留,地道東北人悠反。 一個月前我還...
    沈念sama閱讀 48,025評論 2 370
  • 正文 我出身青樓残黑,卻偏偏與公主長得像,于是被迫代替她去往敵國和親斋否。 傳聞我的和親對象是個殘疾皇子萍摊,可洞房花燭夜當晚...
    茶點故事閱讀 44,843評論 2 354

推薦閱讀更多精彩內容