当前位置:首页 > 科技  > 软件

在线图片编辑器,支持PSD解析、AI抠图等

来源: 责编: 时间:2023-08-05 11:45:47 5282观看
导读自从我上次分享一个人开发仿造稿定设计的图片编辑器到现在,不知不觉已过去一年时间了,期间我经历了裁员失业、面试找工作碰壁,寒冬下一直没有很好地履行计划.....这些就放在日后谈吧。最近挤出时间来完善了这个项目,正式

自从我上次分享一个人开发仿造稿定设计的图片编辑器到现在,不知不觉已过去一年时间了,期间我经历了裁员失业、面试找工作碰壁,寒冬下一直没有很好地履行计划.....这些就放在日后谈吧。JaT28资讯网——每日最新资讯28at.com

最近挤出时间来完善了这个项目,正式开源后在一天内就收获了上百个Star,今天想向大家分享下这个开源图片编辑器项目——迅排设计,以及我的一些感悟和开源体验。JaT28资讯网——每日最新资讯28at.com

项目速览

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

JaT28资讯网——每日最新资讯28at.com

其中 Page 是整个页面的 Schema,而 Widgets 则是扁平化的数组,代表着整个页面中的元素集合,拍平是为了高效直观地实现层级以及查找组件。JaT28资讯网——每日最新资讯28at.com

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

在服务端,我们使用 puppeteer 启动无头浏览器,在 Chrome 中打开绘制页,并往其 BOM 中注入广播通知方法,这样就完成了整个图片生成操作的闭环。JaT28资讯网——每日最新资讯28at.com

JaT28资讯网——每日最新资讯28at.com

技术栈概括

前端:Vue3 、Vite2 、Vuex 、ElementPlusJaT28资讯网——每日最新资讯28at.com

图片生成:Puppeteer、ExpressJaT28资讯网——每日最新资讯28at.com

服务端:Node.jsJaT28资讯网——每日最新资讯28at.com

一些可独立的功能会被抽取出来作为单独的库引入使用。JaT28资讯网——每日最新资讯28at.com

组件库 Github 地址:https://github.com/palxiao/front-end-arsenalJaT28资讯网——每日最新资讯28at.com

前端目录详解

/srcJaT28资讯网——每日最新资讯28at.com

├── 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 写法,还请各位大佬不要笑话。JaT28资讯网——每日最新资讯28at.com

开源感受

早在去年我于年中总结文章里分享这个项目后,就收到不少私信留言表示对项目感兴趣,甚至有要花钱买源码或商业化二次开发的,我都回绝了。当时我的想法是:这个项目能受到关注说明一定是有价值的,那么就不应该封闭起来!JaT28资讯网——每日最新资讯28at.com

与大多数程序员一样,我开始写前端也是从一段段“胶水”代码开始的,遇到问题的第一反应就是打开浏览器搜索,然后从各种问答与笔记中抽丝剥茧式地尝试解决问题。JaT28资讯网——每日最新资讯28at.com

后来,代码越写越熟练,各种框架库使用起来得心应手,算得上是初窥门径,有时甚至也能一个人扛起整个前端项目了。当然,项目里通常也包含了几十甚至上百个第三方依赖。JaT28资讯网——每日最新资讯28at.com

不必感到羞耻,这就是许多公司开发的常态,技术细节的探索与学习是永无止境的,但无法保证效率的话,你可能会先丢掉饭碗,所有插件库都手撸,你可能一个项目都做不出来。JaT28资讯网——每日最新资讯28at.com

在我一开始做这个项目的时候,没有找到现成的开源可以依猫画虎,最后虽然写完了整个项目,但也走了不少弯路。所以我看到了对项目关注的人,就仿佛看到了曾经的自己,因此决定开源,即使我代码写得再烂,兴许也会有需要的人。JaT28资讯网——每日最新资讯28at.com

事实上,今年有人基于我的项目二次开发,上线了公司内部的编辑器:JaT28资讯网——每日最新资讯28at.com

JaT28资讯网——每日最新资讯28at.com

有人正打算在公司的搭建器上增加类似的功能,特地加了我微信向我道谢:JaT28资讯网——每日最新资讯28at.com

JaT28资讯网——每日最新资讯28at.com

虽然这些都不是我的产出成果,但他们至少不用踩我踩过的坑,留出更多的时间,可以去研究自己热爱的东西,去实现自己某方面的技术追求,最终产出更多的轮子,前端的生态就会越来越好,所有人也就都能从中受益,这也是开源的意义之一。JaT28资讯网——每日最新资讯28at.com

目前项目还在不断完善中,可能有很多的不足之处,代码写得烂,我也是一边学习一边成长。开源不易,如果项目对你有帮助或启发,可以点个 Star 支持一下~ 感谢!JaT28资讯网——每日最新资讯28at.com

Github 仓库地址: https://github.com/palxiao/poster-designJaT28资讯网——每日最新资讯28at.com

链接

[1] 在线Demo: https://design.palxp.com/JaT28资讯网——每日最新资讯28at.com

[2] 文档网站: https://xp.palxp.com/JaT28资讯网——每日最新资讯28at.com

[3] PSD解析上传界面: https://design.palxp.com/psdJaT28资讯网——每日最新资讯28at.com

[4] AI抠图在线体验: https://design.palxp.com/home?koutu=1JaT28资讯网——每日最新资讯28at.com

本文链接:http://www.28at.com/showinfo-26-131-0.html在线图片编辑器,支持PSD解析、AI抠图等

声明:本网页内容旨在传播知识,若有侵权等问题请及时与本网联系,我们将在第一时间删除处理。邮件:2376512515@qq.com

上一篇: JavaScript学习 -AES加密算法

下一篇: 深度探索 Elasticsearch 8.X:function_score 参数解读与实战案例分析

标签:
  • 热门焦点
  • 天猫精灵Sound Pro体验:智能音箱没有音质?来听听我的

    这几年除了手机作为智能生活终端最主要的核心之外,第二个可以成为中心点的产品是什么?——是智能音箱。 手机在执行命令的时候有两种操作方式,手和智能语音助手,而智能音箱只
  • 6月安卓手机性价比榜:Note 12 Turbo断层式碾压

    6月份有一个618,虽然这是京东周年庆的日子,但别的电商也都不约而同的跟进了,反正促销没坏处,厂商和用户都能满意。618期间一些产品也出现了历史低价,那么各个价位段的产品性价比
  • 三言两语说透柯里化和反柯里化

    JavaScript中的柯里化(Currying)和反柯里化(Uncurrying)是两种很有用的技术,可以帮助我们写出更加优雅、泛用的函数。本文将首先介绍柯里化和反柯里化的概念、实现原理和应用
  • 一篇文章带你了解 CSS 属性选择器

    属性选择器对带有指定属性的 HTML 元素设置样式。可以为拥有指定属性的 HTML 元素设置样式,而不仅限于 class 和 id 属性。一、了解属性选择器CSS属性选择器提供了一种简单而
  • 三分钟白话RocketMQ系列—— 如何发送消息

    我们知道RocketMQ主要分为消息 生产、存储(消息堆积)、消费 三大块领域。那接下来,我们白话一下,RocketMQ是如何发送消息的,揭秘消息生产全过程。注意,如果白话中不小心提到相关代
  • 慕岩炮轰抖音,百合网今何在?

    来源:价值研究所 作者:Hernanderz“难道就因为自己的一个产品牛逼了,从客服到总裁,都不愿意正视自己产品和运营上的问题,选择逃避了吗?”这一番话,出自百合网联合创
  • 华为发布HarmonyOS 4:更好玩、更流畅、更安全

    在8月4日的华为开发者大会2023(HDC.Together)大会上,HarmonyOS 4正式发布。自2019年发布以来,HarmonyOS一直以用户为中心,经历四年多的发展HarmonyOS已
  • OPPO K11搭载高性能石墨散热系统:旗舰同款 性能凉爽释放

    日前OPPO官方宣布,将于7月25日14:30举办新品发布会,届时全新的OPPO K11将正式与大家见面,将主打旗舰影像,和同档位竞品相比,其最大的卖点就是将配备索尼
  • 电博会与软博会实现"线下+云端"的双线融合

    在本次“电博会”与“软博会”双展会利好条件的加持下,既可以发挥展会拉动人流、信息流、资金流实现快速交互流动的作用,继而推动区域经济良性发展;又可以聚
Top