1. 程式人生 > >canvas匯出為圖片並用JS下載

canvas匯出為圖片並用JS下載

<%@ page language="java" contentType="text/html; charset=UTF-8"
pageEncoding="UTF-8"%>
<!DOCTYPE html>
<html>
<head>
<meta charset="utf-8">
<title>DEMO6:自定義畫板</title>
</head>
<body>
<canvas id="canvas" width="600" height="300">
瀏覽器不支援canvas   <!-- 如果不支援會顯示這段文字 -->
</canvas>
<br/>
<button style="width:78px;background-color:yellow;" onclick='linecolor="yellow";'>黃</button>
<button style="width:78px ;background-color:red;" onclick='linecolor="red";'>紅</button>
<button style="width:78px ;background-color:blue;" onclick='linecolor="blue";'>藍</button>
<button style="width:78px ;background-color:green;" onclick='linecolor="green";'>綠</button>
<button style="width:78px ;background-color:white;" onclick='linecolor="white";'>白</button>
<button style="width:78px ;background-color:gray;" onclick='linecolor="gray";'>灰</button>
<button style="width:78px ;background-color:pink;" onclick='linecolor="pink";'>粉</button>
<br/>
<br/>
<button style="width: 80px;background-color: white;" onclick="linw=4;">細</button>
<button style="width: 80px;background-color: white;" onclick="linw=8;">中</button>
<button style="width: 80px;background-color: white;" onclick="linw=16;">粗</button>
&nbsp;&nbsp;&nbsp;&nbsp;
<button style="width: 80px;background-color: white;" onclick="copyimage();">預覽</button>
<button style="width: 80px;background-color: white;" onclick="downloadimage();">下載</button>
<br/>




<br/>
<img src="" id="image_png" width="600px" height="300px">
<br/>


<script type="text/javascript">
var canvas = document.getElementById('canvas');  //獲取標籤
var ctx = canvas.getContext("2d");  


var fillStyle = "black";
ctx.fillRect(0,0,600,300);
var onoff = false;  //按下標記
var oldx = -10;
var oldy = -10;
//設定顏色
var linecolor = "white";
var linw = 4;
canvas.addEventListener("mousemove",draw,true);  //滑鼠移動事件
canvas.addEventListener("mousedown",down,false);  //滑鼠按下事件
canvas.addEventListener("mouseup",up,false);  //滑鼠彈起事件
function down(event){
onoff = true;
oldx = event.pageX - 10;
oldy = event.pageY - 10;
}
function up(){
onoff = false;
}
function draw(event){
if (onoff==true) {
var newx = event.pageX - 10;
var newy = event.pageY - 10
ctx.beginPath();
ctx.moveTo(oldx,oldy);
ctx.lineTo(newx,newy);
ctx.strokeStyle = linecolor;
ctx.lineWidth = linw;
ctx.lineCap = "round";
ctx.stroke();


oldx = newx;
oldy = newy;
}
}
function copyimage(event)
{
var img_png_src = canvas.toDataURL("image/png");  //將畫板儲存為圖片格式的函式
document.getElementById("image_png").src = img_png_src;
}

function downloadimage(event)
{
// 圖片匯出為 png 格式
var type = 'png';
// 返回一個包含JPG圖片的<img>元素
var img_png_src = canvas.toDataURL("image/png");  //將畫板儲存為圖片格式的函式
// 加工image data,替換mime type
imgData = img_png_src.replace(_fixType(type),'image/octet-stream');
// 下載後的問題名
var filename = '個人畫板_' + (new Date()).getTime() + '.' + type;
// download
saveFile(imgData,filename);
}

/**
* 在本地進行檔案儲存
* @param  {String} data     要儲存到本地的圖片資料
* @param  {String} filename 檔名
*/
var saveFile = function(data, filename){
   var save_link = document.createElementNS('http://www.w3.org/1999/xhtml', 'a');
   save_link.href = data;
   save_link.download = filename;
  
   var event = document.createEvent('MouseEvents');
   event.initMouseEvent('click', true, false, window, 0, 0, 0, 0, 0, false, false, false, false, 0, null);
   save_link.dispatchEvent(event);
};

/**
* 獲取mimeType
* @param  {String} type the old mime-type
* @return the new mime-type
*/
var _fixType = function(type) {
   type = type.toLowerCase().replace(/jpg/i, 'jpeg');
   var r = type.match(/png|jpeg|bmp|gif/)[0];
   return 'image/' + r;
};
</script> 
</body>
</html>