用html5的canvas生成图片并保存到后台

本文介绍了一个简单的网页版绘图应用实现方法,利用HTML5的Canvas元素进行绘图,并实现了基本的清除与保存功能。绘图通过监听鼠标移动事件完成,而保存功能则通过将Canvas的内容转换为PNG格式的Base64编码字符串并发送到后端进行。
摘要由CSDN通过智能技术生成





div#a{

width:1105px;
height:500px;
margin:0 auto;
border:0px solid;

}

<div id ="a">
<canvas id="canvas" width="1105" height="500"></canvas>
</div>
<div id="down">
<center>
<button οnclick="restuya()">清除</button>&nbsp;&nbsp;&nbsp;&nbsp;
<button οnclick="saveTu()" id="btn">保存</button>
</center>
</div>



<script type="text/javascript"> 
document.getElementById("btn").disabled=true;
// 获取 canvas 对象  
var canvas = document.getElementById('canvas');  
// 获取绘图环境  
var ctx = canvas.getContext('2d');  


var last = null;  


// 文件对象  
var filedata = null;  


// 鼠标按下  
canvas.onmousedown = function(){ 
    // 在鼠标按下后触发鼠标移动事件  
    canvas.onmousemove = move;  
    document.getElementById("btn").disabled=false;
}  


// 鼠标抬起取消鼠标移动的事件  
canvas.onmouseup = function(){  
    canvas.onmousemove = null;    
    last = null;  
}  


// 鼠标移出画布时 移动事件也要取消。  
canvas.onmouseout = function(){  
    canvas.onmousemove = null;  
    last = null;  
}  


// 鼠标移动函数  
function move(e){  
    // console.log(e.offsetX);  
    if(last != null){  
        ctx.beginPath();  
        ctx.moveTo(last[0],last[1]);  
        ctx.lineTo(e.offsetX,e.offsetY);  
        ctx.stroke();  
    }         
    // 第一次触发这个函数,只做一件事,把当前 鼠标的 x , y 的位置记录下来  
    // 做下一次 线段的 起始点。  
    last = [e.offsetX,e.offsetY];  


}  


// 重新在画  
function restuya(){  
document.getElementById("btn").disabled=true;
    ctx.clearRect(0,0,canvas.width,canvas.height);  
    drawImg(filedata);  
    
}  


// 绘制图片  
function drawImg(filedata){  


    var readFile = new FileReader();  


    readFile.readAsDataURL(filedata);  


    // 图片读取成功  
    readFile.onload = function(){  


        var Img = new Image();  
        Img.src = this.result;  


        Img.onload = function(){  
            // 根据 图片的 宽高 来 设置canvas 宽和高   
            canvas.width = Img.width;  
            canvas.height = Img.height;  
            ctx.drawImage(Img,0,0);  
        }  
    }  
}  


function saveTu(){
var saveImage = canvas.toDataURL('image/png');
var b64 = saveImage.substring(22);


$.ajax({
url: "http://localhost:8080/jiemian/saveImg",
type:'post',
data: { pp: b64},
success:function ()  
        {  
        alert('保存成功');  
        }  
});  
}



后台部分


public class savePictureServlet extends HttpServlet{


@Override
protected void doGet(HttpServletRequest req, HttpServletResponse resp)
throws ServletException, IOException {
doPost(req,resp);
}


@Override
protected void doPost(HttpServletRequest req, HttpServletResponse resp)
throws ServletException, IOException {


String imageDataUrl = req.getParameter("pp");
        BASE64Decoder decoder = new BASE64Decoder();    
        byte[] b = decoder.decodeBuffer(imageDataUrl);    
        ByteArrayInputStream bais = new ByteArrayInputStream(b);
        BufferedImage bi1 = ImageIO.read(bais);
        File w2 = new File("D://test.png");
        ImageIO.write(bi1, "png", w2);
}
}

评论 3
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值