在没有使用“自动生成标注、切图及代码”之前,互联网产品开发需要设计师将设计稿进行切图,并要手动标记大量的标注,工作量琐碎且繁杂。如果多个项目并行,设计图的数量会非常之多,设计师标记标注和做切图会非常耗时,研发也要按设计稿效果逐行手写样式代码一样非常耗时,而且设计师和研发还需耗费大量的时间与研发沟通。
将设计师制作的设计图上传至我们的标注服务,后台服务将上传的设计稿进行解压并自动切图,并将解压后的文件信息通过算法处理为标注信息,再将标注信息还原为可视化的H5页面。研发工程师可以在后台上实时预览设计稿的标注,并随时下载切图。
设计稿解析的越完善,分类的越详细,在代码分析上就越准确。经过图层的重构、分类、组合等流程,最终保证了整体布局的合理性,同时也保证了标注的准确性。
设计师上传设计稿之后,会提取设计图中的图层信息,以获取有图层元素的位置、大小、形状和颜色等信息。
使用jszip这个库将设计稿中的图层信息提取出来,并将矢量数据转换为json格式。下图展示的就是从设计稿中提取文件的数据结构。
将获取的信息进行预处理、筛选和过滤,将样式映射为css 代码,并且将图片资源导出并上传至服务器。
首先设计稿的坐标体系,是以窗口左上角为起始坐标的,即(x:0,y:0),那么从中我们可以发现,如果坐标x,y存在交集,那么他们之间就可能是父子关系,如果存在并集那么可能是同级关系。那么对这些存在的关联进行归类,可以用代码遍历进行筛选。根据坐标轴x、y的差值,判定是在同一行或者同一列,使用flex 布局进行约束。
标注功能的实现大致分为四步:
以上就是标注功能的概览,下面展开说明实现细节
通过以上步骤将图层数据处理成json文件并存储在数据库。该json文件包含了目标页面所需要的全部信息,包括容器、图片、文本等元素,这些元素都依赖一些共同的属性,比如尺寸(size)、位置(posititon),同时又各自有着自己特殊的属性,比如:
在研发过程中,对视觉稿的依赖度很高。基于json数据渲染出的页面还原度虽然很高,但相比原始图片还是有细微差别的。为了保证更好的开发体验,这里做了如下优化处理:
根据json数据里的元素类型,封装成不同的组件,每个组件都拥有完整的样式信息,如下图是一个文本组件的数据。核心属性有:
将组件拼接成页面骨架并渲染,该过程需要根据json 数据的属性特征,按需渲染组件,过程类似于拼图,最终将组件组装为一个完整的骨架图。骨架图是生成辅助线的基础,将页面所有的元素用线条表达出来,如下图所有的方块都代表一个页面元素的布局。
该过程将设计稿的渲染图作为背景图,将骨架屏蒙在渲染图上,视觉上你看到的将是和设计图1:1 的效果。因为渲染图上方有骨架图,当鼠标选中对应的元素的时候,等同于选中了骨架图,实际选中的是该骨架图对应的组件,由于组件本身包含了全部的样式信息,包括位置和宽高,那么很容易就能给出相应的标注信息。
当用户选中设计稿元素时,会高亮显示辅助线,并会自动把间距、高度、宽度等相关信息显示出来,具体实现方案如下:
开发的标注效果如下:
以上是如何实现设计稿标注、切图以及代码的核心技术步骤。包含如何提取设计稿、如何做css代码映射、如何实现标注页面等。
自动生成标注、切图及代码生成技术是一种旨在提高企业产品研发效率,优化设计到开发流程,加速研发进度,以及辅助前端开发人员探索前端智能化道路的技术。
yuhui,现任信也科技移动应用前端研发专家;CC,现任信也科技移动前端研发资深专家
Java、大数据、前端、测试等各种技术岗位热招中,欢迎扫码了解~