前端智能化——图层抽象与优化

本文介绍了前端智能化中图层处理的关键步骤,包括图层抽象和优化。图层抽象将设计稿图层转化为Image、Shape和Text三种UI节点,优化则涉及图层清洗和合并。图层清洗通过剔除透明、被覆盖、颜色相同或位于边界外的图层,减少冗余。图层合并通过判断相交关系合并相邻图层,提升代码还原的准确性。这一过程旨在生成通用且有效的UI节点,为后续布局和代码生成奠定基础。
摘要由CSDN通过智能技术生成

在设计稿生成代码流程中,我们需要先将图层解析为UI节点,而后再通过布局算法生成代码。

设计稿转代码基本流程

作为前端智能化的第一步,解析的UI数据关乎后续的代码还原质量,因此需要一套方案来保证解析阶段能输出通用而有效的UI节点。

针对通用性和有效两个目标,我们将解析过程分为图层抽象和图层优化两个步骤。

图层抽象

为了实现UI Nodes通用性,兼容不同的设计稿类型,如psd,sketch和xd等,我们将设计稿的图层抽象为图片Image、图形Shape、文本Text三种类型的UI节点:

  1. Shape,可用样式实现的形状图层,如纯色带边框的矩形、圆角矩形、圆形等;
  2. Text,可用样式实现的文本图层;
  3. Image,不可用样式实现的图层,如复杂图形、带纹理的形状、位图和艺术字等;

除了图层类型抽象,其它图层信息也将抽象为图元属性,可以分为三种:

  • 基础属性,比如名字、id、图层类型
  • 位置属性,比如宽高、坐标
  • 样式属性,描述图层颜色和边框等

UINode属性

UINode类接口的具体代码如下:

/**
 * 图层类接口
 */
interface UINode {
   
	 // 图层id
	  id: string = '';
	 // 图层类型,包括Text,Shape,Image,Group
	  type: string;
	 // 图层名称
	  name: string = '';
	 // 宽度
	  width: number = 0;
	 // 高度
	  height: number = 0;
	 // 位置:距离左边界距离
	  abX: number = 0;
	 // 位置:距离上边界距离
	  abY: number = 0;
	 // 图层样式
	  styles: UIStyle = {
   };
}

图层优化

解析后的图层往往包含一些无效的信息,比如图层冗余、图层零散的问题,我们需要通过数据预处理来优化UI节点信息,提高代码还原的精准度。

预处理阶段主要分为两步:1. 图层清洗 2. 图层合并;

1. 图层清洗

设计稿中会有不可见图层,删除它们不会影响视觉效果,这些图层是冗余的。
设计稿存在不可见图层

图层清洗,就是针对不可见的图层进行剔除,分为以下四种情况:

1.1 图层样式透明无背景;

const isTransparentStyle = function(node: UINode): boolean {
   
  const {
    background, border, shadows } = node.styles;
  return (
    !node.childNum
    && (node.isTransparent
      || (background
        && background.hasOpacity
        && background.type === 'color'
        && +background.color.a === 0)
      || (border && +border.color.a === 0)
      || (node.type === UINodeTypes.Shape && !background && !border && !shadows
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值