LiterallyCanvas是什么

Literally Canvas是一个可扩展的开源(BSD许可)HTML5绘图组件,可以用于网页中插入画图板,类似于windows自带的画图板。可以用可视化工具绘制图画,同时提供api完成相同的功能,也可以将结果导出。它依赖于React.js,所以很方便在react项目中使用。

特性

  • 基本的绘画工具
  • 编码自定义绘画工具
  • 平移和缩放
  • 背景图、水印
  • 支持Retina
  • 保存和加载 JSON
  • 输出图片到PNG或SVG
  • 丰富的API
  • 无缝接入React
  • 开源

快速上手

  1. 加载literallycanvas
  • 普通方式
<html>
<head>
<!-- 需要react -->
<script src="https://cdnjs.cloudflare.com/ajax/libs/react/0.14.7/react-with-addons.js"></script>
<script src="https://cdnjs.cloudflare.com/ajax/libs/react/0.14.7/react-dom.js"></script>
<!-- literallycanvas的js文件 -->
<script src="../_static/js/literallycanvas.js"></script>
<!-- literallycanvas的css文件 -->
<link href="../_static/css/literallycanvas.css" rel="stylesheet">
<title>literallycanvas-with-gui</title>
</head>
<body>
<div class="my-drawing"></div>
<script>
LC.init(
document.getElementsByClassName('my-drawing')[0],
{ imageURLPrefix: '../_static/img'}
);
</script>
</body>
</html>
  • react方式
import React, { PureComponent } from 'react'
import { LiterallyCanvasReactComponent } from 'literallycanvas'
import 'literallycanvas/lib/css/literallycanvas.css' export default class Exmaple1 extends PureComponent {
render() {
return (
<div className="App">
<LiterallyCanvasReactComponent imageURLPrefix="static/img" />
</div>
)
}
}

package.json


{
"name": "react_style_literally",
"version": "0.1.0",
"private": true,
"description": "目前版本0.4.13不支持react16以上,v5.0以上支持",
"dependencies": {
"react": "^15.6.0",
"react-dom": "^15.6.0",
"react-scripts": "1.1.4",
"react-router-dom": "^4.3.1",
"literallycanvas": "0.4.13"
},
"scripts": {
"start": "react-scripts start",
"build": "react-scripts build",
"test": "react-scripts test --env=jsdom",
"eject": "react-scripts eject"
}
}

(!!!官网方式不靠谱)

<html>
<head>
<!-- stylesheet -->
<link href="/static/css/literallycanvas.css" rel="stylesheet"> <!-- dependency: React.js -->
<script src="//cdnjs.cloudflare.com/ajax/libs/react/0.14.7/react-with-addons.js"></script>
<script src="//cdnjs.cloudflare.com/ajax/libs/react/0.14.7/react-dom.js"></script>
<script src="//cdnjs.cloudflare.com/ajax/libs/babel-core/5.8.23/browser.min.js"></script> <!-- Literally Canvas -->
<script src="/static/js/literallycanvas.js"></script>
</head>
<body>
<div id="root"></div> <script type="text/babel">
ReactDOM.render(
<div>
<LC.LiterallyCanvasReactComponent imageURLPrefix="/static/img" />
</div>,
document.getElementById('root'));
</script>
</body>
</html>
  1. 修改样式(修改画图板的宽高)
  • 宽度,可以通过修改父组件宽度来修改
  • 高度,原有样式为min-hight:400px,修改父组件不好使
.my-drawing {
/* 宽度可自定义 */
width: 1000px;
/* 高度无效 */
height: 600px;
} /* 覆盖literally样式 */
.my-drawing .literally {
height: 600px;
}
  1. 原理

两个canvas叠加,一个负责渲染背景内容,一个负责渲染涂画操作

API

  • init
  • shapes
  • snapshot
  • ...

示例代码

二次开发

  • 基于coffee-script开发(看不懂的,可以选择读lib目录下的js)
  • 打包

执行gulp命令生成新的lib/js/literallycanvas.js

  • 如果是基于react的修改,怎么办?
  1. 本地修改保持不变
  2. 自己打一个npm包
  3. 给该项目发起Pull Request

总结

  • 优点:
  1. 比其他开源画图工具功能更加强大,其他的只提供基本的图片展示、画笔、橡皮擦功能
  2. 无缝接入react项目
  3. 开源
  4. 可扩展,使用API
  5. 速度快
    github上满足批改后台需求的最合适项目
  • 缺点:
    1. 更新缓慢
    2. 配置文件不够细,不能满足某些需求
    3. 功能不满足:
      1)图片旋转
      2)文字添加后可移动位置

literallycanvas的简介的更多相关文章

  1. ASP.NET Core 1.1 简介

    ASP.NET Core 1.1 于2016年11月16日发布.这个版本包括许多伟大的新功能以及许多错误修复和一般的增强.这个版本包含了多个新的中间件组件.针对Windows的WebListener服 ...

  2. MVVM模式和在WPF中的实现(一)MVVM模式简介

    MVVM模式解析和在WPF中的实现(一) MVVM模式简介 系列目录: MVVM模式解析和在WPF中的实现(一)MVVM模式简介 MVVM模式解析和在WPF中的实现(二)数据绑定 MVVM模式解析和在 ...

  3. Cassandra简介

    在前面的一篇文章<图形数据库Neo4J简介>中,我们介绍了一种非常流行的图形数据库Neo4J的使用方法.而在本文中,我们将对另外一种类型的NoSQL数据库——Cassandra进行简单地介 ...

  4. REST简介

    一说到REST,我想大家的第一反应就是“啊,就是那种前后台通信方式.”但是在要求详细讲述它所提出的各个约束,以及如何开始搭建REST服务时,却很少有人能够清晰地说出它到底是什么,需要遵守什么样的准则. ...

  5. Microservice架构模式简介

    在2014年,Sam Newman,Martin Fowler在ThoughtWorks的一位同事,出版了一本新书<Building Microservices>.该书描述了如何按照Mic ...

  6. const,static,extern 简介

    const,static,extern 简介 一.const与宏的区别: const简介:之前常用的字符串常量,一般是抽成宏,但是苹果不推荐我们抽成宏,推荐我们使用const常量. 执行时刻:宏是预编 ...

  7. HTTPS简介

    一.简单总结 1.HTTPS概念总结 HTTPS 就是对HTTP进行了TLS或SSL加密. 应用层的HTTP协议通过传输层的TCP协议来传输,HTTPS 在 HTTP和 TCP中间加了一层TLS/SS ...

  8. 【Machine Learning】机器学习及其基础概念简介

    机器学习及其基础概念简介 作者:白宁超 2016年12月23日21:24:51 摘要:随着机器学习和深度学习的热潮,各种图书层出不穷.然而多数是基础理论知识介绍,缺乏实现的深入理解.本系列文章是作者结 ...

  9. Cesium简介以及离线部署运行

    Cesium简介 cesium是国外一个基于JavaScript编写的使用WebGL的地图引擎,一款开源3DGIS的js库.cesium支持3D,2D,2.5D形式的地图展示,可以自行绘制图形,高亮区 ...

随机推荐

  1. Hibernate系列之核心开发接口

    一.概述 所有的hibernate应用中都会访问5个核心接口,它们分别是: Configuration:配置hibernate,创建SessionFactory对象 SessionFactory:初始 ...

  2. 微信JSSDK支付接口-安卓机无法正常调起接口

    今天碰到个问题,是项目调起微信支付接口,苹果机都没有什么问题,但是安卓机的情况就是支付接口出现一下就消失了 试了将error反馈信息弹出来,也就是显示choosewxpay fail 找了半天不知道什 ...

  3. 今日Java——Cay Horstmann访谈

    这是本人在InfoQ中文站审校的文章,原文链接是:http://www.infoq.com/cn/articles/java_cay_horstmann,感觉内容很不错,分享给大家看看. 近日Info ...

  4. OGG 3节点级联时 关键参数

    目标架构为: node1-> node2->node3 node1-> node2 已经同步中,只是需要在此基础上做个node2 ->node3 的同步. 部署后发现 node ...

  5. powerDesigner根据sql脚本来逆向生成pdm等模型

    一.问题概述 网上一般的博文都是说要建立数据源的方式来逆向或者正向. 我这人比较懒得折腾,更喜欢通过sql脚本的方式来做. 二.步骤 File-->New Model--> 然后: 注意上 ...

  6. ldap 配置过程详解

    ldap常用名称解释 1.环境搭建 操作系统:centos6.5 x86_64关闭防火墙.selinux开启时间同步# crontab -e加入# time sync*/5 * * * * /usr/ ...

  7. C# 未能加载文件或程序集“xxx”或它的某一个依赖项。参数错误。(异常来自 HRESULT:0x80070057 (E_INVALIDARG))

    错误信息: 因为电脑突然蓝屏,然后重启,再运行项目,报了这个错. 解决方案: 环境是:VS2012+Win7 通过网上查找, 4.0 删除 C:\Windows\Microsoft.NET\Frame ...

  8. Java Agent初探——动态修改代码

    用了一下午总算把java agent给跑通了,本篇文章记录一下具体的操作步骤,以免遗忘... 通过java agent可以动态修改代码(替换.修改类的定义),进行AOP. 目标: ? 1 为所有添加@ ...

  9. Android 使用MediaPlayer 播放 视频

    http://pan.baidu.com/s/1lgKLS package cn.bgxt.surfaceviewdemo; import java.io.File; import android.m ...

  10. quartz 任务时间调度入门使用

    这一小节主要是针对cronschedule用法进行讨论,首先讲一下cronschedule基础知识点: 一个cronschedule至少有6个字符(或者7个字符),空格作为间隔,比如 0 * * * ...