console
var mouse = false
var lastPt = {}
var drawInfo = {
color: 'green',
size: 5
}
let colorInput = document.getElementById('myColor')
let sizeInput = document.getElementById('mySize')
let createBtn = document.getElementById('myPic')
colorInput.onchange = function (e) {
drawInfo.color = e.target.value
}
sizeInput.onchange = function (e) {
drawInfo.size = e.target.value
}
createBtn.onclick = () => {
onSave()
}
let canvas = document.getElementById('canvas')
let { clientWidth, clientHeight } = document.body
canvas.width = clientWidth
canvas.height = clientHeight
let ctx = canvas.getContext('2d')
if (window.PointerEvent) {
canvas.addEventListener('pointerdown', handleMouseDown, false)
canvas.addEventListener('pointermove', handleMouseMove, false)
canvas.addEventListener('pointerup', handleMouseUp, false)
} else {
canvas.addEventListener('mousedown', handleMouseDown, false)
canvas.addEventListener('mousemove', handleMouseMove, false)
canvas.addEventListener('mouseup', handleMouseUp, false)
}
function handleMouseDown(event) {
mouse = true
let { pageX, pageY } = event
ctx.beginPath()
ctx.moveTo(pageX, pageY)
}
function handleMouseMove(event) {
if (mouse) {
lastPt = {
x: event.pageX,
y: event.pageY
}
draw(lastPt)
}
}
function handleMouseUp(event) {
mouse = false
lastPt = {}
ctx.closePath()
}
function draw(info) {
let { x, y } = info
ctx.lineTo(x, y)
ctx.strokeStyle = drawInfo.color || 'green'
ctx.lineWidth = drawInfo.size || 3
ctx.stroke()
}
async function onSave() {
console.log(window.showSaveFilePicker)
let cont = converBase64ToBlob(canvas.toDataURL('image/png'))
if (window.showSaveFilePicker) {
const handle = await window.showSaveFilePicker({
suggestedName: "test.png",
types: [
{
description: "PNG file",
accept: {
"image/png": [".png"],
},
},
],
});
const writable = await handle.createWritable();
await writable.write(cont);
await writable.close();
return handle;
}else{
const a = document.createElement('a')
a.download = 'test.png'
a.href = URL.createObjectURL(cont)
console.log(102,a.href)
a.click()
URL.revokeObjectURL(a.href)
}
}
function converBase64ToBlob(base64) {
var base64 = base64.split(','),
imgtype = '',
base64String = ''
if (base64.length > 1) {
base64String = base64[1]
imgtype = base64[0].substring(base64[0].indexOf(':') + 1, base64[0].indexOf(';'))
}
var bytes = atob(base64String)
bytesCode = new ArrayBuffer(bytes.length),
byteArr = new Uint8Array(bytesCode)
for (let i = 0; i < bytes.length; i++) {
byteArr[i] = bytes.charCodeAt(i)
}
return new Blob([bytesCode], { type: imgtype })
}
<canvas class='canvas' id="canvas" ></canvas>
<div id="opt">
color : <input type="color" id="myColor" />
size : <input type="number" id="mySize" />
生成 : <button id ="myPic">生成</button>
</div>
html , body {
width: 100vw;
height: 100vh;
overflow:hidden;
}
.canvas{
width: 90vw;
height: 90vh;
border: 1px solid red;
}