设计稿(UI视图)自动生成代码方案的探索

设计稿(UI视图)转代码是前端工程师日常不断重复的工作,这部分工作复杂度较低但工作占比较高,所以提升设计稿转代码的效率一直是前端工程师追求的方向之一。此前,前端工程师尝试过将业务组件模块化构建成通用视图库,并通过拖拽、拼接等形式搭建业务模块,从而实现视图复用,降低设计稿转代码的研发成本。但随着业务的发展和个性化的驱动,通用视图库无法覆盖所有应用场景,本文提出了一种设计稿自动生成代码的方案。

目前,业内主流的代码生成方案有两种,一种是通过训练神经网络,从图片或草图直接生成代码,以微软sketch2json为代表;另一种是基于Sketch源文件,从中解析出图层信息转化成DSL并生成代码,以imgCook为代表。经过实践,我们发现第一种方案基于神经网络的代码生成算法虽然简单粗暴,但复杂层布局的准确率较低、可解释程度不高导致后续无法持续优化。方案二中Sketch源文件信息量丰富、算法自定义程度高、优化空间大。因此,我们调研了业界基于Sketch的代码自动生成方案(已对外公布或者开源),发现了一些不足并尝试解决,下面从算法准确率、代码可读性、研发流程覆盖度等方面做一下对比(该对比结果仅考察业界方案对我们自己业务的适用性,实际结果可能存在差异):

如图所示,配置平台主要分成三块包括:设计稿转视图树(UI2DSL)、视图树转代码(DSL2Code)、以及业务信息绑定,下面简单介绍一下每一块的作用。

UI2DSL主要经历以下四个步骤:

在日常开发过程中,我们接触比较多的组件有按钮、标题、进度条、评分组件等,但是Sketch数据源中并没有这些组件只有图层信息,图层是设计师在设计UI视图时用到的视图控件。组件与图层的对应关系是一对多的关系,图层在Sketch数据源中的表现形式如下图中的JSON数据结构所示,描述了图层的坐标、大小等信息,后续布局生成就是基于对图层的切割来实现的。

设计稿作为输入源是设计稿自动转代码的基础,这对设计稿的设计规范要求较高。但在实践中,我们发现设计师会利用Sketch中的基本图形(每个图形最终形成数据源中的一个图层)叠加来描述一个组件的视觉效果,因此设计稿中不可避免会出现冗余图层的问题,干扰DSL的生成。虽然我们也尝试了利用自动化的手段删除冗余图层,但对于算法不能识别的部分(例如:图片上有一个文本图层,但是实际情况中文本是显示在图片里的,这个时候无法从算法层面决定是否删除文本),仍然需要靠人工进行图层删除、合并等,否则无法正常生成DSL。设计稿主要有以下几类问题。

图层未合并

上图是从设计稿解析出来的结果,可以发现在“美团优选”文字上方的图片中有很多红色的矩形框(每个矩形框是一个单独的图层),而算法预期的输入是一个图层,因此需要在算法处理前将多个图层合并成一个图层,右侧的三张图也有类似问题。我们与设计同学进行过沟通,设计同学表示愿意在产出设计稿之前将图层进行合并,但由于目前无法提供检测机制(图层合并是否有遗漏无法自动检测出来),也就无法彻底避免图层未合并的问题。

图层位置交叉

实践中发现当设计稿中不同字体/大小/颜色的文字排列在一起时,解析出来的图层信息往往会出现重叠的情况,由于DSL视图树算法依赖位置来确定不同组件的约束关系,因此位置的交叉会对算法准确度造成较大的影响。

复杂背景图层

上图中红色背景是由2个图层(2个蓝色矩形框)拼接形成的,左图上的蓝色图层是纯色,右图上的蓝色图层是渐变色,在两个图层未合并的情况下,算法生成的代码将会出错。

上面提出的问题,通过约束设计师来达到设计稿的规范化,难度较大,所以我们提供了可视化干预工具。下面对上述问题做一个简单的总结:-问题一:图层未合并问题肉眼很容易识别出来,利用工具将冗余图层进行快速合并删除即可。-问题二:图层交叉问题肉眼不易识别,因此我们提供了检测工具,基于检测工具可以对设计稿中的交叉问题快速修复。-问题三:复杂背景问题肉眼不易识别,暂时也没有有效的检测工具,用户可以采用边干预边生成的方式生成DSL。

可视化干预是UI2DSL重要的一环,经过可视化干预,将不标准的设计稿转化为标准的图层信息后再输入给算法,可以极大地提升算法的准确率。这里我们和imgCook的处理方式有一个区别:imgCook在引入了阈值处理等算法后(更智能,出错概率更大),可视化干预能力主要体现在事后,而我们在生成DSL之前允许用户对图层进行干预,在干预时用户面对的是直观的图层信息,可以有效降低工具的使用门槛(更稳定,效果更好)。

将扁平的数据源转化为树状结构的DSL,这个过程如果是人脑来做会怎么思考呢?先确定布局的整体结构是行布局或者列布局,然后再确定局部区域应该是什么布局结构,最后组装起来形成视图树。这个过程与递归算法类似,因此我们采用了递归算法作为算法的主框架,同时引入了“横竖切割+布局结构+模型评估”三大利器。

利器一:横竖切割

生成DSL时采用了整分的思路,即将大布局不断的切分成小布局,下面以动画的形式看一下简化过的DSL生成过程:

将设计稿一部分区域视为一个子区域,最开始的时候子区域和整个模板的面积一样大,基于图层的位置、大小信息,计算每个图层的上/下/左/右边缘坐标与其他图层的相对关系,就可以寻找到切割点(如上图中红色箭头所指的位置)。接下来依据切割点,将子区域切割成更小的子区域,在切割的过程中如果切割点是横向的,则生成列布局;如果切割点是纵向的,则生成行布局。通过不断的切割子区域得到更小的子区域,直到所有的子区域只剩下图片或者文本等不可切割的图层,这样就可以生成完整的DSL视图树了。为了方便读者理解,图例中只演示了行布局、列布局的切分过程,实际情况还包含了其他布局类型,会要复杂许多。

这里还要注意一个问题,当有3个切割点时,我们选择了直接将子区域切割成4个子区域,实际上我们可以只选择1个切割点进行切割,也可以选择2个切割点进行切割,当有N个切割点时,实际上存在(N的阶乘+1)种切割方式,具体选择哪种切割方式,我们会在利器三中讨论。

利器二:布局结构

每个图层都是一个矩形,为了生成布局结构只能依赖矩形的上下左右坐标信息。因此,对布局结构进行分类时,我们根据矩形与矩形之间的位置关系(相交、相离和包含关系)做了以下分类。

注意:从生成DSL的结果来看,包含布局和成组布局的处理方式其实是一样的,都是使用类似于FrameLayout的层叠布局包含内部图层元素,但是我们仍然保持分类原则(矩形之间的位置关系)不变。

上图中,相离、包含比较好理解,为什么两个图层相交的时候,会有成组和悬浮两种类型的布局结构呢?我们看下上述成组布局、悬浮布局两个设计稿中分别标出了相交的元素A、B,它们在位置上的相对关系是一样的,都是A、B两个图层对应的矩形框发生了交叉。但是我们希望理想态的DSL视图树却有所差异,如下图所示:

因此,对于图层相交时可能有两种类型的布局结构,分别是成组布局和悬浮布局。从上图可以看出使用成组布局还是悬浮布局是由图层内容决定的,那么就需要算法理解图层内容了,比如基于AI构建样本库,记住所有的角标样式(上面表格中4描述的),下次遇到角标相交时就生成成组布局。考虑到AI模型也是对规则的抽象,我们先搭建一套自定义识别规则。成组布局其位置信息是有规律可循的,例如:角标经常出现在右上角,标签经常出现在左上角,头像经常横向或者纵向交叉等,因此我们针对图层之间的位置关系构建了交叉模型,如下图所示:

上图的交叉模型可以记住历史模板中成组布局图层之间的位置关系,下次遇到相交布局时判断是否在历史规则库中即可完成识别,如果在就按成组布局处理否则按照悬浮布局处理。下图是通过历史模板构建的成组规则库。

上面介绍了本方案中涉及的5种布局类型,目前来看这五种布局类型可以描述所有的模板布局,并且生成代码符合RD的预期。下面展示两个设计稿DSL实例:

利器三:模型评估

在介绍横竖切割时,可以看到当存在多个切割点时,对所有切割点同时进行了切割,但实际上算法在切割时复杂度会更高,当有三个切割点时,实际上有5种切割方式,每种切割方式都会生成一个DSL。既然有5种切割方式,那么到底应该选择哪一种DSL呢?模型评估算法就是用来解决这个问题的。

目前模型评估算法有两个指标:布局节点数和逆布局指数。

以下图为例,看下视图不同切割方式下对应的模型评估方式:

上一节介绍了基本的布局结构,虽然说这些布局结构已经可以描述所有的UI布局,但是与RD的编码习惯还是有一些差异。

对于上面的布局,RD通常不会把相同的item写五遍,而是会将item放在一个类似于ListView的列表组件中,使代码看起来简洁易懂。因此在DSL生成阶段,除了识别基本的行/列/包含/成组/悬浮布局外,还需要进一步识别行/列布局中的元素是否形成列表布局。在试验过程中,我们发现列表布局分为两种:单状态列表组件和多状态列表组件。上图中每一个item的布局结构都是一样的,我们称为单状态列表组件,再来看一下多状态列表组件(如下图所示),每个item有多种状态(选中态和非选中态),并且不同状态的布局结构不一致。

对行/列布局中单状态列表组件的识别,只需要比较item子视图树的结构,子视图树结构一致则判断为单状态列表组件。对多状态列表组件的识别我们采取了自动识别+人工干预的方式,自动识别的方式比较粗暴,只要行列布局中子item的宽/高接近,并且子item不是基本组件(基本组件容易形成误判),就判定为多状态列表组件。具体算法是计算子item宽高的标准差,小于阈值就判定为多状态列表组件,否则不是。公式如下:

DSL视图树只是生成代码的中间产物,还需要对DSL进行代码还原,DSL2Code主要包括两个步骤:属性推断、属性信息调整。

属性推断包括两个部分:样式属性和结构属性。样式属性包括字体、背景色、圆角等可以直接通过数据源信息中获取得到的属性;结构属性包括大小、内外边距、主辅轴对齐等结构信息,这些信息无法从数据源中直接获取,所以结构信息的推断是这部分工作的重点。

结构信息推断算法同样使用递归算法作为主框架,通过一次递归对所有元素进行两次遍历来完成结构信息的推断。如下图所示,在对DSL所有节点进行递归遍历时,把所有元素依次加入队列中,递归完成后,再把所有节点依次移出队列,这样一进一出便对所有元素完成了两次遍历,我们把这两次遍历称为进队遍历和出队遍历。

进队遍历时,推断算法根据数据源中信息记录每个节点的大小和位置信息,并根据位置关系计算每个子节点在父节点中期望的主辅轴对齐方式和内外边距。出队遍历时,父节点会根据子节点期望的对齐方式确定父节点最终的主辅轴对齐方式,并根据子节点的拉伸意图修正父节点的大小。拉伸意图即节点的大小不固定,根据显示内容不同,在水平或垂直方向上可能会变大或变小,例如文本节点根据显示字数的多少长度会发生变化,字数过多时甚至还会换行。

由于输入源是基于设计稿呈现的静态效果图,设计稿中每个元素缺失了真实的业务含义,同样的展示效果在不同的业务场景中会有不同的属性要求,对于这部分内容,我们无法从输入源中进行准确推断。为此,我们提供了可视化的属性信息调整功能来辅助代码生成,页面效果如下图所示,在这个页面可以对DSL中的所有节点属性进行查看和修改调整。

经过业务信息补充后,便可进行最后的自动代码转化,通过语法映射自动把DSL转化成MTFlexbox模板代码。

下面是设计稿直接生成代码未经修改展示后的手机屏幕截图,可以看到取得了不错的还原效果:

田贝、少宽、腾飞等,美团平台终端业务研发团队研发工程师。

美团平台终端业务研发团队是一个活力四射、对技术充满激情的团队,现诚聘Android、iOS、FE工程师,欢迎有兴趣的同学投简历至tech@meituan.com(备注:美团平台终端业务研发团队)。

THE END
1.淘宝主图在线制作淘宝主图在线设计工具本页面专注于淘宝主图在线制作,详细介绍了多种高效便捷的设计工具,提供了丰富多样的设计模板以及风格推荐。无论是初学者还是专业设计师,都能在这里找到适合自己的淘宝主图在线制作方案,提升店铺吸引力和点击率。通过我们的推荐,轻松打造优秀的淘宝主图,增强店铺竞争力https://m.gaoding.com/features/taobao-main-image-online-maker
2.淘宝智能主图怎么做,淘宝智能主图制作教程本教程将向你介绍如何制作淘宝智能主图,包括主图设计的基本要素、制作步骤和技巧,以及如何优化主图以提高商品的点击率和转化率。让你轻松掌握淘宝智能主图的制作方? ,理想股票技术论坛https://www.55188.com/topics-8975056.html
3.ai商品图ai商品图在线生成工具AI商品图轻松生成,智能AI商品图生成工具,上传拍摄商品图片,自动抠图处理,智能背景替换,自动匹配多场景,无需美化设计操作,让电商设计降本增效。https://www.chuangkit.com/adlp2/242.html
4.淘宝AI图片生成工具大介绍癞蛤蟆工具箱让你的图片制作更加高效淘宝I图片生成工具是一款非常实用的工具,可以帮助你快速生成高质量的图片。该工具基于人工智能技术,能够自动识别图片内容,提供多种模板和设计元素,从而帮助用户轻松制作出符合自己需求https://new.91laihama.com/taobaozx/112258.html
5.有哪些免费的淘宝店装修做图工具使其在短时间内完成大量banner图、海报图和会场图的设计,提高工作效率 而且产出的“主图”也满足官方要求 同时设置定时投放,高效的完成一键替换主图 鹿班还能自定义主题模板,满足商家自主活动的使用场景 智能化自动生成海报,非常适用于活动大促场景 2、顽兔 https://zhuanlan.zhihu.com/p/352899691
6.沃姆设计模板装修辅助工具第四步:在需要添加链接的地方,按住鼠标左键拉动,绘制热区(画好后可以调整大小、位置);在右上角填写对应的链接; 第五步:链接全部添加好后,点击生成代码,将代码全部选中,复制一下; 第六步:在设计师模块里,添加一个DIY模块; 第七步:将刚刚复制的代码放入,点击保存即可,是不是很方便呢?赶紧试试吧!!! https://www.cnzoom.com/guide/doc/qprq.html
7.Banner设计欣赏网站–横幅广告促销电商海报专题页面淘宝钻展淘宝图片不居中显示怎么办?如何去掉淘宝天猫20个间隙缝隙?空白左右不显示1920全屏海报店铺装修首页全屏代码通栏布局 全屏轮播代码缩略图效果轮播切换效果代码自定义1920通栏自定义展示淘宝天猫店铺旺铺 淘宝天猫全屏轮播代码免费在线生成自定义全屏 阿里巴巴旺铺的自定义内容,全屏的代码进去后为什么不是全屏呢 https://bannerdesign.cn/
8.稿定设计mac版下载稿定设计(自媒体/电商设计软件)formacv1.3快速生成淘宝/天猫无线端链接。 2、代码/图片替换预览工具 一键更新装修代码内的图片链接,快速换新图。 【装修工具】 1、淘宝/天猫无线热区工具 快速设置无线端图片热区跳转链接工具。 2、电商通用热区工具 快速设置链接跳转、热区数量、范围,支持淘宝/天猫/京东/1688平台。 【设计工具】 1、智能抠图 3秒快速抠图换https://m.jb51.net/softs/687544.html
9.盘点阿里巴巴33个开源项目,你用过哪几个?Macaca是一套完整的自动化测试解决方案,支持移动端和PC端,支持Native, Hybrid, H5 等多种应用类型,并且提供客户端工具和持续集成服务。 地址:https://github.com/alibaba/macaca 17.基于 React 的中后台应用解决方案 飞冰 ICE 飞冰(ICE) 是一套基于 React 的中后台应用解决方案,ICE 包含了一条从设计端到开发端https://os.51cto.com/art/201911/605248.htm
10.详情页设计平台,女装淘宝网店店铺详情页人工智能装修自动设计快麦设计,依托人工智能设计平台,打造图像识别、自动套版、一键发布的淘宝详情页发布新方案。快麦设计海量精品模版自由选择,精美设计触手可及!免费试用中!http://sheji.kuaimai.com/
11.网店运营利器:五款免费淘宝图片处理软件推荐软件技巧该软件还自带海量独家网店素材,并与淘宝网官方合作提供一键上传到淘宝图片空间的功能。用户可以使用美图淘淘来美化商品照片并生成超实用装饰素材,如信誉、促销和新品等;还可以添加边框让商品脱颖而出;此外,该软件还支持导入水印照片并防盗图宣传店铺。在使用美图淘淘时只需要简单易用地操作即可轻松完成各项任务。https://xiazai.zol.com.cn/jiqiao/65336.html
12.淘宝主图在线设计淘宝主图在线制作生成魔力设在线设计平台提供淘宝主图在线制作,包括淘宝主图模板、淘宝主图图片、淘宝主图素材、淘宝主图文案。即可下载PSD源文件,也可以直接在线编辑制作,无需PS,淘宝主图一键在线生成。https://www.molishe.com/s-templates/40077.html
13.淘宝AI设计工具叫什么,都有哪些功能店查查淘宝的AI设计平台叫做“鹿班”。鹿班是阿里巴巴集团旗下的一款智能设计平台,利用人工智能技术帮助商家和设计师快速生成高质量的设计作品。用户可以通过简单的操作,输入设计需求,鹿班AI系统便能自动生成多种设计方案供用户选择和进一步编辑。这极大地提高了设计效率,降低了设计成本。 https://www.dianchacha.com/seller/article/17039
14.90设计工具,免费的店铺装修工具,淘宝店铺装修教程和店铺运营工具90设计工具是免费使用的店铺装修工具,包含了电商网站中各个板块代码生成和运营相关人员数据收集和市场分析调查工具,90设计_90sheji.comhttps://90sheji.com/gongju/
15.淘宝主图在线制作制作图网是一款免费在线制作图片的网站,有丰富的各行业设计模板,会打字就能在线编辑修改。涵盖:海报、名片、淘宝店招、PPT、邀请函、公众号、新媒体配图等场景模板。https://www.zhizuotu.com/tbzt.html
16.淘宝天猫图片空间进入上传入口,手把手教你把设计的图片上传到图片刚接触淘宝天猫装修的时候可能一开始连图片空间都不知道哪里进入,想要上传一张自己设计好的图片到图片空间不知道去哪上传,上传后不知道怎么加上链接装到店铺中。这样一来无法完成自定义代码装修了,所以今天疯狂的美工小编带大家了解一下基础知识,从上传图片开始学习哦~ https://www.mgzxzs.com/tmtbzxjc/2611.html
17.在线生成艺灵设计在线生成是一款很强大的淘宝助手软件,可生成淘宝、天猫、京东等其它平台特效代码。此软件可帮小白快速装修自己的店铺,即使不会css也可玩出css花样!例如:全屏代码、全屏轮播、css3动画、鼠标滑过遮罩、悬浮代码、手风琴、开关灯等特效|[!--smalltext--]https://www.yilingsj.com/zxsc/
18.淘宝logo设计生成器淘宝logo免费设计在线生成免费制作你的淘宝logo设计 1.选择 只需输入品牌名称,让我们的AI设计引擎自动生成无限logo创意供您挑选。 2.编辑 找到喜欢的logo创意后轻松在线编辑logo布局,字体和logo图标。我们的智能配色功能还能为您搭配不同的logo配色直到发现您的完美logo设计。 3.下载 https://www.logosc.cn/biaozhi/s%E6%B7%98%E5%AE%9D
19.前端搞搭建如何为搭建物料智能生成代码大家好,先自我介绍下,我是来自阿里淘系技术部的妙净,2010 年毕业加入淘宝前端,曾负责过淘宝前端无线基础库、淘宝无线性能优化体系、淘宝营销搭建体系,现负责淘宝导购和天猫品牌营销前端团队,负责前端智能生成代码平台 imgcook,今天给大家介绍下 imgcook。 先看一下视频,看看 imgcook 能干什么,目前主要能通过设计稿生成视https://maimai.cn/article/detail?fid=1453240724&efid=x3bGlHe5sFivY6azEZy5sA
20.如何智能生成钻展或海报智能设计(文档停止维护)“钻展图”、“淘宝旺铺海报”、“1688旺铺海报”、“自定义场景”是鹿班针对不同用户在不同场景下的创意设计能力,通过上传主体透明图或者场景图,即可在短时间内产出符合专业标准的设计图片,节省人力时间成本。 适用场景 “钻展图”可满足淘宝商家在钻展投放方面的设计需求,适用尺寸:640x200、520x280、688x340、160x20https://help.aliyun.com/document_detail/70069.html
21.蓝湖设计图腾讯云开发者社区前面已经介绍了如何使用 git 来管理我们的项目代码。这里顺带介绍一下,在企业实际开发中,基本上都是有设计图的存在,前端是按照设计图去开发实现,并不是自己凭空想象页面长什么样子。蓝湖就是目前比较主流的设计图网站。在设计图上面可以方便查看任何一个元素的尺寸大小、间距、字体大小等,以及点击图片直接下载切图。 https://cloud.tencent.com/developer/article/2275579
22.千图网免费在线设计图片素材网站千图网(www.58pic.com) 是专注正版商用图片素材在线设计与下载的网站!提供矢量图素材、背景图片、psd素材、字体模板、设计素材、PPT模板、视频素材、插画绘画、海报设计模板、网站设计素材等下载服务。https://www.58pic.com/
23.美图秀秀免费在线P图抠图拼图美图秀秀网页版在线图片照片编辑制作美化修改处理工具提供在线拼图,在线改图修图,在线P图,在线美颜,在线ps照片,另外还提供图片美化、人像美容、添加文字、批量处理图片大小、证件照换底色、图片压缩等好用的功能,还有海报设计、平面设计、广告设计、贴纸素材、边框等丰富https://pc.meitu.com/
24.免费在线淘宝店铺装修设计淘宝店铺装修图片素材模板下载MAKA是全球最受欢迎的免费在线淘宝店铺装修设计软件、淘宝店铺装修设计工具之一,提供海量的淘宝店铺装修设计模板素材,5分钟完成在线设计制作精美的淘宝店铺装修图片。https://www.maka.im/zhinan/taobaodianpusheji
25.imgcook由设计稿一键智能生成代码的大厨imgcook-cli 可以结合 Plugin 的能力将 imgcook 平台生成的代码产物一键放置到你的本地项目工程里,无缝融合到你的研发流程。 使用文档 imgcook visual studio 为了配合 VS Code 的强大工程能力,我们提供了 VS Code imgcook 编辑器插件,可将设计工具中导出的数据粘贴到 VSCode imgcook 编辑器插件,生成代码并导出到对应http://www.imgcook.com/
26.图怪兽作图神器在线海报编辑器PS图片制作AI 智能设计 海报/公众号首图/PPT自动生成 AI绘图 人人都是设计专家 在线拼图 随心所欲自由拼图 在线抠图 在线抠图更简单 创建设计 裁剪旋转 视频剪辑 营销文案 风格排版 为你推荐 公众号封面 融媒体 小红书 电商淘宝 招聘 印刷物料 更多模板 ? 冬至 共4914个模版 小红书 共6505个模版 圣诞节http://www.pikhive.com/
27.淘宝商品条形码是什么意思淘宝商品条形码怎么设计图1:淘宝商品条形码 二、淘宝商品条形码怎么设计 淘宝商品条形码的设计并非简单的工作,它涉及了许多专业知识和技能。首先,卖家需要选择合适的条形码类型,如EAN-13码等。然后,使用专门的条形码设计软件,如codesoft软件等,进行条形码的生成和编辑。其中,codesoft软件以其友好的操作界面和强大的设计功能,让淘宝卖家轻松上手https://www.codesoftchina.com/rumen/codesoft-tbsptxm.html
28.GIF动图海报GIF动图海报在线制作一键生成图司机提供【GIF动图海报在线生成】,所有GIF动图海报图片均可在线编辑,无需下载,无需会PS就能一键生成你想要的GIF动图海报,帮您节省90%的时间。https://www.tusij.com/zhuanti/51.html