<template>
<div>
<canvas id="canvas" width="166" height="166"></canvas>
</div>
<template>
export default {
data () {
return {
isColor: 'red',//印章顏色
checked: '', // 橫向文
checked1: '', // 下弦文
shape: 1, // 印章形狀(1.方形 2.圓形 )
sealType: '3', // 印章類型(1.公章 2.法人章 3.財務專屬章)
},
methods: {
//圓形印章
createSeal (id, company, name) {
let canvas = document.getElementById(id)
let context = canvas.getContext('2d')
// 繪畫邊框
let width = canvas.width / 2
let height = canvas.height / 2
context.lineWidth = 7
context.strokeStyle = this.isColor
context.beginPath()
context.arc(width, height, width - 7, 0, Math.PI * 2)
context.stroke()
// 畫五角星
create5star(context, width, height, 10, this.isColor, 0)
// 繪制印章名稱
context.font = '10px Helvetica'
context.textBaseline = 'middle'// 設置文本的垂直對齊方式
context.textAlign = 'center' // 設置文本的水平對對齊方式
context.lineWidth = 1
context.fillStyle = this.isColor
context.fillText(this.transverseWord, width, height + 40) // 繪畫文字(橫行文)
context.font = '8px Helvetica'
context.fillText(this.downWord, width, height + 60) // 繪畫文字(下弦文)
// 繪制印章單位
context.translate(width, height)// 平移到此位置,
context.font = '14px Helvetica'
let count = company.length// 字數
let angle = 4 * Math.PI / (3 * (count - 1))// 字間角度
let chars = company.split('')
let c
for (let i = 0; i < count; i++) {
c = chars[i]// 需要繪制的字符
if (i == 0) { context.rotate(5 * Math.PI / 6) } else { context.rotate(angle) }
context.save()
context.translate(60, 0)// 平移到此位置,此時字和x軸垂直
context.rotate(Math.PI / 2)// 旋轉90度,讓字平行于x軸
context.fillText(c, 0, 5)// 此點為字的中心點
context.restore()
}
// 繪制五角星
/**
* 創(chuàng)建一個五角星形狀. 該五角星的中心坐標為(sx,sy),中心到頂點的距離為radius,rotate=0時一個頂點在對 稱軸上
* rotate:繞對稱軸旋轉rotate弧度
*/
function create5star (context, sx, sy, radius, color, rotato) {
context.save()
context.fillStyle = color
context.translate(sx, sy)// 移動坐標原點
context.rotate(Math.PI + rotato)// 旋轉
context.beginPath()// 創(chuàng)建路徑
let x = Math.sin(0)
let y = Math.cos(0)
let dig = Math.PI / 5 * 4
for (let i = 0; i < 5; i++) { // 畫五角星的五條邊
let x = Math.sin(i * dig)
let y = Math.cos(i * dig)
context.lineTo(x * radius, y * radius)
// context.lineTo()
}
context.closePath()
context.stroke()
context.fill()
context.restore()
}
},
//方形印章
createSealSquare(){
// // 獲取畫布
let canvas = document.getElementById('canvas')
let context = canvas.getContext('2d')
let centerPoint = canvas.width / 2
// 名稱
let personName = sealData.sealCompany || '李四'
// 字體
let fontFamily = 'Helvetica'
// 顏色
let color = this.isColor
// 邊框線寬度
let personLineWidth = 4
// 字體大小
let personNameFontSize = 65
// 字與邊框的距離
let lineTextGap = 0
let leftTopPointX = 2.4 * (personNameFontSize + lineTextGap)
let leftTopPointY = (personNameFontSize + lineTextGap)
// 矩形寬高
let wide = 2 * (personNameFontSize + lineTextGap)
let high = 2 * (personNameFontSize + lineTextGap)
// 字體加粗
let fontWeight = 'bold'
let textPoint = personNameFontSize / 2
let length = personName.length
if (length < 2 || length > 4) {
alert('名稱只能為2~4個字符饥瓷!')
throw new RangeError('名稱只能為2~4個字符剥纷!')
}
if (typeof personName !== 'string') {
alert('只能是字符串!')
throw new TypeError('只能是字符串扛伍!')
}
switch (length) {
case 2:
personName += '之印'
break
case 3:
personName += '印'
break
}
context.save()
context.fillStyle = color
context.textBaseline = 'middle'
context.textAlign = 'center'
context.font = 'normal normal bold ' + personNameFontSize + 'px ' + fontFamily
context.translate(canvas.width / 2, canvas.width / 2)
context.fillText(personName.charAt(0), textPoint, -textPoint)
context.fillText(personName.charAt(1), textPoint, textPoint)
context.fillText(personName.charAt(2), -textPoint, -textPoint)
context.fillText(personName.charAt(3), -textPoint, textPoint)
context.restore()
// 繪制正方形
context.fillStyle = color
context.strokeStyle = this.isColor
context.lineWidth = 15
context.rect(0.5 * (canvas.width - 166), 0.5 * (canvas.height - 166), 166, 166)
context.stroke()
}筷畦,
// (方形印)
createSealSquareFinance (name) {
let canvas = document.getElementById('canvas')
let context = canvas.getContext('2d')
// 繪制正方形
context.lineWidth = 15
context.strokeStyle = this.isColor
context.strokeRect(0.5 * (canvas.width - 166), 0.5 * (canvas.height - 166), 166, 166)
// 繪制文字
context.fillStyle = this.isColor
context.textBaseline = 'middle'
context.textAlign = 'left'
context.font = 'normal normal bold 25px Helvetica'
context.translate(canvas.width / 2, canvas.width / 2)
context.fillText('財', -60, -45)
context.fillText('務', -60, -15)
context.fillText('專', -60, 15)
context.fillText('用', -60, 45)
context.font = 'normal normal bold 16px Helvetica'
context.translate(canvas.width / 2, canvas.width / 2)
let count = name.length// 字數
let y = -120
let x = -90
for (let i = 0; i < count; i++) {
if (x === -90) {
y = -120 + (i * 20)
} else if (x === -70) {
y = -120 + ((i - 5) * 20)
} else if (x === -50) {
y = -120 + ((i - 10) * 20)
} else if (x === -30) {
y = -120 + ((i - 15) * 20)
}
if (y === -20 && x === -90) { // 第一列的坐標
y = -120
x = -70
} else if (y === -20 && x === -70) { // 第二列的坐標
y = -120
x = -50
} else if (y === -20 && x === -50) { // 第三列的坐標
y = -120
x = -30
}
context.fillText(name[i], x, y)
}
},
}
canvas 在線制作圓形帐姻、方形稠集、印章
?著作權歸作者所有,轉載或內容合作請聯(lián)系作者
- 文/潘曉璐 我一進店門,熙熙樓的掌柜王于貴愁眉苦臉地迎上來抹剩,“玉大人撑帖,你說我怎么就攤上這事“木欤” “怎么了胡嘿?”我有些...
- 文/不壞的土叔 我叫張陵钳踊,是天一觀的道長衷敌。 經常有香客問我,道長拓瞪,這世上最難降的妖魔是什么缴罗? 我笑而不...
- 正文 為了忘掉前任,我火速辦了婚禮祭埂,結果婚禮上面氓,老公的妹妹穿的比我還像新娘。我一直安慰自己蛆橡,他們只是感情好舌界,可當我...
- 文/花漫 我一把揭開白布。 她就那樣靜靜地躺著航罗,像睡著了一般禀横。 火紅的嫁衣襯著肌膚如雪。 梳的紋絲不亂的頭發(fā)上粥血,一...
- 文/蒼蘭香墨 我猛地睜開眼,長吁一口氣:“原來是場噩夢啊……” “哼!你這毒婦竟也來了笤成?” 一聲冷哼從身側響起评架,我...
- 正文 年R本政府宣布廊宪,位于F島的核電站矾瘾,受9級特大地震影響,放射性物質發(fā)生泄漏箭启。R本人自食惡果不足惜壕翩,卻給世界環(huán)境...
- 文/蒙蒙 一、第九天 我趴在偏房一處隱蔽的房頂上張望傅寡。 院中可真熱鬧放妈,春花似錦、人聲如沸荐操。這莊子的主人今日做“春日...
- 文/蒼蘭香墨 我抬頭看了看天上的太陽托启。三九已至宅倒,卻和暖如春,著一層夾襖步出監(jiān)牢的瞬間屯耸,已是汗流浹背拐迁。 一陣腳步聲響...
推薦閱讀更多精彩內容
- 轉載自:https://www.cnblogs.com/jackduan/p/7827346.html[https...
- 有demo料仗,If you have any questions, please contact us by ema...
- var contex = wx.createCanvasContext('firstCanvas') var a...
- 因為最近在做分享功能,需要用戶的頭像在微信小程序中鹏溯,然后寫下其他文字罢维,如何在把正方形圖片放到canvas淹仑,導成圓角...