canvas实现画板工具

花费大量时间(两周!!!!)制作了一款web端画图工具,可自由涂鸦、裁剪并移动裁剪区域位置、输入文字,包括橡皮擦、箭头工具、动作撤销/重做、保存,并通过websocket实现了画板内容同步,代码已分享,希望大家指正,同进步。

canvas实现画板工具

canvas实现画板工具

 前端代码见附件huaban_v3.rar,后端websocket关键代码如下:

package com.lfwer.pinche.web;

import java.util.Collections;
import java.util.HashSet;
import java.util.Set;
import javax.websocket.CloseReason;
import javax.websocket.EndpointConfig;
import javax.websocket.OnClose;
import javax.websocket.OnError;
import javax.websocket.OnMessage;
import javax.websocket.OnOpen;
import javax.websocket.Session;
import javax.websocket.server.ServerEndpoint;
import org.springframework.stereotype.Component;

@ServerEndpoint("/board")
@Component
public class BoardSocket {

	private static Set<Session> peers = Collections.synchronizedSet(new HashSet<Session>());

	private static StringBuffer str = new StringBuffer();


	/**
	 * 客户端有连接的时候就会调用这个方法
	 */
	@OnOpen
	public void open(Session session, EndpointConfig config) {
		peers.add(session);
	}

	/**
	 * 客户端连接断开就会调用此方法
	 */
	@OnClose
	public void close(Session session, CloseReason reason) {
		peers.remove(session);
	}

	/**
	 * 接收到客户端的信息
	 * 
	 * @param msg
	 * @param last
	 */
	@OnMessage
	public void message(Session session, boolean last, String msg) {
		if (!last) {
			str.append(msg);
		} else {
			str.append(msg);
			try {
				for (Session peer : peers) {
					if (!peer.equals(session)) {
						peer.getBasicRemote().sendText(str.toString());
					}
				}
			} catch (Exception e) {
				e.printStackTrace();
			}
			str = new StringBuffer();
		}

	}

	/**
	 * 错误监听(当没有关闭socket连接就关闭浏览器会异常)
	 */
	@OnError
	public void error(Session session, Throwable error) {
		String id = session.getId();
		System.out.println("出错的session的id是" + id);
	}

	public BoardSocket() {
		System.out.println("Socket对象创建");
		// 通过对象的创建可以知道不同socket之间的通信不会共享成员变量
	}

}