vue使用canvas簽名之清空和保存

效果

canvas畫板清空保存.gif

需求

在一些項目業(yè)務中撮竿,經(jīng)常會使用到畫板纤泵,讓用戶自己去寫/畫一些東西做標示骆姐,比如說在線簽電子合約镜粤、簽名等,在上兩篇博客中玻褪,已經(jīng)解決了PC端和移動端的Canvas簽名肉渴,那么在簽名完成之后,我們?nèi)绾螌嫴忌蠔|西保存带射,或者清空呢同规? 【本篇包含PC和移動端的簽名,以及清空和保存】

分析

在前兩篇中窟社,分辨實現(xiàn)了 PC端canvas簽名以及 移動端canvas簽名券勺,要是形成一個簡單且完整的功能點,我們起碼還缺少清空和保存兩個環(huán)節(jié)灿里。接下來分析一下关炼。

1. 清空

就是將此前所畫的所有筆畫清除掉,方法則是清空存放點集合的數(shù)組重新設置畫布寬高即可匣吊。另外一個方法盗扒,也可以使用 clearRect(),這個方法是清空畫布中一個矩形區(qū)域內(nèi)的內(nèi)容缀去。由于我們并為保存所有點集合,所以采用此方法清空甸祭。

1.1 關于clearRect

// clearRect() 方法清空給定矩形內(nèi)的指定像素缕碎。
context.clearRect(x,y,width,height);
參數(shù) 描述 舉例(全部清空)
x 要清除的矩形左上角的 x 坐標 0
y 要清除的矩形左上角的 y 坐標 0
width 要清除的矩形的寬度,以像素計 context.width
height 要清除的矩形的高度池户,以像素計 context.height

1.2 代碼示例

<el-button type="danger" @click="cleanCanvas">
    清空
</el-button>
mounted () {
    let board = this.$refs.board;   // 獲取DOM
    this.width = board.width = this.$refs.boardBox.offsetWidth;  // 設置畫布寬
    this.height = board.height = this.$refs.boardBox.offsetHeight;    // 設置畫布高
    ...     // something codes
}

// 清空畫布
cleanCanvas () {
    // clearRect() 方法清空給定矩形內(nèi)的指定像素咏雌。
    this.ctx.clearRect(
        0,
        0,
        this.width,
        this.height
    )
},

2. 保存

保存,需求簡單明了校焦,就是將canvas輸出為一張圖片赊抖。處理也簡單粗暴,直接將此區(qū)域輸出為一張base64的圖片即可寨典。方法是使用原生方法toDataURL()

2.1 關于toDataURL

HTMLCanvasElement.toDataURL() 方法返回一個包含圖片展示的 data URI 氛雪。可以使用 type 參數(shù)其類型耸成,默認為 PNG 格式报亩。圖片的分辨率為96dpi。

  • 如果畫布的高度或?qū)挾仁?井氢,那么會返回字符串“data:,”弦追。
  • 如果傳入的類型非“image/png”,但是返回的值以“data:image/png”開頭花竞,那么該傳入的類型是不支持的劲件。
  • Chrome支持“image/webp”類型。

方法
canvas.toDataURL(type, encoderOptions);
參數(shù)

  • type 可選
    圖片格式,默認為 image/png
  • encoderOptions 可選
    圖片質(zhì)量零远。取值范圍為 0 到 1 苗分。如果指定圖片格式為 image/jpeg 或 image/webp。如果超出取值范圍遍烦,將會使用默認值 0.92俭嘁。其他參數(shù)會被忽略。

返回值
包含 data URI 的DOMString服猪。

2.2 代碼示例

<el-button type="success" @click="saveCanvas">
    保存
</el-button>

<div>
    <img :src="base64" alt="">
</div>
data() {
    return {
        base64: '',
    }
}

// 保存簽名
saveCanvas () {
    this.base64 = this.$refs.board.toDataURL(); // 轉(zhuǎn)為base64
}

結(jié)語

關于canvas簽名的基本到這里就結(jié)束了供填,項目如果有遇到更復雜的再繼續(xù)更新。目前更新的有

  • PC端簽名方法
  • 移動端簽名方法
  • PC和移動端簽名方法以及清空和保存

想了解本期源碼的可以關注下公眾號流眸回復canvas或者簽名獲取哦~

公眾號二維碼.jpg

?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末罢猪,一起剝皮案震驚了整個濱河市近她,隨后出現(xiàn)的幾起案子,更是在濱河造成了極大的恐慌膳帕,老刑警劉巖粘捎,帶你破解...
    沈念sama閱讀 221,576評論 6 515
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件,死亡現(xiàn)場離奇詭異危彩,居然都是意外死亡攒磨,警方通過查閱死者的電腦和手機,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 94,515評論 3 399
  • 文/潘曉璐 我一進店門汤徽,熙熙樓的掌柜王于貴愁眉苦臉地迎上來娩缰,“玉大人,你說我怎么就攤上這事谒府∑纯玻” “怎么了?”我有些...
    開封第一講書人閱讀 168,017評論 0 360
  • 文/不壞的土叔 我叫張陵完疫,是天一觀的道長泰鸡。 經(jīng)常有香客問我,道長壳鹤,這世上最難降的妖魔是什么盛龄? 我笑而不...
    開封第一講書人閱讀 59,626評論 1 296
  • 正文 為了忘掉前任,我火速辦了婚禮芳誓,結(jié)果婚禮上讯嫂,老公的妹妹穿的比我還像新娘。我一直安慰自己兆沙,他們只是感情好欧芽,可當我...
    茶點故事閱讀 68,625評論 6 397
  • 文/花漫 我一把揭開白布。 她就那樣靜靜地躺著葛圃,像睡著了一般千扔。 火紅的嫁衣襯著肌膚如雪憎妙。 梳的紋絲不亂的頭發(fā)上,一...
    開封第一講書人閱讀 52,255評論 1 308
  • 那天曲楚,我揣著相機與錄音厘唾,去河邊找鬼。 笑死龙誊,一個胖子當著我的面吹牛抚垃,可吹牛的內(nèi)容都是我干的。 我是一名探鬼主播趟大,決...
    沈念sama閱讀 40,825評論 3 421
  • 文/蒼蘭香墨 我猛地睜開眼鹤树,長吁一口氣:“原來是場噩夢啊……” “哼!你這毒婦竟也來了逊朽?” 一聲冷哼從身側(cè)響起罕伯,我...
    開封第一講書人閱讀 39,729評論 0 276
  • 序言:老撾萬榮一對情侶失蹤,失蹤者是張志新(化名)和其女友劉穎叽讳,沒想到半個月后追他,有當?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體,經(jīng)...
    沈念sama閱讀 46,271評論 1 320
  • 正文 獨居荒郊野嶺守林人離奇死亡岛蚤,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點故事閱讀 38,363評論 3 340
  • 正文 我和宋清朗相戀三年邑狸,在試婚紗的時候發(fā)現(xiàn)自己被綠了。 大學時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片涤妒。...
    茶點故事閱讀 40,498評論 1 352
  • 序言:一個原本活蹦亂跳的男人離奇死亡单雾,死狀恐怖届腐,靈堂內(nèi)的尸體忽然破棺而出,到底是詐尸還是另有隱情,我是刑警寧澤,帶...
    沈念sama閱讀 36,183評論 5 350
  • 正文 年R本政府宣布期丰,位于F島的核電站群叶,受9級特大地震影響吃挑,放射性物質(zhì)發(fā)生泄漏街立。R本人自食惡果不足惜舶衬,卻給世界環(huán)境...
    茶點故事閱讀 41,867評論 3 333
  • 文/蒙蒙 一、第九天 我趴在偏房一處隱蔽的房頂上張望赎离。 院中可真熱鬧憾朴,春花似錦鸡岗、人聲如沸。這莊子的主人今日做“春日...
    開封第一講書人閱讀 32,338評論 0 24
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽吃沪。三九已至,卻和暖如春什猖,著一層夾襖步出監(jiān)牢的瞬間巷波,已是汗流浹背垮耳。 一陣腳步聲響...
    開封第一講書人閱讀 33,458評論 1 272
  • 我被黑心中介騙來泰國打工, 沒想到剛下飛機就差點兒被人妖公主榨干…… 1. 我叫王不留喝检,地道東北人。 一個月前我還...
    沈念sama閱讀 48,906評論 3 376
  • 正文 我出身青樓鱼辙,卻偏偏與公主長得像憋槐,于是被迫代替她去往敵國和親。 傳聞我的和親對象是個殘疾皇子淑趾,可洞房花燭夜當晚...
    茶點故事閱讀 45,507評論 2 359

推薦閱讀更多精彩內(nèi)容