开源在线图片设计器,支持PSD解析、AI抠图等,基于Puppeteer生成图片

Github 开源地址: palxiao/poster-design

项目速览

git clone https://github.com/palxiao/poster-design.git
cd poster-design
npm run prepared  # 快捷安装依赖指令
npm run serve     # 本地运行

将同时运行前端界面与图片生成服务(30007001端口),合成图片时本地会启动一个Chrome浏览器实例。

👇🏻下面一起来看下都有些什么功能吧。

上传 PSD 模板

点击 “我的” - “资源管理”,上传PSD模板按钮,进入PSD解析上传界面界面。选择或拖入 PSD 文件,等待解析完成后开始编辑,调整好模板后点击右上角“上传模板”,等待完成。

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-B3yBM8M4-1692326856211)(https://p9-juejin.byteimg.com/tos-cn-i-k3u1fbpfcp/62e14e957f4b4d01abb979d8d55db918~tplv-k3u1fbpfcp-zoom-in-crop-mark:1512:0:0:0.image?)]

上传完成后点击查看作品即可打开模板,之后在 “我的作品” 中可以找到该模板。

线上为功能测试,资源将被上传到 Github,并使用 jsdelivr 作为 CDN 节点访问,这在某些网络条件下可能会体验不佳,请确认你的网络环境,必要时科学上网。

由于服务器在国内,生成下载图片可能会图裂,这不是BUG。

AI 抠图

上传需要去除背景的图片,自动抠除背景。在线体验

以上在线体验Demo所分配的服务器资源仅1核1G内存,可以看到应付简单抠图效果还是不错的,后续我会另开一篇文章讲解如何部署,感兴趣的话提前关注不迷路呀~

编辑与设计

快捷键

  • 保存:Ctrl / Command + S
  • 复制(选中元素):Ctrl / Command + C
  • 粘贴:Ctrl / Command + V
  • 多选:按住 Shift 或 Ctrl / Command 然后鼠标点选
  • 组合成组(多选时):Ctrl / Command + G

2023-7-30-1690706114391.gif

文字

画布中双击内容,编辑文字,修改颜色,原生吸色器(Chrome):

2023-7-17-1689564723157.gif

图片

除了拖拽缩放图片大小,也可对图像内容进行缩放裁剪,裁剪通常用于截取显示原图像的一部分:

支持拖动图片放置到一个容器中显示:

2023-7-21-1689925165151.gif

图层

图层面板中可随意拖动元素快速改变层级,图层锁定后将固定在画布中,此时元素变得不可移动,再次点击按钮即可解锁:

标尺

从标尺栏中拖出辅助线,按住线段拖回标尺栏中删除辅助线

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-BxJGHudX-1692326856213)(https://p3-juejin.byteimg.com/tos-cn-i-k3u1fbpfcp/0acd7c950bdf4356b22b0ab45c6d42c1~tplv-k3u1fbpfcp-zoom-in-crop-mark:1512:0:0:0.image?)]

项目架构

编辑界面就不多说了,就是对着稿定设计来,主要说说在保存时的操作,实际保存的是两段JSON内容:

其中 Page 是整个页面的 Schema,而 Widgets 则是扁平化的数组,代表着整个页面中的元素集合,拍平是为了高效直观地实现层级以及查找组件。

保存这些 JSON 后,在绘制页面请求这些信息,然后将页面呈现出来,绘制页移除了画布操作、属性菜单面板等编辑页才有的功能,只保留了基础组件的引入(如果有充足开发成本理论上可尝试采用 SSR 进一步提升速度),并通过一系列方法判断字体、图片、SVG等元素是否加载完毕,一旦整个页面以及资源都加载完成则调用 window 下的广播通知开始截图。

在服务端,我们使用 puppeteer 启动无头浏览器,在 Chrome 中打开绘制页,并往其 BOM 中注入广播通知方法,方法内调用截图,项目的核心就是完成这样的操作闭环。

技术栈概括

前端:Vue3 、Vite2 、Vuex 、ElementPlus

图片生成:Puppeteer、Express

服务端:Node.js

一些可独立的功能会逐渐抽取出来作为单独的库引入使用。

组件库 Github 地址:front-end-arsenal | 组件文档网站

前端目录结构

/src

├── App.vue
├── api // 请求接口管理
├── assets
|  ├── data // 数据资源
|  ├── fonts // 本地字体资源
|  └── styles // CSS 样式文件
├── common // 存放一些公共方法,例如上传下载、弹窗提示等
|  ├── hooks
|  └── methods
├── components
|  ├── business // 放置业务组件
|  |  ├── cropper // 裁剪(暂时弃用)
|  |  ├── image-cutout // 抠图
|  |  ├── moveable // 操作插件
|  |  ├── picture-selector // 照片库弹窗选择
|  |  ├── qrcode // 二维码插件
|  |  ├── right-click-menu // 右键菜单
|  |  └── save-download // 保存下载弹窗
|  ├── common // 公共组件
|  |  ├── PopoverTip.vue // 气泡提示组件
|  |  ├── ProgressLoading // 百分比进度条
|  |  └── Uploader // 上传组件
|  └── modules // 核心模块
|     ├── index.ts
|     ├── layout
|     |  ├── designBoard.vue // 主界面
|     |  ├── lineGuides.vue // 网格(弃用,由moveable提供辅助线功能)
|     |  ├── sizeControl.vue // 元素操作组件(弃用,由moveable代理)
|     |  └── zoomControl.vue // 缩放画布
|     ├── panel // 该目录下的所有文件自动导入项目中
|     |  ├── components
|     |  ├── stylePanel.vue // 右侧属性编辑面板
|     |  ├── widgetPanel.vue // 左侧功能菜单面板
|     |  └── wrap
|     |     ├── BgImgListWrap.vue // 背景选择面板
|     |     ├── PhotoListWrap.vue // 照片面板
|     |     ├── TempListWrap.vue // 模板列表
|     |     ├── ToolsListWrap.vue // 工具面板
|     |     ├── UserWrap.vue // 我的资源作品面板
|     |     ├── GraphListWrap.vue // 素材面板
|     |     ├── CompListWrap.vue // 组合列表(目前主要是文字组合)
|     |     └── TextListWrap.vue // 文字面板
|     ├── settings // 放置操作面板下的一些组件
|     |  ├── EffectSelect // 效果选择(未开发)
|     |  ├── colorSelect.vue // 颜色选择
|     |  ├── iconItemSelect.vue // icon选择
|     |  ├── numberInput.vue // 数字输入
|     |  ├── numberSlider.vue // 数字拖拉
|     |  ├── textInput.vue // 文字输入
|     |  ├── textInputArea.vue // 文字域输入
|     |  └── valueSelect.vue // 下拉选择
|     └── widgets // 该目录下的所有文件自动导入项目中
|        ├── pageStyle.vue // 背景/页面设置
|        ├── wGroup // 组合
|        |  ├── wGroup.vue
|        |  └── wGroupStyle.vue // 对应右侧面板的操作
|        ├── wImage // 图片
|        |  ├── components
|        |  |  └── innerToolBar.vue
|        |  ├── wImage.vue
|        |  └── wImageStyle.vue // 对应右侧面板的操作
|        ├── wQrcode // 二维码
|        |  ├── wQrcode.vue
|        |  └── wQrcodeStyle.vue // 对应右侧面板的操作
|        ├── wSvg // 矢量图
|        |  ├── wSvg.vue
|        |  └── wSvgStyle.vue // 对应右侧面板的操作
|        └── wText // 文字
|           ├── wText.vue
|           └── wTextStyle.vue // 对应右侧面板的操作
├── config.ts // 公共配置
├── main.ts // 项目入口文件
├── mixins // 一些公共混合代码,考虑优化
|  ├── methods
|  |  ├── DealWithCtrl.ts
|  |  └── keyCodeOptions.ts
|  ├── mouseDragging.ts
|  ├── move.ts
|  └── shortcuts.ts
├── router // vue 路由
|  ├── .....
├── store // Vuex 状态管理器
|  ├── index.ts
|  └── modules
|     ├── base
|     |  ├── .......
|     └── design
|        ├── .......
├── types // TS类型配置
|  ├── .......
├── utils // 工具函数目录
|  ├── axios.ts
|  ├── index.ts
|  ├── plugins
|  |  ├── cssLoader.ts // 异步加载css
|  |  ├── modules.ts // 全局加载公共组件
|  |  ├── pointImg.ts // 图片点位颜色,测试中
|  |  ├── preload.ts // 加载资源
|  |  └── psd // 设计稿解析
|  ├── utils.ts
|  └── widgets
|     └── elementConfig.ts // 配置全局默认导入的element组件
└── views // 页面目录├── Draw.vue // 绘制页├── Index.vue // 编辑页(首页)├── Psd.vue // PSD解析页└── components

由于项目当初开发至一半时才改用 Vue3 重构,所以有部分代码混合了 Options 写法,还请各位大佬不要笑话。

---------------------------END---------------------------

题外话

“不是只有程序员才要学编程?!”

认真查了一下招聘网站,发现它其实早已变成一项全民的基本技能了。

连国企都纷纷要求大家学Python!
在这里插入图片描述

世界飞速发展,互联网、大数据冲击着一切,各行各业对数据分析能力的要求越来越高,这便是工资差距的原因,学习编程顺应了时代的潮流。

在这个大数据时代,从来没有哪一种语言可以像Python一样,在自动化办公、爬虫、数据分析等领域都有众多应用。

更没有哪一种语言,语法如此简洁易读,消除了普通人对于“编程”这一行为的恐惧,从小学生到老奶奶都可以学会。

《2020年职场学习趋势报告》显示,在2020年最受欢迎的技能排行榜,Python排在第一。
在这里插入图片描述

它的角色类似于现在Office,成了进入职场的第一项必备技能。

如果你也想增强自己的竞争力,分一笔时代的红利,我的建议是,少加点班,把时间腾出来,去学一学Python。

因为,被誉为“未来十年的职场红利”的Python,赚钱、省钱、找工作、升职加薪简直无所不能!

目前,Python人才需求增速高达**174%,人才缺口高达50万,**部分领域如人工智能、大数据开发, 年薪30万都招不到人!在这里插入图片描述

感兴趣的小伙伴,赠送全套Python学习资料,包含面试题、简历资料等具体看下方。

👉CSDN大礼包🎁:全网最全《Python学习资料》免费赠送🆓!(安全链接,放心点击)

一、Python所有方向的学习路线

Python所有方向的技术点做的整理,形成各个领域的知识点汇总,它的用处就在于,你可以按照下面的知识点去找对应的学习资源,保证自己学得较为全面。

img
img

二、Python必备开发工具

工具都帮大家整理好了,安装就可直接上手!img

三、最新Python学习笔记

当我学到一定基础,有自己的理解能力的时候,会去阅读一些前辈整理的书籍或者手写的笔记资料,这些笔记详细记载了他们对一些技术点的理解,这些理解是比较独到,可以学到不一样的思路。

img

四、Python视频合集

观看全面零基础学习视频,看视频学习是最快捷也是最有效果的方式,跟着视频中老师的思路,从基础到深入,还是很容易入门的。

img

五、实战案例

纸上得来终觉浅,要学会跟着视频一起敲,要动手实操,才能将自己的所学运用到实际当中去,这时候可以搞点实战案例来学习。img

六、面试宝典

在这里插入图片描述

在这里插入图片描述

简历模板在这里插入图片描述

如有侵权,请联系删除。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.rhkb.cn/news/99908.html

如若内容造成侵权/违法违规/事实不符,请联系长河编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

财务数据分析用什么软件好?奥威BI自带方案

做财务数据分析,光有软件还不够,还需要有标准化的智能财务数据分析方案。奥威BI数据可视化工具就是这样一款自带智能财务数据分析方案的软件。 ”BI方案“,一站式做财务数据分析 奥威BI数据可视化工具和智能财务分析方案结合,可…

Alibaba-Easyexcel 使用总结

简介 简介 EasyExcel 是一个基于 Java 的简单、省内存的读写 Excel 的开源项目,在尽可能节约内存的情况下支持读写百 M 的 Excel。 但注意,其不支持: 单个文件的并发写入、读取读取图片宏 常见问题 Excel 术语 Sheet,工作薄…

Pyqt5-开源工具分解功能(文本拖拽)

开源第四篇:功能实现之拖拽功能与配置文件。 写这个功能的初衷,是因为,每次调试我都要手动敲命令,太麻烦了,想偷个懒,所以直接给这功能加上了,顺便衍生出了另一个想法,配置文件自动填写相关数据。 先看个简单的拖拽功能: 很明显吧,还是比较便捷的。所以我们本章,就在…

基于PaddlePaddle实现的声纹识别系统

前言 本项目使用了EcapaTdnn、ResNetSE、ERes2Net、CAM等多种先进的声纹识别模型,不排除以后会支持更多模型,同时本项目也支持了MelSpectrogram、Spectrogram、MFCC、Fbank等多种数据预处理方法,使用了ArcFace Loss,ArcFace loss…

智能电视与win10电脑后续无法实现DLNA屏幕共享

问题背景: 我用的是TCL电视,但是并不是最新,打开的方式是U盘->电脑,各位看自己情况,很多问题都大概率是智能电视问题。 情景假设: 假设你已经完成原先智能电视该有的步骤,通过DLNA&#xf…

蓝牙运动耳机哪款好、运动耳机性价比推荐

近年来,运动蓝牙耳机备受欢迎,成为人们健身时的必备时尚单品。随着蓝牙耳机的不断发展,市场上可供选择的产品种类繁多,因此挑选一款适合自己的蓝牙耳机并不困难。然而,并非每款耳机都适合户外或者运动场景下的使用&…

Lua与C++交互(一)————堆栈

Lua与C交互(一)————堆栈 Lua虚拟机 什么是Lua虚拟机 Lua本身是用C语言实现的,它是跨平台语言,得益于它本身的Lua虚拟机。 虚拟机相对于物理机,借助于操作系统对物理机器(CPU等硬件)的一…

6-3 使用函数输出水仙花数

分数 20 全屏浏览题目 切换布局 作者 张高燕 单位 浙大城市学院 水仙花数是指一个N位正整数(N≥3),它的每个位上的数字的N次幂之和等于它本身。例如:153135333。 本题要求编写两个函数,一个判断给定整数是否水仙花数…

开源数据库Mysql_DBA运维实战 (总结)

开源数据库Mysql_DBA运维实战 (总结) SQL语句都包含哪些类型 DDL DCL DML DQL Yum 安装MySQL的配置文件 配置文件:/etc/my.cnf日志目录:/var/log/mysqld.log错误日志:/var/log/mysql/error.log MySQL的主从切换 查看主…

安装Ubuntu服务器、配置网络、并安装ssh进行连接

安装Ubuntu服务器、配置网络、并安装ssh进行连接 1、配置启动U盘2、配置网络3、安装ssh4、修改ssh配置文件5、重启电脑6、在远程使用ssh连接7、其他报错情况 1、配置启动U盘 详见: U盘安装Ubuntu系统详细教程 2、配置网络 详见:https://blog.csdn.net/davidhzq/a…

16、Flink 的table api与sql之连接外部系统: 读写外部系统的连接器和格式以及FileSystem示例(1)

Flink 系列文章 1、Flink 部署、概念介绍、source、transformation、sink使用示例、四大基石介绍和示例等系列综合文章链接 13、Flink 的table api与sql的基本概念、通用api介绍及入门示例 14、Flink 的table api与sql之数据类型: 内置数据类型以及它们的属性 15、Flink 的ta…

linux-进程

文章目录 1.先谈硬件冯诺依曼体系结构 2.再谈软件操作系统什么是操作系统?为什么要有操作系统?如何管理?系统调用 3.再谈进程那么具体Linux是怎么做的?指令 ps ajx 查看所有进程 非实时top 实时查看进程 相当于任务管理器ls /proc 内存级进程…

Linux命令200例:tar命令主要用于创建、查看和提取归档文件(常用)

🏆作者简介,黑夜开发者,全栈领域新星创作者✌。CSDN专家博主,阿里云社区专家博主,2023年6月csdn上海赛道top4。 🏆数年电商行业从业经验,历任核心研发工程师,项目技术负责人。 &…

idea 左下角的Git(Version Control)中显示Local Changes窗口

打开Local Changes窗口来查看当前Git仓库的本地变更。 使用快捷键: - Windows: Alt9 - Mac: Cmd9 解决: (1)idea打开settings (2)点击Version Control窗口选项卡,选择Commit选项,对 Use.... in…

STM32使用定时器实现微秒(us)级延时

STM32使用定时器实现微秒(us)级延时 引言前期准备介绍系统时钟定时器时钟 项目项目介绍STM32CubeMX程序 引言 目前开发STM32普遍使用HAL库,但 HAL 库封装的延时函数目前仅支持 ms 级别的延时,日常很多情况下会用到 us 延时&#…

字符设备驱动实例(PWM和RTC)

目录 五、PWM 六、RTC 五、PWM PWM(Pulse Width Modulation,脉宽调制器),顾名思义就是一个输出脉冲宽度可以调整的硬件器件,其实它不仅脉冲宽度可调,频率也可以调整。它的核心部件是一个硬件定时器,其工作原理可以用…

Midjourney API 国内申请及对接方式

在人工智能绘图领域,想必大家听说过 Midjourney 的大名吧! Midjourney 以其出色的绘图能力在业界独树一帜。无需过多复杂的操作,只要简单输入绘图指令,这个神奇的工具就能在瞬间为我们呈现出对应的图像。无论是任何物体还是任何风…

8月18日上课内容 Haproxy搭建Web群集

本章结构 课程大纲 Haproxy调度算法 常见的web集群调度器 目前常见的Web集群调度器分为软件和硬件软件 通常使用开源的LVS、Haproxy、Nginx 硬件一般使用比较多的是F5,也有很多人使用国内的一些产品,如梭子鱼、绿盟等 Haproxy应用分析 LVS在企业应用中…

两两交换链表中的节点

你存在,我深深的脑海里~ 题目: 示例: 思路: 这个题有点类似于反转一个单链表,不同的地方在于这个题不全反转,所以我们不同的地方在于此题多用了一个prve指针保存n1的前一个节点,以及头的改变&a…

什么是KNN( K近邻算法)

什么是KNN( K近邻算法) 虽然名字中有NN,KNN并不是哪种神经网络,它全名K-Nearest-Neighbors:K近邻算法,是机器学习中常用的分类算法。 物以类聚,人以群分。KNN的基础思想很简单,要判断一个新数据的类别&…