Canvas - 海報(bào)繪制

以下例子是在H5端顯示,web端亦同.

html結(jié)構(gòu) :

<template>
  <div class="canvasWrap">
        /* 將其位置移出屏幕有效顯示處,能夠讓img標(biāo)簽特殊操作. */ 
    <canvas style="position: absolute;top:-1000px;" id="cjdCanvas"></canvas>
    <img :src="img_src" class="img" />
  </div>
</template>

css樣式 :

<style>
html,body {
  background-color: #ccc;
}
.canvasWrap {
  width: 100%;
  height: 100%;
  position: relative;
  display: flex;
  align-items: center;
  justify-content: center;
}
.canvasWrap .img {
  width: 7.5rem;
  height: 13.34rem;
}
</style>

具體的canvas文檔點(diǎn)擊這里查看.

 //我在這里就定義了一個(gè)繪制的函數(shù).

systemInfo() {
  const rem = this.getViewportSize().width / 375 / 2; //獲取手機(jī)屏幕大小 / 375的比值
  this.rem = rem;
},

startDraw() {
  const c = document.getElementById("cjdCanvas"), //找到該畫板的 id
    ctx = c.getContext("2d"),
    rem = this.rem; //這個(gè)是因需要不同屏幕的適配,定義方法在上方
    
    //繪制開始
    c.width = 750 * rem;
    c.height = 1334 * rem;
    // console.log(logo_img)
    ctx.drawImage(this.bg_img, 0 * rem, 0 * rem, 750 * rem, 1334 * rem);
    ctx.font = 48 * rem + "px Arial";
    ctx.fillStyle = "#FFFFFF";
    ctx.fillText(card.name + "的成績(jī)單", 38 * rem, 140 * rem);
    ...
    ctx.drawImage(this.logo_img, 505 * rem, 26 * rem, 190 * rem, 50 * rem);
    ...
    ctx.textAlign = "center";
    ctx.font = 40 * rem + "px Arial";
    ctx.fillStyle = "#fecd03";
    ...
    ctx.fillText(card.diff_des, 146 * rem, 861 * rem);
    //保存繪制 
    ctx.save();

    this.$nextTick(e => { //作用將回調(diào)延遲到下次 DOM 更新循環(huán)之后執(zhí)行
       this.img_src = c.toDataURL("image/jpeg", 1); //這就導(dǎo)出為 base64 格式.
    });
}

*注意: 遇到drawImage畫板當(dāng)中繪制圖片的時(shí)候,最好先新建一個(gè)image對(duì)象賦值,避免發(fā)生圖片不顯示等錯(cuò)誤.

download(){
    this.box_img = new Image();
    this.box_img.setAttribute("crossOrigin", "anonymous");
    this.box_img.src = "xxx";
}
最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時(shí)請(qǐng)結(jié)合常識(shí)與多方信息審慎甄別。
平臺(tái)聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點(diǎn),簡(jiǎn)書系信息發(fā)布平臺(tái),僅提供信息存儲(chǔ)服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

  • 第一部分 HTML&CSS整理答案 1. 什么是HTML5? 答:HTML5是最新的HTML標(biāo)準(zhǔn)。 注意:講述HT...
    kismetajun閱讀 28,826評(píng)論 1 45
  • 第一章 HTML5 (2014年10月29日發(fā)布)新特性: 10個(gè) (1)新的語義標(biāo)簽 (2)增強(qiáng)型表單 (3)視...
    fastwe閱讀 1,033評(píng)論 0 1
  • 一、canvas簡(jiǎn)介 1.1 什么是canvas?(了解) 是HTML5提供的一種新標(biāo)簽 Canvas是一個(gè)矩形區(qū)...
    J_L_L閱讀 1,694評(píng)論 0 4
  • H5 meta詳解 viewport width:控制 viewport 的大小,可以指定的一個(gè)值,如果 600,...
    FConfidence閱讀 891評(píng)論 0 3
  • 在現(xiàn)代生活中,哲學(xué)家差不多是世界上最受人尊崇,同時(shí)也最不受人注意的家伙,如果這么一個(gè)家伙真的存在著的話?!罢軐W(xué)家”...
    簡(jiǎn)書茶館葉老板閱讀 2,516評(píng)論 5 27

友情鏈接更多精彩內(nèi)容