设计稿(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.推荐自动生成UI设计的AI软件,只用30秒即可!用户只需通过简单的手绘图、文字描述或者图片,就能够自动生成相应的网页以及应用的HTML 和 CSS代码。这款工具通过其用户友好的界面和强大的 AI 功能,显著提升了前端开发的效率与代码的准确性,让设计师和开发者能够将更多的精力投入到创意和设计的深化上。https://js.design/special/article/auto-generated-page-ui-design.html
2.ai生成封面图封面图片在线智能生成创客贴ai,在线智能封面图片生成神器,视频封面/公众号封面/小红书封面等等皆可自动设计,输入关键词描述,ai智能制作封面图片。https://www.chuangkit.com/adlp2/277.html
3.一键生成设计素材网站图片免费下载一键生成包装设计图纸 一键生成包装设计图片 ai可以一键生成房子设计图吗 一键生成房屋设计图ai工具 ai一键生成店铺设计图 ai一键生成玉雕设计图app ai全教学一键生成设计图 ai一键生成产品设计图 ai一键生成房屋设计图 免费ai一键生成设计图 ai一键生成设计图 ai一键生成logo门头设计 ai免费logo设计一键生成 ai设计logohttps://www.zcool.com.cn/tag/ZMjU0OTg5Ng==.html
4.AIGC绘画设计——6个可以直接使用的AI绘画工具,可生成海报Midjourney是基于diffusion的AI图画艺术生成器。生成图片不局限于二次元人物,能够生成照片级精细的图.效果是所长用过的最惊艳AI图片生成器,也是最知名的,之所以放在这里是因为,如果不放它,这个AI生成图片的介绍将逊色很多。史上最强文本生成图像模型 2、Microsoft Designer https://blog.csdn.net/m0_64365896/article/details/144416858
5.高清美女写真一键生成,揭秘AI绘图工具的魅力与攻略!那么,有什么方法可以简单生成如此精美的图像呢?如果你也是个追求美感的小伙伴,或许你会对AI绘图工具产生浓厚的兴趣。今天,我就来和大家聊聊如何使用这些AI工具,轻松生成高清美女照片,让你的社交账号瞬间耀眼起来。通过这篇文章,你将了解到市场上几款热门的AI生成美女写真工具的特点与使用方法。https://m.sohu.com/a/837533654_122118477
6.自动生成设计图博客文章:自动生成设计图 自动生成设计图是一种方便快捷的工具,可以帮助设计师节省大量时间,并提高工作效率。随着设计行业的不断发展,越来越多的设计师开始使用自动生成设计图工具来辅助自己的工作。本文将介绍自动生成设计图的基本概念、优势、使用方法以及注意事项。 https://tool.a5.cn/article/show/77389.html
7.一种从cad设计图纸自动生成装修预算报价的方法和系统的制作方法[0001]本发明涉及室内装修设计领域,具体涉及一种从CAD设计图纸自动生成装修预算报价的方法和系统。【背景技术】[0002]随着房地产业的发展,室内装修成为了现在热门的行业之一。进行室内装修之前,一般要根据CAD图纸进行装修报价。在现有技术中,设计师拿到CAD图纸后,必须人工湖将图纸中的内容识别并总结判断出来,并自行根据https://www.xjishu.com/zhuanli/55/CN104899403.html
8.1张图自动生成10000套方案,这个软件堪比鹿班!优设网问得好!今天要给大家介绍的这款AI插件,就能够让你瞬间化身为「设计界核武器」。OK键一敲,立刻出图20000000张设计稿件分分钟塞爆甲方爸爸电脑硬盘的 HP smartstream D4D。 一句话概况其功能就是:设计1套源文件,自动生成千万设计稿!让喜欢修改的甲方淹死在稿件的海洋里! https://www.uisdc.com/automatically-generate-10000-sets-of-plans
9.Sketch怎么切图标注?在线标注,自动生成教程!在线标注,自动生成教程! UI设计师使用Sketch软件完成设计视觉稿后,在将它交付给开发人员进行开发前,需要对视觉稿进行Sketch标注,以便开发能够更好的还原设计视觉稿上的元素间距、字号、图标大小等尺寸。然而在实际工作时,设计师常常面对的是大量的设计图的元素标注,所以这将是一件特别细致又繁琐的工作。https://pixso.cn/designskills/how-to-cut-sketch/
10.Dreamweaver(拖拽图形设计自动生成代码)Dreamweaver(拖拽图形设计自动生成代码),中文名称 "梦想编织者",最初为美国MACROMEDIA公司开发,2005年被Adobe公司收购。DW是集网页制作和管理网站于一身的所见即所得网页代码编辑器。利用对 HTML、CSS、JavaScript等内容的支持,设计师和程序员可以在几乎任何地方快速制作和进行网站建设 Dreamweaver 2018-05-04 上传 大小https://www.iteye.com/resource/shengjieerlang-10391914
11.AI景观设计线稿平面图自动生成园林设计AI景观设计线稿平面图可以自动生成园林设计图了,AI已经成为内容创作者的灵感来源和效率工具,而在景观设计行业,我们也看到AI助力下,在设计稿的生成中,提升了数倍效率,正是如此,也迎来了更多企业的关注,想融入自己公司的项目场景之中。 神采PromeAI在不断更新和变化中,这一次的更新我们将更靠近商业化应用,用AI参与景https://828ai.com/articles/9.html
12.海迅家具设计生产软件教程零代码企业数字化知识站智能设计功能还包括自动生成图纸的功能。用户只需点击“生成图纸”按钮,系统就会自动生成符合标准的设计图纸,包括平面图、立面图和剖面图等。生成的图纸可以直接用于生产,减少了手工绘制图纸的时间和误差。 三、自动排版与材料优化 自动排版和材料优化是海迅家具设计生产软件的另一个重要功能。这两个功能能够帮助用户最大https://www.jiandaoyun.com/blog/article/452664/
13.2023设计神器及资源推荐:AI自动生成图工具插件等,别错过1、Midjourney 自动绘图 网址:https://midjourney.gitbook.io/docs/ 这是一个输入文字,生成效果十分惊艳,在官网主页可以看到其他人的生成结果,不少图片简直是建模级别的精细程度。 无论是人物、场景、动物亦或是各种艺术风格都拿捏到位。 甚至还有的图真实程度媲美“照片” http://cn.eagle.cool/blog/post/ai-design-tools-and-resources
14.实测AI建筑设计软件的自动生成效果图能力人工智能经过实测,发现建筑设计效果图软件使用AI自动生成效果图的质量非常高!这大大提高了建筑设计师的工作效率! 该句话可以重写为:本句仅用于展示触站AI软件的生成效果,版权和解释权归触站AI所有 素描模式: ai软件的出现在建筑设计领域产生了巨大的影响,它们能够迅速生成建筑设计效果图从而提高设计效率。同时,它们也能够帮助https://www.php.cn/faq/588331.html
15.Sketch设计稿自动生成设计标注切图,灵活调用图标库素材库腾讯CoDesign腾讯旗下产品设计研发一站式协作平台,支持在线导入预览 Sketch 设计稿、自动生成设计标注切图,灵活调用图标库、素材库,支持多种插件上传,让产品设计更轻松高效。 所在地: 深圳 收录时间: 2023-02-07 打开网站手机查看 研发项目管理# Adobe插件# CoDesign# sketch插件# 交互设计# 产品设计协作# 原型图#https://www.e4w.cn/sites/2488.html
16.设计师必看:PS一分钟自动生成完美包装效果图教程photoshop教程设计师苦逼的人生是无处不在的,辛辛苦苦做好一款包装设计,还得花大半天去做个效果图,更有甚者,客户完全产品还没有出来,已经开始做推广,直接拿效果图去做市场!所以今天小编为大家带来了PS一分钟自动生成完美包装效果图教程,作者是tuker,感谢他的分享! https://www.jb51.net/photoshop/367505.html
17.国产三维管道设计之光ZWPD3.0系列软件功能介绍对比传统式P&ID,它可以更方便更便捷的制作加工工艺流程图,并能自动生成工艺专业设计所必须的工程图纸、表格,比如管道表、管路特点表,闸阀表等。在此基础上,P&ID图型里的特性能够关联到数据库系统,为三维建模带来了数据信息基本。 中望CAD平台 AutoCAD平台 浩辰CAD平台http://www.zwpim.com/pid.html
18.带你研究solidworks配置功能的工序图自动生成方法介绍了一种利用SolidWorks组态功能自动生成工艺图的方法。该方法采用面向制造的设计,通过建立配置与过程的对应关系,生成过程图。与传统方法相比,该方法能有效利用设计过程中的三维信息,具有较大的通用性,为解决CAPP中工艺图的自动生成提供了一种新的途径。工艺图是工艺设计结果的图形表达,它反映了工件的整体轮廓、工艺的https://www.0512sw.cn/article-item-80.html
19.图牛助理电商工具箱PS插件(提高电商设计效率的必备工具)癞蛤蟆随着电商行业的不断发展,电商设计也逐渐成为了一个重要的领域。而作为电商设计师,如何提高设计效率,让设计更加高效、精准,成为了一个亟待解决的问题。而图牛助理电商工具箱PS插件就是为此而生的设计工具,它https://new.91laihama.com/taobaozx/71228.html
20.笔格设计笔格设计(原比格设计)是一款高效的AI图片设计工具,能够根据用户输入的描述词或上传的图片,自动生成具有特定风格和尺寸的图片。主要功能包括文生图、图生图、艺术背景生成、AI文案创作、智能图片消除、图片清晰度提升以及海报设计等。https://ai-bot.cn/sites/14748.html
21.案例分享电商设计师视角下的AI解读与应用AIGC 作为一种新兴的技术,可以作为辅助提升设计的效率,也可以为设计师的创作提供更多的可能性。作为电商类产品的B端设计师,如何看待 AIGC 对于生产端: 自动化设计:自动生成设计方案,减少设计师劳动力成本。设计师可以将更多时间和精力集中于审查和优化设计。 https://www.onxue.com/7747.html
22.“文生图”再升级!学习个性化参照,无限生成多样图片,轻松设计玩具除了文本引导的提示编辑,学习到的提示分布还可以通过缩放方差来控制生成的多样性。如下图所示,当缩放系数 γ 变大时,生成的图像更具随机性,而缩放系数等于 0 时则生成图片的多样性和随机性显著下降。 不同的提示分布还可以通过按权重相加来得到生成具有混合概念的图片的效果,如下图所示,按不同比例混合中国山水画和https://www.ithome.com/0/745/614.htm