├── .gitignore
├── CSS
└── main.css
├── Code
├── About.htm
├── Help.htm
├── SelectImg.html
└── readme.txt
├── Images
├── 1.png
├── 2.png
├── files
│ ├── a.jpg
│ ├── b.jpg
│ ├── bird.png
│ ├── c.jpg
│ ├── desk_005.jpg
│ ├── star.jpg
│ └── win.jpg
├── log.ico
└── tools
│ ├── Alpha.png
│ ├── Clone.png
│ ├── Curve.png
│ ├── Ellipse.png
│ ├── Eraser.png
│ ├── Fill.png
│ ├── Gradient.png
│ ├── Hand.png
│ ├── Lasso.png
│ ├── Line.png
│ ├── Move.png
│ ├── OtherShap.png
│ ├── PaintBrush.png
│ ├── Pencil.png
│ ├── Polygon.png
│ ├── Rectangle.png
│ ├── Select.png
│ ├── SelectCut.png
│ ├── Text.png
│ ├── Triangle.png
│ ├── ZoomAll.png
│ └── ZoomMiro.png
├── JScript
├── CodeJS
│ ├── changeTheme.js
│ ├── fullscreen.js
│ ├── keypressEvent.js
│ ├── main.js
│ └── readme.txt
├── Mousetrap
│ ├── mousetrap.min.js
│ └── test.html
├── RulersGuides
│ ├── Dragdrop.js
│ ├── Event.js
│ └── RulersGuides.js
├── jpicker-1.1.6
│ ├── css
│ │ └── jPicker-1.1.6.css
│ ├── images
│ │ ├── AlphaBar.png
│ │ ├── Bars.png
│ │ ├── Maps.png
│ │ ├── NoColor.png
│ │ ├── bar-opacity.png
│ │ ├── close.bmp
│ │ ├── map-opacity.png
│ │ ├── mappoint.gif
│ │ ├── picker.gif
│ │ ├── preview-opacity.png
│ │ └── rangearrows.gif
│ ├── jPicker.css
│ └── jpicker-1.1.6.js
├── jquery-1.7.2.min.js
└── jquery-easyui
│ ├── easyloader.js
│ ├── easyui-lang-zh_CN.js
│ ├── jquery.easyui.min.js
│ └── themes
│ ├── bootstrap
│ ├── easyui.css
│ └── images
│ │ ├── accordion_arrows.png
│ │ ├── blank.gif
│ │ ├── calendar_arrows.png
│ │ ├── combo_arrow.png
│ │ ├── datagrid_icons.png
│ │ ├── datebox_arrow.png
│ │ ├── layout_arrows.png
│ │ ├── linkbutton_bg.png
│ │ ├── loading.gif
│ │ ├── menu_arrows.png
│ │ ├── messager_icons.png
│ │ ├── pagination_icons.png
│ │ ├── panel_tools.png
│ │ ├── searchbox_button.png
│ │ ├── slider_handle.png
│ │ ├── spinner_arrows.png
│ │ ├── tabs_icons.png
│ │ ├── tree_icons.png
│ │ └── validatebox_warning.png
│ ├── default
│ ├── easyui.css
│ ├── images
│ │ ├── accordion_arrows.png
│ │ ├── blank.gif
│ │ ├── calendar_arrows.png
│ │ ├── combo_arrow.png
│ │ ├── datagrid_icons.png
│ │ ├── datebox_arrow.png
│ │ ├── layout_arrows.png
│ │ ├── linkbutton_bg.png
│ │ ├── loading.gif
│ │ ├── menu_arrows.png
│ │ ├── messager_icons.png
│ │ ├── pagination_icons.png
│ │ ├── panel_tools.png
│ │ ├── searchbox_button.png
│ │ ├── slider_handle.png
│ │ ├── spinner_arrows.png
│ │ ├── tabs_icons.png
│ │ ├── tree_icons.png
│ │ └── validatebox_warning.png
│ └── 副本 easyui.css
│ ├── icon.css
│ ├── icons
│ ├── about.png
│ ├── autolevel.png
│ ├── back.png
│ ├── background.png
│ ├── blackwhite.png
│ ├── blank.gif
│ ├── blur.png
│ ├── bootstrap.png
│ ├── cancel.png
│ ├── canvassize.png
│ ├── clear.png
│ ├── closeall.png
│ ├── cloud.png
│ ├── colorpalettes.png
│ ├── communite.png
│ ├── copy.png
│ ├── copylevel.png
│ ├── curve.png
│ ├── cut.png
│ ├── default.png
│ ├── downlevel.png
│ ├── edit_add.png
│ ├── edit_remove.png
│ ├── filesave.png
│ ├── filter.png
│ ├── float.png
│ ├── fromCam.png
│ ├── fullscreen.png
│ ├── getimg.png
│ ├── grid.png
│ ├── help.png
│ ├── helpsite.png
│ ├── history.png
│ ├── horizonrotate.png
│ ├── imgindex.png
│ ├── imgsize.png
│ ├── inputcc.png
│ ├── layer.png
│ ├── level.png
│ ├── levelinfo.png
│ ├── light.png
│ ├── log.png
│ ├── metro-blue.png
│ ├── metro-green.png
│ ├── metro-red.png
│ ├── mini_add.png
│ ├── mini_edit.png
│ ├── mini_refresh.png
│ ├── new.png
│ ├── newlevel.png
│ ├── no.png
│ ├── ok.png
│ ├── open.png
│ ├── opsitecolor.png
│ ├── option.png
│ ├── painting.png
│ ├── paste.png
│ ├── print.png
│ ├── redo.png
│ ├── redoall.png
│ ├── reload.png
│ ├── reset.png
│ ├── rotate180.png
│ ├── rotatee90.png
│ ├── rotatew90.png
│ ├── ruler.png
│ ├── saveall.png
│ ├── saveas.png
│ ├── search.png
│ ├── searchimg.png
│ ├── selectall.png
│ ├── send.png
│ ├── sharpen.png
│ ├── soft.png
│ ├── state.png
│ ├── sum.png
│ ├── tailor.png
│ ├── tip.png
│ ├── tools.png
│ ├── turnblue.png
│ ├── turngreen.png
│ ├── turnold.png
│ ├── turnred.png
│ ├── undo.png
│ ├── undoall.png
│ ├── uplevel.png
│ ├── verticalrotate.png
│ ├── wood.png
│ ├── zoomin.png
│ └── zoomout.png
│ ├── metro-blue
│ ├── easyui.css
│ ├── images
│ │ ├── accordion_arrows.png
│ │ ├── blank.gif
│ │ ├── calendar_arrows.png
│ │ ├── combo_arrow.png
│ │ ├── datagrid_icons.png
│ │ ├── datebox_arrow.png
│ │ ├── layout_arrows.png
│ │ ├── linkbutton_bg.png
│ │ ├── loading.gif
│ │ ├── menu_arrows.png
│ │ ├── messager_icons.png
│ │ ├── pagination_icons.png
│ │ ├── panel_tools.png
│ │ ├── searchbox_button.png
│ │ ├── slider_handle.png
│ │ ├── spinner_arrows.png
│ │ ├── tabs_icons.png
│ │ ├── tree_icons.png
│ │ └── validatebox_warning.png
│ └── 副本 easyui.css
│ ├── metro-green
│ ├── easyui.css
│ └── images
│ │ ├── accordion_arrows.png
│ │ ├── blank.gif
│ │ ├── calendar_arrows.png
│ │ ├── combo_arrow.png
│ │ ├── datagrid_icons.png
│ │ ├── datebox_arrow.png
│ │ ├── layout_arrows.png
│ │ ├── linkbutton_bg.png
│ │ ├── loading.gif
│ │ ├── menu_arrows.png
│ │ ├── messager_icons.png
│ │ ├── pagination_icons.png
│ │ ├── panel_tools.png
│ │ ├── searchbox_button.png
│ │ ├── slider_handle.png
│ │ ├── spinner_arrows.png
│ │ ├── tabs_icons.png
│ │ ├── tree_icons.png
│ │ └── validatebox_warning.png
│ └── metro-red
│ ├── easyui.css
│ └── images
│ ├── accordion_arrows.png
│ ├── blank.gif
│ ├── calendar_arrows.png
│ ├── combo_arrow.png
│ ├── datagrid_icons.png
│ ├── datebox_arrow.png
│ ├── layout_arrows.png
│ ├── linkbutton_bg.png
│ ├── loading.gif
│ ├── menu_arrows.png
│ ├── messager_icons.png
│ ├── pagination_icons.png
│ ├── panel_tools.png
│ ├── searchbox_button.png
│ ├── slider_handle.png
│ ├── spinner_arrows.png
│ ├── tabs_icons.png
│ ├── tree_icons.png
│ └── validatebox_warning.png
├── License
├── README.md
├── docker
├── Dockerfile
└── docker_build.sh
└── index.html
/.gitignore:
--------------------------------------------------------------------------------
1 | .DS_Store
2 | node_modules/
3 | /dist/
4 | npm-debug.log*
5 | yarn-debug.log*
6 | yarn-error.log*
7 |
8 | # Editor directories and files
9 | .idea
10 | .vscode
11 | *.suo
12 | *.ntvs*
13 | *.njsproj
14 | *.sln
15 |
16 | #############################################
17 | # Maven.gitignore global
18 | #############################################
19 | target/
20 | pom.xml.tag
21 | pom.xml.releaseBackup
22 | pom.xml.versionsBackup
23 | pom.xml.next
24 | release.properties
25 | dependency-reduced-pom.xml
26 | buildNumber.properties
27 | .mvn/timing.properties
28 | # https://github.com/takari/maven-wrapper#usage-without-binary-jar
29 | .mvn/wrapper/maven-wrapper.jar
30 |
31 | #############################################
32 | # JetBrains.gitignore global
33 | #############################################
34 |
35 | # User-specific stuff
36 | .idea/**/workspace.xml
37 | .idea/**/tasks.xml
38 | .idea/**/usage.statistics.xml
39 | .idea/**/dictionaries
40 | .idea/**/shelf
41 |
42 | # Generated files
43 | .idea/**/contentModel.xml
44 |
45 | # Sensitive or high-churn files
46 | .idea/**/dataSources/
47 | .idea/**/dataSources.ids
48 | .idea/**/dataSources.local.xml
49 | .idea/**/sqlDataSources.xml
50 | .idea/**/dynamic.xml
51 | .idea/**/uiDesigner.xml
52 | .idea/**/dbnavigator.xml
53 |
54 | # Gradle
55 | .idea/**/gradle.xml
56 | .idea/**/libraries
57 |
58 | # Gradle and Maven with auto-import
59 | # When using Gradle or Maven with auto-import, you should exclude module files,
60 | # since they will be recreated, and may cause churn. Uncomment if using
61 | auto-import.
62 | .idea/modules.xml
63 | .idea/*.iml
64 | .idea/modules
65 | .iml
66 | .ipr
67 |
68 | # CMake
69 | cmake-build-*/
70 |
71 | # Mongo Explorer plugin
72 | .idea/**/mongoSettings.xml
73 |
74 | # File-based project format
75 | *.iws
76 |
77 | # IntelliJ
78 | out/
79 | .idea/
80 | *.iml
81 |
82 | # mpeltonen/sbt-idea plugin
83 | .idea_modules/
84 |
85 | # JIRA plugin
86 | atlassian-ide-plugin.xml
87 |
88 | # Cursive Clojure plugin
89 | .idea/replstate.xml
90 |
91 | # Crashlytics plugin (for Android Studio and IntelliJ)
92 | com_crashlytics_export_strings.xml
93 | crashlytics.properties
94 | crashlytics-build.properties
95 | fabric.properties
96 |
97 | # Editor-based Rest Client
98 | .idea/httpRequests
99 |
100 | # Android studio 3.1+ serialized cache file
101 | .idea/caches/build_file_checksums.ser
102 |
103 | #############################################
104 | # Eclipse.gitignore global
105 | #############################################
106 | .metadata
107 | bin/
108 | tmp/
109 | *.tmp
110 | *.bak
111 | *.swp
112 | *~.nib
113 | local.properties
114 | .settings/
115 | .loadpath
116 | .recommenders
117 |
118 | # External tool builders
119 | .externalToolBuilders/
120 |
121 | # Locally stored "Eclipse launch configurations"
122 | *.launch
123 |
124 | # PyDev specific (Python IDE for Eclipse)
125 | *.pydevproject
126 |
127 | # CDT-specific (C/C++ Development Tooling)
128 | .cproject
129 |
130 | # CDT- autotools
131 | .autotools
132 |
133 | # Java annotation processor (APT)
134 | .factorypath
135 |
136 | # PDT-specific (PHP Development Tools)
137 | .buildpath
138 |
139 | # sbteclipse plugin
140 | .target
141 |
142 | # Tern plugin
143 | .tern-project
144 |
145 | # TeXlipse plugin
146 | .texlipse
147 |
148 | # STS (Spring Tool Suite)
149 | .springBeans
150 |
151 | # Code Recommenders
152 | .recommenders/
153 |
154 | # Annotation Processing
155 | .apt_generated/
156 | .apt_generated_test/
157 |
158 | # Scala IDE specific (Scala & Java development for Eclipse)
159 | .cache-main
160 | .scala_dependencies
161 | .worksheet
162 |
163 | #############################################
164 | # java project.gitignore local
165 | #############################################
166 |
167 | # Compiled class file
168 | *.class
169 |
170 | # Log file
171 | *.log
172 |
173 | # BlueJ files
174 | *.ctxt
175 |
176 | # Mobile Tools for Java (J2ME)
177 | .mtj.tmp/
178 |
179 | # Package Files #
180 | *.jar
181 | *.war
182 | *.nar
183 | *.ear
184 | *.zip
185 | *.tar.gz
186 | *.rar
187 | *.tar
188 |
189 | # virtual machine crash logs, see http://www.java.com/en/download/help/error_hotspot.xml
190 | hs_err_pid*
191 |
192 | /docker/web/*
193 |
--------------------------------------------------------------------------------
/CSS/main.css:
--------------------------------------------------------------------------------
1 |
2 | /*Main.aspx的样式*/
3 | body, div, dl, dt, dd, ul, ol, li, h1, h2, h3, h4, h5, h6, pre, form, fieldset, p, blockquote
4 | {
5 | margin: 0;
6 | padding: 0;
7 | }
8 |
9 | *
10 | {
11 | font-family: "微软雅黑";
12 | font-size: 13px;
13 | }
14 |
15 | h2
16 | {
17 | font-size: 18px;
18 | font-weight: bold;
19 | margin: 0;
20 | margin-bottom: 15px;
21 | }
22 |
23 | .demo-info
24 | {
25 | background: #FFFEE6;
26 | color: #8F5700;
27 | padding: 12px;
28 | }
29 |
30 | .demo-tip
31 | {
32 | width: 16px;
33 | height: 16px;
34 | margin-right: 8px;
35 | float: left;
36 | }
37 |
38 | /*----------------------------工具箱-----------------------------
39 | *2014-6-4
40 | */
41 | #tools a
42 | {
43 | width: 20px;
44 | height: 20px;
45 | border: 1px solid #95B8E7;
46 | margin: 3px;
47 | }
48 |
49 | /*begin--------------------菜单下面的选项区------------------------
50 | *2014-6-4
51 | *yf
52 | */
53 | #alloption
54 | {
55 | position: absolute;
56 | margin-top: 8px;
57 | }
58 |
59 | #alloption li
60 | {
61 | float: left;
62 | list-style: none;
63 | }
64 |
65 | #alloption li select, #penwidthshow, #alphashow, #ptpenBlurShow
66 | {
67 | width: 50px;
68 | }
69 |
70 |
71 | /*end--------------------菜单下面的选项区------------------------*/
72 |
73 | /*html原始的输入框*/
74 | .txtInputStyle
75 | {
76 | border: 1px solid #95B8E7;
77 | }
78 |
79 | /*画布阴影效果及样式*/
80 | .drawWindow
81 | {
82 | background-color: White;
83 | margin: 5px auto 0 auto;
84 | border: 1px solid #95B8E7;
85 | -moz-box-shadow: 3px 3px 4px #95B8E7;
86 | -webkit-box-shadow: 3px 3px 4px #95B8E7;
87 | box-shadow: 3px 3px 4px #95B8E7;
88 | }
89 |
90 | /*begin------------------画布--------------------------------------
91 | */
92 | #showcanvas /*最终展示画布在最外层*/
93 | {
94 | z-index: 2;
95 | border: 1px solid gray;
96 | cursor: crosshair;
97 | }
98 |
99 | #tempcanvas /*临时画布在内层*/
100 | {
101 | z-index: 1;
102 | background-color: White;
103 | border: 1px solid gray;
104 | cursor: crosshair;
105 | }
106 |
107 | #gridcanvas
108 | { /*网格画布*/
109 | cursor: crosshair;
110 | }
111 |
112 | .drawWindow canvas
113 | {
114 | position: absolute;
115 | }
116 |
117 | .newCanvas
118 | { /*新增的图层*/
119 | border: 1px solid gray;
120 | cursor: crosshair;
121 | }
122 | /*end------------------画布------------------------------------
123 |
124 | /*协同处理下的表情*/
125 | #mnfaces img:hover, #mnfacesgrp img:hover
126 | {
127 | border: 1px solid #083C86;
128 | }
129 |
130 | /*快捷键样式*/
131 | .quickevent
132 | {
133 | margin-left: 50px;
134 | }
135 |
136 | /*快捷键效果处理样式*/
137 | .quickeventeffect
138 | {
139 | margin-left: 20px;
140 | }
141 |
--------------------------------------------------------------------------------
/Code/About.htm:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 | 关于WebPhotoshop
5 |
12 |
13 |
14 |
15 |

16 |
WebPhotoshop
17 |
18 |
19 |
20 |
WebPhotoshop
21 |
版本:1.0(精简版)
22 |
发表日期:2015-05-01
23 |
Copyright © Tim
24 |
25 |
26 |
27 |
28 |
29 |
30 |
31 |
32 |
33 |
34 |
--------------------------------------------------------------------------------
/Code/Help.htm:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 | WebPhotoshop帮助文档
5 |
10 |
11 |
12 |
13 | WebPhotoshop帮助文档
14 |
15 |
16 | WebPhotoshop,是利用HTML5技术在Web上实现对图形图像的处理,同时实现实时的多人协作处理图形图像技术,构建易维护、易共享、易于拓展、实时性的Web图形图像处理平台。
17 | 功能主要包括:图形绘制、图像处理、图像操作、多人协作操作图像、实时交流、图片搜索。
18 |
19 | 一、功能说明:
20 | 1、图形绘制
21 | 实现铅笔、画笔(书法画笔、喷枪、蜡笔、记号笔、水彩画笔)的绘制效果。实现直线、曲线、椭圆(圆)、矩形(圆角矩形)、三角形(直角三角形、等边三角形、任意三角形)、多边形的绘制。绘制过程中,可以选择颜色,选择颜色有两种方式:颜色选择、颜色拾取。可以进行颜色填充,即对选定区域,用选择的颜色进行填充。
22 | 2、图像处理
23 | 能够实现的效果有:黑白、模糊、亮度/透明度、反色、雾化、锐化、浮雕、雕刻、柔化、油画、积木、怀旧、蒙版,蒙版包括:红色蒙版、蓝色蒙版、绿色蒙版。
24 | 3、图像操作
25 | 能够对图像进行的操作有:图像选择,包括区域选择、对象选择。图像移动,即对选择区域或对象的移动。图像裁剪,包括矩形裁剪(保留裁剪区内、保留裁剪区外)。图像的旋转,即将画布或者选择的区域对象向右90度、向左90度、180度、垂直旋转、水平旋转、任意度数。橡皮擦效果,能够擦除绘制的图像。图像的缩小放大,包括图像的局部缩放和图像的整体缩放。插入文本,即在图像上插入文本,能够改变文本颜色、字体、大小,实现加粗、倾斜、下划线、删除线效果。将图像保存为图片。将图像存到服务器。将图像另存为其他格式。图像保存为下次可以再进行编辑的自定义格式。能够实现多图层,即添加图层、删除图层、图层层次改变。
26 | 4、多人协作操作图像
27 | 实现多人在线协同绘制、处理图像。
28 | 5、实时交流
29 | 在多人协同处理图像的过程中,参与协同操作的成员,能够进行文本交流,即发送和接收文字、表情、图片,语音交流,视频交流,发送截图,抖动窗口,发送文件和接收文件。还可以请求对方位置及地图上显示。交流过程中,可以建立组,进行群交流。
30 | 6、图片搜索
31 | 搜索服务器上的图片,点击图片后,则可以进行图片的编辑。
32 | 二、操作流程:
33 | 1) 进入系统后,显示主工作区,包括菜单栏、选项栏、工具箱、主画板、历史记录、图层管理。
34 | 2) 默认为铅笔,可以在主工作区画图。可以选择颜色等属性。
35 | 3) 打开图片,进行图片编辑。
36 | 4) 点击登录,进入在线协作,选择加入组,或者新建组。
37 |
38 |
39 |
--------------------------------------------------------------------------------
/Code/SelectImg.html:
--------------------------------------------------------------------------------
1 |
5 |
6 |
7 |
8 | 图片选择
9 |
11 |
12 |
13 |
14 |
15 |
16 |
17 |
55 |
56 |
57 |
58 |
59 |
60 | 选择图片:
61 |
62 |
63 |
64 |
65 |
66 |
67 | 
68 |
69 |
70 | a.jpg
71 |
72 | |
73 |
74 |
75 | 
76 |
77 |
78 | b.jpg
79 |
80 | |
81 |
82 |
83 | 
84 |
85 |
86 | c.jpg
87 |
88 | |
89 |
90 |
91 | 
92 |
93 |
94 | b.jpg
95 |
96 | |
97 |
98 |
99 | 
100 |
101 |
102 | star.jpg
103 |
104 | |
105 |
106 |
107 | 
108 |
109 |
110 | bird.jpg
111 |
112 | |
113 |
114 |
115 | 
116 |
117 |
118 | win.jpg
119 |
120 | |
121 |
122 |
123 |
124 |
125 | 图片名:
126 |
127 |
确定 取消
129 |
130 |
131 |
132 |
133 |
163 |
164 |
--------------------------------------------------------------------------------
/Code/readme.txt:
--------------------------------------------------------------------------------
1 | 存放前端开发代码
--------------------------------------------------------------------------------
/Images/1.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/leanfish2011/WebPhotoshop-Simple/e8cae581f756e96d14566f55bef71ba9790e93e2/Images/1.png
--------------------------------------------------------------------------------
/Images/2.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/leanfish2011/WebPhotoshop-Simple/e8cae581f756e96d14566f55bef71ba9790e93e2/Images/2.png
--------------------------------------------------------------------------------
/Images/files/a.jpg:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/leanfish2011/WebPhotoshop-Simple/e8cae581f756e96d14566f55bef71ba9790e93e2/Images/files/a.jpg
--------------------------------------------------------------------------------
/Images/files/b.jpg:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/leanfish2011/WebPhotoshop-Simple/e8cae581f756e96d14566f55bef71ba9790e93e2/Images/files/b.jpg
--------------------------------------------------------------------------------
/Images/files/bird.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/leanfish2011/WebPhotoshop-Simple/e8cae581f756e96d14566f55bef71ba9790e93e2/Images/files/bird.png
--------------------------------------------------------------------------------
/Images/files/c.jpg:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/leanfish2011/WebPhotoshop-Simple/e8cae581f756e96d14566f55bef71ba9790e93e2/Images/files/c.jpg
--------------------------------------------------------------------------------
/Images/files/desk_005.jpg:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/leanfish2011/WebPhotoshop-Simple/e8cae581f756e96d14566f55bef71ba9790e93e2/Images/files/desk_005.jpg
--------------------------------------------------------------------------------
/Images/files/star.jpg:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/leanfish2011/WebPhotoshop-Simple/e8cae581f756e96d14566f55bef71ba9790e93e2/Images/files/star.jpg
--------------------------------------------------------------------------------
/Images/files/win.jpg:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/leanfish2011/WebPhotoshop-Simple/e8cae581f756e96d14566f55bef71ba9790e93e2/Images/files/win.jpg
--------------------------------------------------------------------------------
/Images/log.ico:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/leanfish2011/WebPhotoshop-Simple/e8cae581f756e96d14566f55bef71ba9790e93e2/Images/log.ico
--------------------------------------------------------------------------------
/Images/tools/Alpha.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/leanfish2011/WebPhotoshop-Simple/e8cae581f756e96d14566f55bef71ba9790e93e2/Images/tools/Alpha.png
--------------------------------------------------------------------------------
/Images/tools/Clone.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/leanfish2011/WebPhotoshop-Simple/e8cae581f756e96d14566f55bef71ba9790e93e2/Images/tools/Clone.png
--------------------------------------------------------------------------------
/Images/tools/Curve.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/leanfish2011/WebPhotoshop-Simple/e8cae581f756e96d14566f55bef71ba9790e93e2/Images/tools/Curve.png
--------------------------------------------------------------------------------
/Images/tools/Ellipse.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/leanfish2011/WebPhotoshop-Simple/e8cae581f756e96d14566f55bef71ba9790e93e2/Images/tools/Ellipse.png
--------------------------------------------------------------------------------
/Images/tools/Eraser.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/leanfish2011/WebPhotoshop-Simple/e8cae581f756e96d14566f55bef71ba9790e93e2/Images/tools/Eraser.png
--------------------------------------------------------------------------------
/Images/tools/Fill.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/leanfish2011/WebPhotoshop-Simple/e8cae581f756e96d14566f55bef71ba9790e93e2/Images/tools/Fill.png
--------------------------------------------------------------------------------
/Images/tools/Gradient.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/leanfish2011/WebPhotoshop-Simple/e8cae581f756e96d14566f55bef71ba9790e93e2/Images/tools/Gradient.png
--------------------------------------------------------------------------------
/Images/tools/Hand.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/leanfish2011/WebPhotoshop-Simple/e8cae581f756e96d14566f55bef71ba9790e93e2/Images/tools/Hand.png
--------------------------------------------------------------------------------
/Images/tools/Lasso.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/leanfish2011/WebPhotoshop-Simple/e8cae581f756e96d14566f55bef71ba9790e93e2/Images/tools/Lasso.png
--------------------------------------------------------------------------------
/Images/tools/Line.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/leanfish2011/WebPhotoshop-Simple/e8cae581f756e96d14566f55bef71ba9790e93e2/Images/tools/Line.png
--------------------------------------------------------------------------------
/Images/tools/Move.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/leanfish2011/WebPhotoshop-Simple/e8cae581f756e96d14566f55bef71ba9790e93e2/Images/tools/Move.png
--------------------------------------------------------------------------------
/Images/tools/OtherShap.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/leanfish2011/WebPhotoshop-Simple/e8cae581f756e96d14566f55bef71ba9790e93e2/Images/tools/OtherShap.png
--------------------------------------------------------------------------------
/Images/tools/PaintBrush.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/leanfish2011/WebPhotoshop-Simple/e8cae581f756e96d14566f55bef71ba9790e93e2/Images/tools/PaintBrush.png
--------------------------------------------------------------------------------
/Images/tools/Pencil.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/leanfish2011/WebPhotoshop-Simple/e8cae581f756e96d14566f55bef71ba9790e93e2/Images/tools/Pencil.png
--------------------------------------------------------------------------------
/Images/tools/Polygon.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/leanfish2011/WebPhotoshop-Simple/e8cae581f756e96d14566f55bef71ba9790e93e2/Images/tools/Polygon.png
--------------------------------------------------------------------------------
/Images/tools/Rectangle.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/leanfish2011/WebPhotoshop-Simple/e8cae581f756e96d14566f55bef71ba9790e93e2/Images/tools/Rectangle.png
--------------------------------------------------------------------------------
/Images/tools/Select.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/leanfish2011/WebPhotoshop-Simple/e8cae581f756e96d14566f55bef71ba9790e93e2/Images/tools/Select.png
--------------------------------------------------------------------------------
/Images/tools/SelectCut.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/leanfish2011/WebPhotoshop-Simple/e8cae581f756e96d14566f55bef71ba9790e93e2/Images/tools/SelectCut.png
--------------------------------------------------------------------------------
/Images/tools/Text.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/leanfish2011/WebPhotoshop-Simple/e8cae581f756e96d14566f55bef71ba9790e93e2/Images/tools/Text.png
--------------------------------------------------------------------------------
/Images/tools/Triangle.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/leanfish2011/WebPhotoshop-Simple/e8cae581f756e96d14566f55bef71ba9790e93e2/Images/tools/Triangle.png
--------------------------------------------------------------------------------
/Images/tools/ZoomAll.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/leanfish2011/WebPhotoshop-Simple/e8cae581f756e96d14566f55bef71ba9790e93e2/Images/tools/ZoomAll.png
--------------------------------------------------------------------------------
/Images/tools/ZoomMiro.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/leanfish2011/WebPhotoshop-Simple/e8cae581f756e96d14566f55bef71ba9790e93e2/Images/tools/ZoomMiro.png
--------------------------------------------------------------------------------
/JScript/CodeJS/changeTheme.js:
--------------------------------------------------------------------------------
1 | //#region 更换皮肤
2 |
3 | //更换皮肤
4 | function onChangeTheme(theme) {
5 | switch (theme) {
6 | case 'default':
7 | //该项为选中状态
8 | $('#default').css("background-color", "#C9D3E2");
9 | //其他为非选中状态
10 | $('#bootstrap').css("background-color", "");
11 | $('#metro-blue').css("background-color", "");
12 | $('#metro-green').css("background-color", "");
13 | $('#metro-red').css("background-color", "");
14 | break;
15 | case 'bootstrap':
16 | //该项为选中状态
17 | $('#bootstrap').css("background-color", "#C9D3E2");
18 | //其他为非选中状态
19 | $('#default').css("background-color", "");
20 | $('#metro-blue').css("background-color", "");
21 | $('#metro-green').css("background-color", "");
22 | $('#metro-red').css("background-color", "");
23 | break;
24 | case 'metro-blue':
25 | //该项为选中状态
26 | $('#metro-blue').css("background-color", "#C9D3E2");
27 | //其他为非选中状态
28 | $('#bootstrap').css("background-color", "");
29 | $('#default').css("background-color", "");
30 | $('#metro-green').css("background-color", "");
31 | $('#metro-red').css("background-color", "");
32 | break;
33 | case 'metro-green':
34 | //该项为选中状态
35 | $('#metro-green').css("background-color", "#C9D3E2");
36 | //其他为非选中状态
37 | $('#bootstrap').css("background-color", "");
38 | $('#metro-blue').css("background-color", "");
39 | $('#default').css("background-color", "");
40 | $('#metro-red').css("background-color", "");
41 | break;
42 | case 'metro-red':
43 | //该项为选中状态
44 | $('#metro-red').css("background-color", "#C9D3E2");
45 | //其他为非选中状态
46 | $('#bootstrap').css("background-color", "");
47 | $('#metro-blue').css("background-color", "");
48 | $('#metro-green').css("background-color", "");
49 | $('#default').css("background-color", "");
50 | break;
51 | }
52 | //更换皮肤
53 | var link = $('#content').find('link:first');
54 | link.attr('href', 'JScript/jquery-easyui/themes/' + theme + '/easyui.css');
55 | }
56 |
57 | //#endregion
58 |
--------------------------------------------------------------------------------
/JScript/CodeJS/fullscreen.js:
--------------------------------------------------------------------------------
1 | /*
2 | * 全屏切换,在Chrome下支持
3 | * 2015-1-28,北京
4 | */
5 | function fullscreen() {
6 | var body = document.body;
7 | var status = !document.fullscreenElement && // get the screen status
8 | !document.msFullscreenElement &&
9 | !document.mozFullscreenElement &&
10 | !document.webkitFullscreenElement;
11 |
12 | if (status) {
13 | if (body.requestFullscreen) {
14 | body.requestFullscreen();
15 | } else if (body.mozRequestFullscreen) {
16 | body.mozRequestFullscreen();
17 | } else if (body.webkitRequestFullscreen) {
18 | body.webkitRequestFullscreen();
19 | } else if (body.msRequestFullscreen) {
20 | //body.msRequestFUllscreen();
21 | }
22 | } else {
23 | if (document.exitFullscreen) {
24 | document.exitFullscreen();
25 | } else if (document.mozExitFullscreen) {
26 | document.mozExitFullscreen();
27 | } else if (document.webkitExitFullscreen) {
28 | document.webkitExitFullscreen();
29 | } else if (document.msExitFullscreen) {
30 | document.msExitFullscreen();
31 | }
32 | }
33 | }
34 |
--------------------------------------------------------------------------------
/JScript/CodeJS/keypressEvent.js:
--------------------------------------------------------------------------------
1 | //键盘快捷键
2 |
3 | //文件菜单
4 | Mousetrap.bind('alt+f', function (e) {
5 | if (e.preventDefault) {
6 | e.preventDefault();
7 | } else {
8 | // internet explorer
9 | e.returnValue = false;
10 | //e.cancel = true;
11 | }
12 | alert("123");
13 | //$("#menumnFile").hover();
14 |
15 | //$("#menumnFile").addClass("menu-active");
16 |
17 | });
18 |
19 | //#region 文件
20 |
21 | //打开
22 | Mousetrap.bind('ctrl+g', function (e) {
23 | fileOpen();
24 | });
25 |
26 | //获取
27 | Mousetrap.bind('ctrl+m', function (e) {
28 | imgFromCamera();
29 | });
30 |
31 | //#endregion
32 |
33 | //#region 编辑
34 |
35 | //撤销
36 | Mousetrap.bind('ctrl+z', function (e) {
37 | undo();
38 | });
39 |
40 | //重做
41 | Mousetrap.bind('ctrl+y', function (e) {
42 | redo();
43 | });
44 |
45 | //清空
46 | Mousetrap.bind('ctrl+q', function (e) {
47 | $.messager.confirm('确定', '确定清空当前画布?', function (r) {
48 | if (r) {
49 | reset();
50 | }
51 | });
52 | });
53 |
54 | //#endregion
55 |
56 | //#region 效果
57 |
58 | //黑白
59 | Mousetrap.bind('ctrl+shift+w', function (e) {
60 | tobalckwhite();
61 | });
62 |
63 | //反色
64 | Mousetrap.bind('ctrl+shift+i', function (e) {
65 | inverse();
66 | });
67 |
68 | //模糊
69 | Mousetrap.bind('ctrl+shift+b', function (e) {
70 | blur();
71 | });
72 |
73 | //雾化
74 | Mousetrap.bind('ctrl+shift+m', function (e) {
75 | wuhuaView();
76 | });
77 |
78 | //锐化
79 | Mousetrap.bind('ctrl+shift+s', function (e) {
80 | sharpen();
81 | });
82 |
83 | //浮雕
84 | Mousetrap.bind('ctrl+shift+f', function (e) {
85 | selaFloat();
86 | });
87 |
88 | //柔化
89 | Mousetrap.bind('ctrl+shift+t', function (e) {
90 | conslateSoft();
91 | });
92 |
93 | //油画
94 | Mousetrap.bind('ctrl+shift+p', function (e) {
95 | conslatepainting();
96 | });
97 |
98 | //积木
99 | Mousetrap.bind('ctrl+shift+d', function (e) {
100 | conslatewood();
101 | });
102 |
103 | //雕刻
104 | Mousetrap.bind('ctrl+shift+v', function (e) {
105 | diaokeView();
106 | });
107 |
108 | //怀旧
109 | Mousetrap.bind('ctrl+shift+o', function (e) {
110 | turnOld();
111 | });
112 |
113 | //红色蒙版
114 | Mousetrap.bind('ctrl+shift+r', function (e) {
115 | turnRed();
116 | });
117 |
118 | //绿色蒙版
119 | Mousetrap.bind('ctrl+shift+g', function (e) {
120 | turnGreen();
121 | });
122 |
123 | //蓝色蒙版
124 | Mousetrap.bind('ctrl+shift+b', function (e) {
125 | turnBlue();
126 | });
127 |
128 | //#endregion
129 |
130 | //#region工具箱
131 |
132 | //选择工具
133 | Mousetrap.bind('s', function (e) {
134 | $("#btnSelect").click();
135 | });
136 |
137 | //移动工具
138 | Mousetrap.bind('m', function (e) {
139 | $("#btnMove").click();
140 | });
141 |
142 | //套索工具
143 | Mousetrap.bind('a', function (e) {
144 | $("#btnLasso").click();
145 | });
146 |
147 | //缩放工具
148 | Mousetrap.bind('z', function (e) {
149 | $("#btnZoomAll").click();
150 | });
151 |
152 | //手抓工具
153 | Mousetrap.bind('h', function (e) {
154 | $("#btnHand").click();
155 | });
156 |
157 | //填充工具
158 | Mousetrap.bind('f', function (e) {
159 | $("#btnFill").click();
160 | });
161 |
162 | //渐变工具
163 | Mousetrap.bind('n', function (e) {
164 | $("#btnGradient").click();
165 | });
166 |
167 | //画笔
168 | Mousetrap.bind('b', function (e) {
169 | $("#btnPaintBrush").click();
170 | });
171 |
172 | //铅笔
173 | Mousetrap.bind('p', function (e) {
174 | $("#btnPaintBrush").click();
175 | });
176 |
177 | //橡皮擦
178 | Mousetrap.bind('e', function (e) {
179 | $("#btnEraser").click();
180 | });
181 |
182 | //放大镜
183 | Mousetrap.bind('o', function (e) {
184 | $("#btnZoomMiro").click();
185 | });
186 |
187 | //裁剪
188 | Mousetrap.bind('c', function (e) {
189 | $("#btnSelectCut").click();
190 | });
191 |
192 | //文本
193 | Mousetrap.bind('t', function (e) {
194 | $("#btnText").click();
195 | });
196 |
197 | //直线
198 | Mousetrap.bind('l', function (e) {
199 | $("#btnLine").click();
200 | });
201 |
202 | //曲线
203 | Mousetrap.bind('v', function (e) {
204 | $("#btnCurve").click();
205 | });
206 |
207 | //矩形
208 | Mousetrap.bind('r', function (e) {
209 | $("#btnRectangle").click();
210 | });
211 |
212 | //椭圆
213 | Mousetrap.bind('i', function (e) {
214 | $("#btnEllipse").click();
215 | });
216 |
217 | //三角形
218 | Mousetrap.bind('g', function (e) {
219 | $("#btnTriangle").click();
220 | });
221 |
222 | //多边形
223 | Mousetrap.bind('y', function (e) {
224 | $("#btnPolygon").click();
225 | });
226 |
227 | //其他形状
228 | Mousetrap.bind('w', function (e) {
229 | $("#btnOtherShap").click();
230 | });
231 |
232 | //图章
233 | Mousetrap.bind('x', function (e) {
234 | $("#btnClone").click();
235 | });
236 |
237 | //透明度
238 | Mousetrap.bind('d', function (e) {
239 | $("#btnAlpha").click();
240 | });
241 |
242 | //#endregion
243 |
244 | //#region视图
245 |
246 | //放大
247 | Mousetrap.bind('ctrl+up', function (e) {
248 | transforms.zoomin();
249 | });
250 |
251 | //缩小
252 | Mousetrap.bind('ctrl+down', function (e) {
253 | transforms.zoomout();
254 | });
255 |
256 | //#endregion
257 |
258 | //#region
259 |
260 | //帮助文档
261 | Mousetrap.bind('ctrl+f1', function (e) {
262 | window.open("Help.htm");
263 | });
264 |
265 | //#endregion
266 |
267 |
--------------------------------------------------------------------------------
/JScript/CodeJS/readme.txt:
--------------------------------------------------------------------------------
1 | 存放程序的JS代码
--------------------------------------------------------------------------------
/JScript/Mousetrap/mousetrap.min.js:
--------------------------------------------------------------------------------
1 | /* mousetrap v1.4.6 craig.is/killing/mice */
2 | (function(J,r,f){function s(a,b,d){a.addEventListener?a.addEventListener(b,d,!1):a.attachEvent("on"+b,d)}function A(a){if("keypress"==a.type){var b=String.fromCharCode(a.which);a.shiftKey||(b=b.toLowerCase());return b}return h[a.which]?h[a.which]:B[a.which]?B[a.which]:String.fromCharCode(a.which).toLowerCase()}function t(a){a=a||{};var b=!1,d;for(d in n)a[d]?b=!0:n[d]=0;b||(u=!1)}function C(a,b,d,c,e,v){var g,k,f=[],h=d.type;if(!l[a])return[];"keyup"==h&&w(a)&&(b=[a]);for(g=0;gg||h.hasOwnProperty(g)&&(p[h[g]]=g)}e=p[d]?"keydown":"keypress"}"keypress"==e&&f.length&&(e="keydown");return{key:c,modifiers:f,action:e}}function F(a,b,d,c,e){q[a+":"+d]=b;a=a.replace(/\s+/g," ");var f=a.split(" ");1":".","?":"/","|":"\\"},G={option:"alt",command:"meta","return":"enter",escape:"esc",mod:/Mac|iPod|iPhone|iPad/.test(navigator.platform)?"meta":"ctrl"},p,l={},q={},n={},D,z=!1,I=!1,u=!1;for(f=1;20>f;++f)h[111+f]="f"+f;for(f=0;9>=f;++f)h[f+96]=f;s(r,"keypress",y);s(r,"keydown",y);s(r,"keyup",y);var m={bind:function(a,b,d){a=a instanceof Array?a:[a];for(var c=0;c
8 | */
9 | var Event = function () {
10 | "use strict";
11 | this.attach = function (evtName, element, listener, capture) {
12 | var evt = '',
13 | useCapture = (capture === undefined) ? true : capture,
14 | handler = null;
15 |
16 | if (window.addEventListener === undefined) {
17 | evt = 'on' + evtName;
18 | handler = function (evt, listener) {
19 | element.attachEvent(evt, listener);
20 | return listener;
21 | };
22 | } else {
23 | evt = evtName;
24 | handler = function (evt, listener, useCapture) {
25 | element.addEventListener(evt, listener, useCapture);
26 | return listener;
27 | };
28 | }
29 |
30 | return handler.apply(element, [evt, function (ev) {
31 | var e = ev || event,
32 | src = e.srcElement || e.target;
33 |
34 | listener(e, src);
35 | }, useCapture]);
36 | };
37 |
38 | this.detach = function (evtName, element, listener, capture) {
39 | var evt = '',
40 | useCapture = (capture === undefined) ? true : capture;
41 |
42 | if (window.removeEventListener === undefined) {
43 | evt = 'on' + evtName;
44 | element.detachEvent(evt, listener);
45 | } else {
46 | evt = evtName;
47 | element.removeEventListener(evt, listener, useCapture);
48 | }
49 | };
50 |
51 | this.stop = function (evt) {
52 | evt.cancelBubble = true;
53 |
54 | if (evt.stopPropagation) {
55 | evt.stopPropagation();
56 | }
57 | };
58 |
59 | this.prevent = function (evt) {
60 | if (evt.preventDefault) {
61 | evt.preventDefault();
62 | } else {
63 | evt.returnValue = false;
64 | }
65 | };
66 | };
--------------------------------------------------------------------------------
/JScript/RulersGuides/RulersGuides.js:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/leanfish2011/WebPhotoshop-Simple/e8cae581f756e96d14566f55bef71ba9790e93e2/JScript/RulersGuides/RulersGuides.js
--------------------------------------------------------------------------------
/JScript/jpicker-1.1.6/css/jPicker-1.1.6.css:
--------------------------------------------------------------------------------
1 |
2 |
3 | .jPicker .Icon
4 | {
5 | display: inline-block;
6 | height: 50px; /* change this value if using a different sized color picker icon */
7 | position: relative; /* make this element an absolute positioning container */
8 | text-align: left; /* make the zero width children position to the left of container */
9 | width: 68px; /* change this value if using a different sized color picker icon */
10 | border: 1px solid #41D0F4;
11 | padding: 0 1px 0 1px; /* border radius */
12 | -moz-border-radius: 8px;
13 | -khtml-border-radius: 8px;
14 | -webkit-border-radius: 8px;
15 | border-radius: 8px;
16 | margin-top: 2px;
17 | }
18 | .jPicker .Icon span.Color, .jPicker .Icon span.Alpha
19 | {
20 | background-position: 2px 2px;
21 | display: block;
22 | height: 100%;
23 | left: 0px;
24 | position: absolute;
25 | top: 0px;
26 | width: 100%;
27 | -moz-border-radius: 8px;
28 | -khtml-border-radius: 8px;
29 | -webkit-border-radius: 8px;
30 | border-radius: 8px;
31 | }
32 | .jPicker .Icon span.Image
33 | {
34 | background-repeat: no-repeat;
35 | cursor: pointer;
36 | display: block;
37 | height: 100%;
38 | left: 0px;
39 | position: absolute;
40 | top: 0px;
41 | width: 100%;
42 | }
43 | .jPicker.Container
44 | {
45 | color: #000;
46 | z-index: 10;
47 | }
48 | table.jPicker
49 | {
50 | background-color: #efefef;
51 | border: 1px outset #95B8E7;
52 | font-family: Arial, Helvetica, Sans-Serif;
53 | font-size: 12px !important;
54 | margin: 0px;
55 | width: 545px;
56 | z-index: 20;
57 | box-shadow: 5px 5px 5px rgba(0, 0, 0, 0.5); /* border radius */
58 | -moz-border-radius: 5px;
59 | -khtml-border-radius: 5px;
60 | -webkit-border-radius: 5px;
61 | border-radius: 5px;
62 | }
63 | .jPicker .Move
64 | {
65 | background-color: #ECF3FF;
66 | border:1px solid #95B8E7;
67 | cursor: move;
68 | height: 13px;
69 | text-align: left;
70 | color: #0E2D5F;
71 | font-size: 13px;
72 | }
73 | .jPicker .Move .Close
74 | {
75 | float: right;
76 | cursor: default;
77 | }
78 |
79 | .jPicker .Move .Close:hover
80 | {
81 | border: 1px solid #59B4D4;
82 | -moz-border-radius: 5px;
83 | -khtml-border-radius: 5px;
84 | -webkit-border-radius: 5px;
85 | border-radius: 5px;
86 | }
87 |
88 | .jPicker .Title
89 | {
90 | font-size: 10px !important;
91 | margin: -2px 0px 0px 0px;
92 | padding: 10px 0px 0px 0px;
93 | text-align: center;
94 | width: 100%;
95 | }
96 | .jPicker div.Map
97 | {
98 | border-bottom: 2px solid #fff;
99 | border-left: 2px solid #9a9a9a;
100 | border-right: 2px solid #fff;
101 | border-top: 2px solid #9a9a9a;
102 | cursor: crosshair;
103 | height: 260px; /* IE 6 incorrectly draws border inside the width and height instead of outside - We will fix this to 256px later */
104 | margin: 0px 10px 10px 10px;
105 | overflow: hidden; /* hide the overdraw of the Color Map icon when at edge of viewing box */
106 | padding: 0px;
107 | position: relative; /* make this element an absolute positioning container */
108 | width: 260px; /* IE 6 incorrectly draws border inside the width and height instead of outside - We will fix this to 256px later */
109 | }
110 | .jPicker div[class="Map"]
111 | {
112 | height: 256px; /* correct to 256px for browsers that support the "[class="xxx"]" selector (IE7+,Firefox,Safari,Chrome,Opera,etc.) */
113 | width: 256px; /* correct to 256px for browsers that support the "[class="xxx"]" selector (IE7+,Firefox,Safari,Chrome,Opera,etc.) */
114 | }
115 | .jPicker div.Bar
116 | {
117 | border-bottom: 2px solid #fff;
118 | border-left: 2px solid #9a9a9a;
119 | border-right: 2px solid #fff;
120 | border-top: 2px solid #9a9a9a;
121 | cursor: n-resize;
122 | height: 260px; /* IE 6 incorrectly draws border inside the width and height instead of outside - We will fix this to 256px later */
123 | margin: 12px 10px 0px 5px;
124 | overflow: hidden;
125 | padding: 0px;
126 | position: relative;
127 | width: 24px; /* IE 6 incorrectly draws border inside the width and height instead of outside - We will fix this to 20px later */
128 | }
129 | .jPicker div[class="Bar"]
130 | {
131 | height: 256px; /* correct to 256px for browsers that support the "[class="xxx"]" selector (IE7+,Firefox,Safari,Chrome,Opera,etc.) */
132 | width: 20px; /* correct to 20px for browsers that support the "[class="xxx"]" selector (IE7+,Firefox,Safari,Chrome,Opera,etc.) */
133 | }
134 | .jPicker .Map .Map1, .jPicker .Map .Map2, .jPicker .Map .Map3, .jPicker .Bar .Map1, .jPicker .Bar .Map2, .jPicker .Bar .Map3, .jPicker .Bar .Map4, .jPicker .Bar .Map5, .jPicker .Bar .Map6
135 | {
136 | background-color: transparent;
137 | background-image: none;
138 | display: block;
139 | left: 0px;
140 | position: absolute;
141 | top: 0px;
142 | }
143 | .jPicker .Map .Map1, .jPicker .Map .Map2, .jPicker .Map .Map3
144 | {
145 | height: 2596px;
146 | width: 256px; /* must specify pixel width. IE7/8 Quirks mode ignores opacity for an absolutely positioned item in a relative container with "overflow: visible". The marker in the colorBar would not be drawn if its overflow is set to hidden. */
147 | }
148 | .jPicker .Bar .Map1, .jPicker .Bar .Map2, .jPicker .Bar .Map3, .jPicker .Bar .Map4
149 | {
150 | height: 3896px;
151 | width: 20px; /* must specify pixel width. IE7/8 Quirks mode ignores opacity for an absolutely positioned item in a relative container with "overflow: visible". The marker in the colorBar would not be drawn if its overflow is set to hidden. */
152 | }
153 | .jPicker .Bar .Map5, .jPicker .Bar .Map6
154 | {
155 | height: 256px;
156 | width: 20px; /* must specify pixel width. IE7/8 Quirks mode ignores opacity for an absolutely positioned item in a relative container with "overflow: visible". The marker in the colorBar would not be drawn if its overflow is set to hidden. */
157 | }
158 | .jPicker .Map .Map1, .jPicker .Map .Map2, .jPicker .Bar .Map6
159 | {
160 | background-repeat: no-repeat;
161 | }
162 | .jPicker .Map .Map3, .jPicker .Bar .Map5
163 | {
164 | background-repeat: repeat;
165 | }
166 | .jPicker .Bar .Map1, .jPicker .Bar .Map2, .jPicker .Bar .Map3, .jPicker .Bar .Map4
167 | {
168 | background-repeat: repeat-x;
169 | }
170 | .jPicker .Map .Arrow
171 | {
172 | display: block;
173 | position: absolute;
174 | }
175 | .jPicker .Bar .Arrow
176 | {
177 | display: block;
178 | left: 0px; /* (arrow width / 2) - (element width / 2) - position arrows' center in elements' center */
179 | position: absolute;
180 | }
181 | .jPicker .Preview
182 | {
183 | font-size: 9px;
184 | padding: 5px 0px 0px 0px;
185 | text-align: center;
186 | }
187 | .jPicker .Preview div
188 | {
189 | border: 2px inset #eee;
190 | height: 62px;
191 | margin: 0px auto;
192 | padding: 0px;
193 | width: 62px;
194 | }
195 | .jPicker .Preview div span
196 | {
197 | border: 1px solid #000;
198 | display: block;
199 | height: 30px;
200 | margin: 0px auto;
201 | padding: 0px;
202 | width: 60px;
203 | }
204 | .jPicker .Preview .Active
205 | {
206 | border-bottom-width: 0px;
207 | }
208 | .jPicker .Preview .Current
209 | {
210 | border-top-width: 0px;
211 | cursor: pointer;
212 | }
213 | .jPicker input
214 | {
215 | font-size: 13px;
216 | }
217 | .jPicker .Button
218 | {
219 | text-align: center;
220 | padding: 0px 4px;
221 | width: 115px;
222 | }
223 | .jPicker .Button input
224 | {
225 | padding: 2px 0px;
226 | width: 100px;
227 | }
228 | .jPicker .Button .Ok
229 | {
230 | margin: 12px 0px 5px 0px;
231 | }
232 | .jPicker td
233 | {
234 | margin: 0px;
235 | padding: 0px;
236 | }
237 | .jPicker td.Radio
238 | {
239 | margin: 0px;
240 | padding: 0px;
241 | width: 31px;
242 | }
243 | .jPicker td.Radio input
244 | {
245 | margin: 0px 5px 0px 0px;
246 | padding: 0px;
247 | }
248 | .jPicker td.Text
249 | {
250 | font-size: 12px !important;
251 | height: 22px;
252 | margin: 0px;
253 | padding: 0px;
254 | text-align: left;
255 | width: 70px;
256 | }
257 | .jPicker tr.Hex td.Text
258 | {
259 | width: 100px;
260 | }
261 | .jPicker td.Text input
262 | {
263 | background-color: #fff;
264 | border: 1px inset #aaa;
265 | height: 19px;
266 | margin: 0px 0px 0px 5px;
267 | text-align: left;
268 | width: 30px;
269 | }
270 | .jPicker td[class="Text"] input
271 | {
272 | height: 15px;
273 | }
274 | .jPicker tr.Hex td.Text input.Hex
275 | {
276 | width: 50px;
277 | }
278 | .jPicker tr.Hex td.Text input.AHex
279 | {
280 | width: 20px;
281 | }
282 | .jPicker .Grid
283 | {
284 | text-align: center;
285 | width: 114px;
286 | }
287 | .jPicker .Grid span.QuickColor
288 | {
289 | border: 1px inset #aaa;
290 | cursor: pointer;
291 | display: inline-block;
292 | height: 15px;
293 | line-height: 15px;
294 | margin: 0px;
295 | padding: 0px;
296 | width: 19px;
297 | }
298 | .jPicker .Grid span[class="QuickColor"]
299 | {
300 | width: 17px;
301 | }
302 |
--------------------------------------------------------------------------------
/JScript/jpicker-1.1.6/images/AlphaBar.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/leanfish2011/WebPhotoshop-Simple/e8cae581f756e96d14566f55bef71ba9790e93e2/JScript/jpicker-1.1.6/images/AlphaBar.png
--------------------------------------------------------------------------------
/JScript/jpicker-1.1.6/images/Bars.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/leanfish2011/WebPhotoshop-Simple/e8cae581f756e96d14566f55bef71ba9790e93e2/JScript/jpicker-1.1.6/images/Bars.png
--------------------------------------------------------------------------------
/JScript/jpicker-1.1.6/images/Maps.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/leanfish2011/WebPhotoshop-Simple/e8cae581f756e96d14566f55bef71ba9790e93e2/JScript/jpicker-1.1.6/images/Maps.png
--------------------------------------------------------------------------------
/JScript/jpicker-1.1.6/images/NoColor.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/leanfish2011/WebPhotoshop-Simple/e8cae581f756e96d14566f55bef71ba9790e93e2/JScript/jpicker-1.1.6/images/NoColor.png
--------------------------------------------------------------------------------
/JScript/jpicker-1.1.6/images/bar-opacity.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/leanfish2011/WebPhotoshop-Simple/e8cae581f756e96d14566f55bef71ba9790e93e2/JScript/jpicker-1.1.6/images/bar-opacity.png
--------------------------------------------------------------------------------
/JScript/jpicker-1.1.6/images/close.bmp:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/leanfish2011/WebPhotoshop-Simple/e8cae581f756e96d14566f55bef71ba9790e93e2/JScript/jpicker-1.1.6/images/close.bmp
--------------------------------------------------------------------------------
/JScript/jpicker-1.1.6/images/map-opacity.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/leanfish2011/WebPhotoshop-Simple/e8cae581f756e96d14566f55bef71ba9790e93e2/JScript/jpicker-1.1.6/images/map-opacity.png
--------------------------------------------------------------------------------
/JScript/jpicker-1.1.6/images/mappoint.gif:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/leanfish2011/WebPhotoshop-Simple/e8cae581f756e96d14566f55bef71ba9790e93e2/JScript/jpicker-1.1.6/images/mappoint.gif
--------------------------------------------------------------------------------
/JScript/jpicker-1.1.6/images/picker.gif:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/leanfish2011/WebPhotoshop-Simple/e8cae581f756e96d14566f55bef71ba9790e93e2/JScript/jpicker-1.1.6/images/picker.gif
--------------------------------------------------------------------------------
/JScript/jpicker-1.1.6/images/preview-opacity.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/leanfish2011/WebPhotoshop-Simple/e8cae581f756e96d14566f55bef71ba9790e93e2/JScript/jpicker-1.1.6/images/preview-opacity.png
--------------------------------------------------------------------------------
/JScript/jpicker-1.1.6/images/rangearrows.gif:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/leanfish2011/WebPhotoshop-Simple/e8cae581f756e96d14566f55bef71ba9790e93e2/JScript/jpicker-1.1.6/images/rangearrows.gif
--------------------------------------------------------------------------------
/JScript/jpicker-1.1.6/jPicker.css:
--------------------------------------------------------------------------------
1 | @media all
2 | {
3 | #jPicker
4 | {
5 | margin: 0px 8px;
6 | text-align: left;
7 | }
8 | #jPicker ul
9 | {
10 | font-size: 15px;
11 | margin: 0px 0px 0px 15px;
12 | padding: 0px;
13 | }
14 | #jPicker ul li
15 | {
16 | list-style: disc;
17 | padding: 2px 0px;
18 | }
19 | #jPicker ul li ul
20 | {
21 | margin-bottom: 10px;
22 | }
23 | #jPicker ul li ul li
24 | {
25 | list-style: circle;
26 | }
27 | #jPicker p
28 | {
29 | font-size: 13px;
30 | padding: 0px 10px;
31 | }
32 | #jPicker hr
33 | {
34 | clear: both;
35 | }
36 | #jPicker h2.jPicker
37 | {
38 | font-size: 16px;
39 | padding: 20px 10px;
40 | }
41 | #jPicker code
42 | {
43 | color: #8bd;
44 | font-size: 14px;
45 | font-weight: bold;
46 | }
47 | #jPicker pre
48 | {
49 | background: #eee;
50 | border: 1px solid #000;
51 | color: #000;
52 | display: block;
53 | font-size: 11px;
54 | margin: 10px 5px;
55 | padding: 5px;
56 | }
57 | #jPicker span
58 | {
59 | font-size: 13px;
60 | text-align: center;
61 | }
62 | #jPicker a
63 | {
64 | color: #ff8050;
65 | }
66 | #jPicker input
67 | {
68 | font-size: 13px;
69 | padding: 2px 5px;
70 | }
71 | #jPicker h2
72 | {
73 | font-size: 16px;
74 | margin: 10px 0px;
75 | }
76 | }
77 |
--------------------------------------------------------------------------------
/JScript/jquery-easyui/easyloader.js:
--------------------------------------------------------------------------------
1 | /**
2 | * jQuery EasyUI 1.3.5
3 | *
4 | * Copyright (c) 2009-2013 www.jeasyui.com. All rights reserved.
5 | *
6 | * Licensed under the GPL or commercial licenses
7 | * To use it on other terms please contact us: info@jeasyui.com
8 | * http://www.gnu.org/licenses/gpl.txt
9 | * http://www.jeasyui.com/license_commercial.php
10 | *
11 | */
12 | (function(){
13 | var _1={draggable:{js:"jquery.draggable.js"},droppable:{js:"jquery.droppable.js"},resizable:{js:"jquery.resizable.js"},linkbutton:{js:"jquery.linkbutton.js",css:"linkbutton.css"},progressbar:{js:"jquery.progressbar.js",css:"progressbar.css"},tooltip:{js:"jquery.tooltip.js",css:"tooltip.css"},pagination:{js:"jquery.pagination.js",css:"pagination.css",dependencies:["linkbutton"]},datagrid:{js:"jquery.datagrid.js",css:"datagrid.css",dependencies:["panel","resizable","linkbutton","pagination"]},treegrid:{js:"jquery.treegrid.js",css:"tree.css",dependencies:["datagrid"]},propertygrid:{js:"jquery.propertygrid.js",css:"propertygrid.css",dependencies:["datagrid"]},panel:{js:"jquery.panel.js",css:"panel.css"},window:{js:"jquery.window.js",css:"window.css",dependencies:["resizable","draggable","panel"]},dialog:{js:"jquery.dialog.js",css:"dialog.css",dependencies:["linkbutton","window"]},messager:{js:"jquery.messager.js",css:"messager.css",dependencies:["linkbutton","window","progressbar"]},layout:{js:"jquery.layout.js",css:"layout.css",dependencies:["resizable","panel"]},form:{js:"jquery.form.js"},menu:{js:"jquery.menu.js",css:"menu.css"},tabs:{js:"jquery.tabs.js",css:"tabs.css",dependencies:["panel","linkbutton"]},menubutton:{js:"jquery.menubutton.js",css:"menubutton.css",dependencies:["linkbutton","menu"]},splitbutton:{js:"jquery.splitbutton.js",css:"splitbutton.css",dependencies:["menubutton"]},accordion:{js:"jquery.accordion.js",css:"accordion.css",dependencies:["panel"]},calendar:{js:"jquery.calendar.js",css:"calendar.css"},combo:{js:"jquery.combo.js",css:"combo.css",dependencies:["panel","validatebox"]},combobox:{js:"jquery.combobox.js",css:"combobox.css",dependencies:["combo"]},combotree:{js:"jquery.combotree.js",dependencies:["combo","tree"]},combogrid:{js:"jquery.combogrid.js",dependencies:["combo","datagrid"]},validatebox:{js:"jquery.validatebox.js",css:"validatebox.css",dependencies:["tooltip"]},numberbox:{js:"jquery.numberbox.js",dependencies:["validatebox"]},searchbox:{js:"jquery.searchbox.js",css:"searchbox.css",dependencies:["menubutton"]},spinner:{js:"jquery.spinner.js",css:"spinner.css",dependencies:["validatebox"]},numberspinner:{js:"jquery.numberspinner.js",dependencies:["spinner","numberbox"]},timespinner:{js:"jquery.timespinner.js",dependencies:["spinner"]},tree:{js:"jquery.tree.js",css:"tree.css",dependencies:["draggable","droppable"]},datebox:{js:"jquery.datebox.js",css:"datebox.css",dependencies:["calendar","combo"]},datetimebox:{js:"jquery.datetimebox.js",dependencies:["datebox","timespinner"]},slider:{js:"jquery.slider.js",dependencies:["draggable"]},tooltip:{js:"jquery.tooltip.js"},parser:{js:"jquery.parser.js"}};
14 | var _2={"af":"easyui-lang-af.js","ar":"easyui-lang-ar.js","bg":"easyui-lang-bg.js","ca":"easyui-lang-ca.js","cs":"easyui-lang-cs.js","cz":"easyui-lang-cz.js","da":"easyui-lang-da.js","de":"easyui-lang-de.js","el":"easyui-lang-el.js","en":"easyui-lang-en.js","es":"easyui-lang-es.js","fr":"easyui-lang-fr.js","it":"easyui-lang-it.js","jp":"easyui-lang-jp.js","nl":"easyui-lang-nl.js","pl":"easyui-lang-pl.js","pt_BR":"easyui-lang-pt_BR.js","ru":"easyui-lang-ru.js","sv_SE":"easyui-lang-sv_SE.js","tr":"easyui-lang-tr.js","zh_CN":"easyui-lang-zh_CN.js","zh_TW":"easyui-lang-zh_TW.js"};
15 | var _3={};
16 | function _4(_5,_6){
17 | var _7=false;
18 | var _8=document.createElement("script");
19 | _8.type="text/javascript";
20 | _8.language="javascript";
21 | _8.src=_5;
22 | _8.onload=_8.onreadystatechange=function(){
23 | if(!_7&&(!_8.readyState||_8.readyState=="loaded"||_8.readyState=="complete")){
24 | _7=true;
25 | _8.onload=_8.onreadystatechange=null;
26 | if(_6){
27 | _6.call(_8);
28 | }
29 | }
30 | };
31 | document.getElementsByTagName("head")[0].appendChild(_8);
32 | };
33 | function _9(_a,_b){
34 | _4(_a,function(){
35 | document.getElementsByTagName("head")[0].removeChild(this);
36 | if(_b){
37 | _b();
38 | }
39 | });
40 | };
41 | function _c(_d,_e){
42 | var _f=document.createElement("link");
43 | _f.rel="stylesheet";
44 | _f.type="text/css";
45 | _f.media="screen";
46 | _f.href=_d;
47 | document.getElementsByTagName("head")[0].appendChild(_f);
48 | if(_e){
49 | _e.call(_f);
50 | }
51 | };
52 | function _10(_11,_12){
53 | _3[_11]="loading";
54 | var _13=_1[_11];
55 | var _14="loading";
56 | var _15=(easyloader.css&&_13["css"])?"loading":"loaded";
57 | if(easyloader.css&&_13["css"]){
58 | if(/^http/i.test(_13["css"])){
59 | var url=_13["css"];
60 | }else{
61 | var url=easyloader.base+"themes/"+easyloader.theme+"/"+_13["css"];
62 | }
63 | _c(url,function(){
64 | _15="loaded";
65 | if(_14=="loaded"&&_15=="loaded"){
66 | _16();
67 | }
68 | });
69 | }
70 | if(/^http/i.test(_13["js"])){
71 | var url=_13["js"];
72 | }else{
73 | var url=easyloader.base+"plugins/"+_13["js"];
74 | }
75 | _4(url,function(){
76 | _14="loaded";
77 | if(_14=="loaded"&&_15=="loaded"){
78 | _16();
79 | }
80 | });
81 | function _16(){
82 | _3[_11]="loaded";
83 | easyloader.onProgress(_11);
84 | if(_12){
85 | _12();
86 | }
87 | };
88 | };
89 | function _17(_18,_19){
90 | var mm=[];
91 | var _1a=false;
92 | if(typeof _18=="string"){
93 | add(_18);
94 | }else{
95 | for(var i=0;i<_18.length;i++){
96 | add(_18[i]);
97 | }
98 | }
99 | function add(_1b){
100 | if(!_1[_1b]){
101 | return;
102 | }
103 | var d=_1[_1b]["dependencies"];
104 | if(d){
105 | for(var i=0;i
4 |
5 | > WebPhotoshop精简版是利用HTML5技术在Web上实现对图形图像的处理,构建易维护、易共享、易于拓展、实时性的Web图形图像处理平台。
6 | > 精简版功能包括:图形绘制、图像处理、图像操作。完整版包括多人协作操作图像、实时交流、图片搜索,同时实现实时的多人协作处理图形图像技术。(完整版后续上传)
7 | ## WebPhotoshop绘制展示1
8 | 
9 |
10 | ## WebPhotoshop绘制展示2
11 | 
12 |
13 | ## 一、功能说明:
14 | ### 1、图形绘制
15 | 1. 实现铅笔、画笔(书法画笔、喷枪、蜡笔、记号笔、水彩画笔)的绘制效果。
16 | 2. 实现直线、曲线、椭圆(圆)、矩形(圆角矩形)、三角形(直角三角形、等边三角形、任意三角形)、多边形的绘制。
17 | 3. 绘制过程中,可以选择颜色,选择颜色有两种方式:颜色选择、颜色拾取。可以进行颜色填充,即对选定区域,用选择的颜色进行填充。
18 |
19 | ### 2、图像处理
20 | 1. 能够实现的效果有:黑白、模糊、亮度/透明度、反色、雾化、锐化、浮雕、雕刻、柔化、油画、积木、怀旧、蒙版.
21 | 2. 蒙版包括:红色蒙版、蓝色蒙版、绿色蒙版。
22 |
23 | ### 3、图像操作
24 | 1. 能够对图像进行的操作有:图像选择,包括区域选择、对象选择。
25 | 2. 图像移动,即对选择区域或对象的移动。
26 | 3. 图像裁剪,包括矩形裁剪(保留裁剪区内、保留裁剪区外)。
27 | 4. 图像的旋转,即将画布或者选择的区域对象向右90度、向左90度、180度、垂直旋转、水平旋转、任意度数。
28 | 5. 橡皮擦效果,能够擦除绘制的图像。
29 | 6. 图像的缩小放大,包括图像的局部缩放和图像的整体缩放。
30 | 7. 插入文本,即在图像上插入文本,能够改变文本颜色、字体、大小,实现加粗、倾斜、下划线、删除线效果。
31 | 8. 将图像保存为图片。将图像存到服务器。将图像另存为其他格式。图像保存为下次可以再进行编辑的自定义格式。
32 |
33 | ### 4、其他
34 | 1. 可以实现操作无限制回退,和跳转到任何一次操作。
35 | 2. 可以实现添加图层、删除图层、移动图层。
36 |
37 | ### 5、完整版功能
38 | 1. 多人协同绘图。实现了多人同时在线编辑同一张图片,实时合并和展现对方的绘制。
39 | 2. 实时交流。支持多人群聊、一对一单聊,方便多人协同绘制中沟通。
40 |
41 | ## 二、操作流程:
42 | > 1) 进入系统后,显示主工作区,包括菜单栏、选项栏、工具箱、主画板、历史记录、图层管理。
43 | > 2) 默认为铅笔,可以在主工作区画图。可以选择颜色等属性。
44 | > 3) 打开图片,进行图片编辑。
45 |
46 | ## 三、TODO:
47 | >1. 代码需要优化,很多代码都只是功能的实现和累积,没有使用面向对象的思想。
48 | >2. 部分功能因前端局限性还未完全实现。
49 |
--------------------------------------------------------------------------------
/docker/Dockerfile:
--------------------------------------------------------------------------------
1 | # 来源镜像
2 | FROM alpine:20200330_212034
3 |
4 | ENV TZ=Asia/Shanghai
5 |
6 | # 将vue生成后的静态文件拷贝到临时目录中
7 | ADD web /tmp/webphotoshop/web
8 |
9 | # 将之前的静态文件清理掉,再将临时目录中的静态文件移动到project目录中
10 | # 不能直接清理掉web目录,已经挂载了
11 | CMD rm -rf /opt/project/web/webphotoshop/index.html && rm -rf /opt/project/web/webphotoshop && mv /tmp/webphotoshop/web* /opt/project/web/webphotoshop
12 |
--------------------------------------------------------------------------------
/docker/docker_build.sh:
--------------------------------------------------------------------------------
1 | # 1、将静态文件包拷贝到docker目录中
2 | # 2、构建镜像
3 |
4 | #!/bin/bash
5 |
6 | version="v2.0"
7 |
8 | function build_image()
9 | {
10 | work_path=$(pwd)
11 | echo "当前目录:"$work_path
12 |
13 | cd ../
14 | project_path=$(pwd)
15 | echo "当前项目目录:"$project_path
16 |
17 | latest_commit_id=$(git rev-parse --short HEAD)
18 | branch=$(git symbolic-ref --short -q HEAD)
19 |
20 | rm -rf docker/web/*
21 |
22 | cp -rP ./Code docker/web/
23 | cp -rP ./CSS docker/web/
24 | cp -rP ./Images docker/web/
25 | cp -rP ./JScript docker/web/
26 | cp index.html docker/web/
27 |
28 | cd docker
29 | time=$(date "+%Y%m%d_%H%M%S")
30 | tag=$version"_"$branch"_"$time"_"$latest_commit_id
31 | docker_name=$1":"$tag
32 |
33 | sudo docker build -t $docker_name .
34 | }
35 |
36 | # 根据各个项目修改
37 | project_name="webphotoshop-web"
38 |
39 | # 入口
40 | build_image $project_name
41 |
--------------------------------------------------------------------------------
/index.html:
--------------------------------------------------------------------------------
1 |
8 |
9 |
10 |
11 |
12 | WebPhotoshop
13 |
14 |
15 |
17 |
18 |
19 |
20 |
21 |
22 |
23 |
24 |
25 |
26 |
27 |
49 |
50 |
51 |
482 |
483 |
484 |
485 |
486 |
487 |
488 |
489 |
490 |
491 |
492 |
496 |
505 |
527 |
528 |
529 |
530 | 铅笔:按下左键并拖动
531 |
532 |
533 | X:20,Y:40
534 |
535 |
536 |
537 |
538 |
539 |
540 |
584 |
603 |
604 |
605 | 色阶调整
606 | |
607 |
608 |
609 |
610 |
658 |
700 |
754 |
787 |
833 |
839 |
840 |
841 |
843 |
844 |
845 |
846 |
850 |
851 |
852 |
853 |
854 | 接收人:
855 |
858 |
发送
860 |
861 |
862 |
863 |
864 |
865 |
866 |
867 |
868 |
869 |
870 |
871 |
872 |
873 |
874 |
875 |
--------------------------------------------------------------------------------