基于草图的网页生成方法和系统与流程

文档序号:24055648发布日期:2021-02-26 10:26阅读:106来源:国知局
[0001]本申请实施例涉及计算机
技术领域
:,尤其涉及一种基于草图的网页生成方法、系统、计算机设备及计算机可读存储介质。
背景技术
::[0002]随着互联网的发展,用户对页面的要求越来越高,无论是视觉设计、交互或前端都变得越来越专业,用户需要更漂亮的设计和更强大的技术来实现web页面,促进以下新技术:html5(hypertextmarkuplanguage5,超文本标记语言第5版本)和css3(cascadingstylesheets3,层叠样式表第三版本)越来越普及。另外,各种屏幕尺寸的移动终端也在不断的推陈出新,从而带来了新的挑战:前端需要兼容的屏幕尺寸越来越多。基于上述趋势,web开发流程变得越来越细分化,设计和开发逐渐分离成两个独立工作:ui设计和前端开发。所述web开发流程逐步演变为:ui设计师和前端开发工程师分享他们的想法,尽力表达出潜在的客户场景或工作流程;如果双方达成一致意见,ui设计师可以在白纸或白板上将草图画出来,并由前端开发工程师手动将草图转化为html代码。然而,上述转化过程常常需要耗费很多时间和精力,有可能会拖慢产品发布的时间。[0003]可知,现有的web开发流程中,转化环节生成的页面代码是通过人工编写的,网页开发效率低下。因此,有必要提供一种能够自动生成页面代码的技术,以提高网页的开发效率。技术实现要素:[0004]本申请实施例的目的是提供一种基于草图的网页生成方法、系统、计算机设备及计算机可读存储介质,用于解决传统网页开发效率低下、不能能够自动生成页面代码的问题。[0005]本申请实施例的第一方面提供了一种基于草图的网页生成方法,所述方法包括:识别所述草图以获取多个元素的元素信息,每个元素对应所述草图中的一个草图图案;根据所述多个元素的元素信息,生成语法树;根据所述语法树,生成网页代码;及根据所述网页代码,生成与所述草图对应的目标网页。[0006]基于第一方面的第二方面,每个元素分别通过预先定义的通用元素进行表示,所述每个元素的元素信息是按照所述通用元素的数据结构进行存储的;其中,所述通用元素的数据结构包括多个数据节点,所述多个数据节点包括元素标识、元素外部尺寸、元素内部尺寸、子元素列表数组、元素类型、父元素对象和背景颜色值。[0007]基于第一方面的第三方面,识别所述草图以获取多个元素的元素信息,包括:沿第一方向对所述草图进行第一次分割操作,以得到与所述第一次分割操作得到的多个区域,并为所述第一次分割操作得到的各个区域分别创建一个相应的元素;重复执行第i次分割操作,直至当i=j时,从所述草图中分割出所有的原子区域:对所述第i-1次分割操作得到的各个区域分别进行第i次分割操作:将所述第i-1次分割操作得到的多个区域中的不可分割区域确定为相应的原子区域;将所述第i-1次分割操作得到的多个区域中的可分割区域继续执行所述第i次分割操作,以得到与所述第i次分割操作得到的多个区域,并为所述第i次分割操作得到的各个区域分别创建一个相应的元素;其中,i是初始值为2的正整数;当i为奇数时,所述第i次分割操作是沿所述第一方向进行分割的;当i为偶数时,所述第i次分割操作是沿第二方向进行分割的。[0008]基于第一方面的第四方面,识别所述草图以获取多个元素的元素信息,包括:裁剪所述草图中的边缘空白区域,得到所述草图中的待处理区域;沿第一方向对所述待处理区域进行第一次分割操作,以得到与所述第一次分割操作得到的多个区域,并为所述第一次分割操作得到的各个区域分别创建一个相应的元素;重复执行第i次分割操作,直至当i=j时,从所述草图中分割出所有的原子区域:对所述第i-1次分割操作得到的各个区域分别进行第i次分割操作:将所述第i-1次分割操作得到的多个区域中的不可分割区域确定为相应的原子区域;将所述第i-1次分割操作得到的多个区域中的可分割区域继续执行所述第i次分割操作,以得到与所述第i次分割操作得到的多个区域,并为所述第i次分割操作得到的各个区域分别创建一个相应的元素;其中,i是初始值为2的正整数;当i为奇数时,所述第i次分割操作是沿所述第一方向进行分割的;当i为偶数时,所述第i次分割操作是沿第二方向进行分割的。[0009]基于第一方面的第五方面,识别所述草图以获取多个元素的元素信息,包括:处理所述草图的背景颜色,以得到处理后的草图;裁剪所述处理后的草图中的边缘空白区域,得到所述处理后的草图中的待处理区域;沿第一方向对所述待处理区域进行第一次分割操作,以得到与所述第一次分割操作得到的多个区域,并为所述第一次分割操作得到的各个区域分别创建一个相应的元素;重复执行第i次分割操作,直至当i=j时,从所述草图中分割出所有的原子区域:对所述第i-1次分割操作得到的各个区域分别进行第i次分割操作:将所述第i-1次分割操作得到的多个区域中的不可分割区域确定为相应的原子区域;将所述第i-1次分割操作得到的多个区域中的可分割区域继续执行所述第i次分割操作,以得到与所述第i次分割操作得到的多个区域,并为所述第i次分割操作得到的各个区域分别创建一个相应的元素;其中,i是初始值为2的正整数;当i为奇数时,所述第i次分割操作是沿所述第一方向进行分割的;当i为偶数时,所述第i次分割操作是沿第二方向进行分割的。[0010]基于第五方面的第六方面,裁剪所述处理后的草图中的边缘空白区域,得到所述处理后的草图中的待处理区域,包括:从所述处理后的草图的上边缘起始,从上向下扫描所述处理后的草图,直至扫描到包括非空白像素的第m行;从所述处理后的草图的下边缘起始,从下向上扫描所述处理后的草图,直至扫描到包括非空白像素的第n行;从所述处理后的草图的左边缘起始,从左向右扫描所述处理后的草图,直至扫描到包括非空白像素的第p列;从所述处理后的草图的右边缘起始,从右向左扫描所述处理后的草图,直至扫描到包括非空白像素的第q列;根据所述处理后的草图中的第m行、第n行、第p列和第q列,确定所述处理后的草图中的边缘空白区域;及裁剪所述处理后的草图中的所述边缘空白区域,以得到所述待处理区域。[0011]基于第三、四或五方面的第七方面,还包括:在每个原子区域中提取出一个最小矩形区域;将每个原子区域中的最小矩形区域的位置信息确定为每个原子区域的相应元素的位置信息;所述最小矩形区域是指用于容纳相应原子区域中的草图图案的最小矩形区域;该最小矩形区域的第一边方向对应于所述第一方向,且第二边方向对应于所述第二方向。[0012]基于第三、四或五方面的第八方面,所述多个元素包括第一元素,所述第一元素对应于第一原子区域,所述第一原子区域对应有第一最小矩形区域;[0013]识别所述草图以获取多个元素的元素信息,包括:根据所述第一最小矩形区域判断所述第一元素是否为容器元素,所述容器元素包括普通容器元素和表格元素;及如果确定所述第一元素为所述容器元素,则判断所述第一元素是否为表格元素。[0014]基于第八方面的第九方面,根据所述第一最小矩形区域判断所述第一元素是否为容器元素,包括:获取所述第一最小矩形区域内部的空白区域在所述第一最小矩形区域中的占比;如果所述占比大于预设阈值,则确定所述第一元素是容器元素;及如果所述占比没有大于所述预设阈值,则确定所述第一元素不是所述容器元素。[0015]基于第八方面的第十方面,根据所述第一最小矩形区域判断所述第一元素是否为容器元素,包括:获取所述第一最小矩形区域的其中一个或多个样本行中的空白像素占比或一个或多个样本列中的空白像素占比;及如果所述一个或多个样本行中的空白像素占比大于所述预设阈值或所述一个或多个样本列中的空白像素占比大于所述预设阈值,则确定所述第一元素是容器元素。[0016]基于第八方面的第十一方面,如果确定所述第一元素为所述容器元素,则判断所述第一元素是否为表格元素,包括:去除所述第一最小矩形区域中的元素边框,以得到第一无边框最小矩形区域;沿所述第一方向或所述第二方向,对所述第一无边框最小矩形区域进行扫描,以确定所述第一无边框最小矩形区域是否能够被分割;如果所述第一无边框最小矩形区域能够被分割,则确定所述第一元素为所述表格元素;及如果所述第一无边框最小矩形区域不能够被分割,则确定所述第一元素为所述普通容器元素。[0017]基于第十一方面的第十二方面,去除所述第一最小矩形区域中的元素边框,以得到第一无边框最小矩形区域,包括:以从边缘到中心的方向,探测所述第一最小矩形区域中的多个连续非空白像素;其中,每个连续非空白像素与所述多个连续非空白像素中的至少一个其他连续非空白像素是相邻的且与这个其他连续非空白像素之间的颜色差异在预设范围之内;将所述多个连续非空白像素构成的非空白像素区域确定为所述元素边框;将所述元素边框从所述第一最小矩形区域中去除,以得到所述第一无边框最小矩形区域。[0018]基于第十一方面的第十三方面,去除所述第一最小矩形区域中的元素边框,以得到第一无边框最小矩形区域,包括:从所第一最小矩形区域的左边缘起始,从左向右读取所述第一最小矩形区域的第一组连续非空白像素;从所述第一最小矩形区域的右边缘起始,从右向左读取所述第一最小矩形区域的第二组连续非空白像素;从所述第一最小矩形区域的下边缘起始,从下向上读取所述第一最小矩形区域的第三组连续非空白像素;从所述第一最小矩形区域的上边缘起始,从上向下读取所述第一最小矩形区域的第四组连续非空白像素;根据所述第一、第二、第三和第四组连续非空白像素,确定所述元素边框;将所述元素边框从所述第一最小矩形区域中去除,以得到所述第一无边框最小矩形区域。[0019]基于第十一方面的第十四方面,确定所述第一无边框最小矩形区域是否能够被分割,包括:判断所述第一无边框最小矩形区域是否包括一个或多个空白像素组;其中,所述空白像素组包括空白像素行、多个连续空白像素行、空白像素列或多个连续空白像素列;及如果所述第一无边框最小矩形区域包括一个或多个空白像素组,则确定所述第一无边框最小矩形区域能够被分割。[0020]基于第八方面的第十五方面,还包括:如果所述第一元素为所述表格元素,则从所述第一最小矩形区域中获取多个子元素。[0021]基于第十五方面的第十六方面,从所述第一最小矩形区域中获取多个子元素,包括:去除所述第一最小矩形区域中的元素边框,以得到第一无边框最小矩形区域;及沿所述第一方向或第二方向,对所述第一无边框最小矩形区域进行扫描,以分割得到多个子元素区域;所述每个子元素区域均为用于容纳相应的子元素图案的最小矩形区域;及为每个子元素区域分别生成相应的子元素,以得到所述第一最小矩形区域的所述多个子元素。[0022]基于第十六方面的第十七方面,从所述第一最小矩形区域中获取多个子元素,还包括:判断所述多个子元素区域沿所述第一方向或所述第二方向是否是单一排列的;如果所述述多个子元素区域沿所述第一方向或所述第二方向是单一排列的,则将所述多个子元素确定为所述第一元素的子级;及如果所述述多个子元素区域沿所述第一方向或所述第二方向不是单一排列的,则执行以下操作以得到三层元素结构:插入一个新的容器元素;将所述多个子元素确定为所述插入的容器元素的子级;及将所述插入的容器元素确定为所述第一元素的子级。[0023]本申请实施例的一个方面又提供了一种计算机设备,包括存储器、处理器以及存储在存储器上并可在处理器上运行的计算机程序,所述处理器执行所述计算机程序时实现如上述基于草图的网页生成方法的步骤。[0024]本申请实施例的一个方面又提供了一种计算机可读存储介质,包括存储器、处理器以及存储在存储器上并可在处理器上运行的计算机程序,所述处理器执行所述计算机程序时实现如上述基于草图的网页生成方法的步骤。[0025]本申请实施例提供的基于草图的网页生成方法、系统、计算机设备及计算机可读存储介质,可以通过草图识别得到用于网页生成的网页布局和多个元素的元素信息,并基于这些信息生成语法树并进而生成网页代码。通过以上内容可以知道,本申请实施例可以机器自动生成页面代码和相应的目标页面,不需要手动将所述草图转化为网页代码,从而提高网页的开发效率。附图说明[0026]图1示意性示出了根据本申请实施例一的基于草图的网页生成方法的流程图;[0027]图2示意性示出了图1中步骤s100的子步骤;[0028]图3示意性示出了示例性草图的一部分;[0029]图4示意性示出了图1中步骤s100的另一子步骤;[0030]图5示意性示出了图1中步骤s100的另一子步骤;[0031]图6示意性示出了图5中步骤s500的子步骤;[0032]图7示意性示出了图5中步骤s502的子步骤;[0033]图8示意性示出了图5中的新增步骤;[0034]图9示意性示出了容器元素对应的草图图案和非容器元素对应的草图图案;[0035]图10示意性示出了图5中的新增步骤;[0036]图11示意性示出了图10中步骤s1000的子步骤;[0037]图12示意性示出了图10中步骤s1000的另一子步骤;[0038]图13示意性示出了图12中步骤s1202的子步骤;[0039]图14示意性示出了图12中步骤s1202的另一子步骤;[0040]图15示意性示出了示例性的第一元素对应的草图图案;[0041]图16示意性示出了图10中步骤s1002的另一子步骤;[0042]图17示意性示出了图16中步骤s1600的子步骤;[0043]图18示意性示出了图16中步骤s1600的另一子步骤;[0044]图19示意性示出了一个容器元素对应的草图图案;[0045]图20示意性示出了图16中步骤s1602的子步骤;[0046]图21示意性示出了图10中的新增步骤;[0047]图22示意性示出了图21中步骤s1004的子步骤;[0048]图23示意性示出了图21中步骤s1004的另一子步骤;[0049]图24示意性示出了示例性草图;[0050]图25示意性示出了去背景颜色之后的草图;[0051]图26示意性示出了去边缘空白区域得到的待处理区域;[0052]图27示意性示出了第一次分割操作的分割线;[0053]图28示意性示出了根据本申请实施例二的基于草图的网页生成系统的框图;及[0054]图29示意性示出了根据本申请实施例三的计算机设备的硬件架构示意图。具体实施方式[0055]为了使本申请的目的、技术方案及优点更加清楚明白,以下结合附图及实施例,对本申请进行进一步详细说明。应当理解,此处所描述的具体实施例仅用以解释本申请,并不用于限定本申请。基于本申请中的实施例,本领域普通技术人员在没有做出创造性劳动前提下所获得的所有其他实施例,都属于本申请保护的范围。[0056]需要说明的是,在本申请实施例中涉及“第一”、“第二”等的描述仅用于描述目的,而不能理解为指示或暗示其相对重要性或者隐含指明所指示的技术特征的数量。由此,限定有“第一”、“第二”的特征可以明示或者隐含地包括至少一个该特征。另外,各个实施例之间的技术方案可以相互结合,但是必须是以本领域普通技术人员能够实现为基础,当技术方案的结合出现相互矛盾或无法实现时应当认为这种技术方案的结合不存在,也不在本申请要求的保护范围之内。[0057]名词解释:[0058]html(hypertextmarkuplanguage,超文本标记语言),其可以通过在文本文件中添加各种标记符,来告诉浏览器如何显示其中的内容(如:文字如何处理,画面如何安排,图片如何显示等)。浏览器会按顺序阅读html文件,然后根据标记符解释和显示其标记的内容。html通过结合使用其他的web技术(如:脚本语言、公共网关接口、组件等),可以创造出功能强大的网页。因而,html超级文本标记语言也是万维网(web)的基础。[0059]css(cascadingstylesheets,层叠样式表),是一种用来表现html或xml等文件样式的计算机语言,可以定义样式结构如字体、颜色、位置等。css常被用于描述网页上的信息格式化和现实的方式。css不仅可以静态地修饰网页,还可以配合各种脚本语言动态地对网页各元素进行格式化。css样式可以直接存储于html网页或者单独的样式单文件。无论哪一种方式,样式单包含将样式应用到指定类型的元素的规则。外部使用时,样式单规则被放置在一个带有文件扩展名“.css”的外部样式单文档中。样式规则是可应用于网页中的元素,如文本段落或链接的格式化指令。样式规则由一个或多个样式属性及其值组成。内部样式单直接放在网页中,外部样式单保存在独立的文档中,网页通过一个特殊标签链接外部样式文件。[0060]javascript,属于直译式脚本语言,是一种动态类型、弱类型、基于原型的语言,内置支持类型。javascript的解释器被称为javascript引擎,广泛应用于各类客户端(如浏览器)中。javascript可以给html网页增加动态功能。html允许javascript通过dom(documentobjectmodel,文档对象模型)更改html元素的css样式。[0061]canvas,又称之为画板,是html5的一个新特性。html5canvas本质上是一个位图画布,其上绘制的图形是不可缩放的。html5canvas具有两方面的优势:首先,不需要将所绘制图像中的每个图元当做对象存储,性能非常好;其次,在其他编程语言现有的优秀二绘图api的基础上实现canvasapi相对来说简单,因此canvas被纳入了html5规范。canvas绘图的应用非常广泛,既可以绘制静态的展示性的统计图表,也可以根据用户输入进行交互式的绘图,包括各种矩形、弧形、不规则图形等。[0062]jpeg,其是由联合图像专家组(jointphotographicexpertsgroup)开发的一种图像格式。大多数彩色和灰度图像都使用jpeg格式压缩图像,压缩比很大而且支持多种压缩级别的格式,当对图像的精度要求不高而存储空间又有限时,jpeg是一种理想的压缩方式。在worldwideweb和其它网上服务的html文档中,jpeg用于显示图片和其它连续色调的图像文档。jpeg支持cmyk、rgb和灰度颜色模式。jpeg格式保留rgb图像中的所有颜色信息,通过选择性地去掉数据来压缩文件。[0063]png(portablenetworkgraphics,便携式网络图形),也是一种图片文件格式,该格式的图片文件可以存储任何颜色深度的图像。png包括以下优点:支持高级别无损耗压缩、支持alpha通道透明度、支持伽玛校正、支持交错、受最新的web浏览器支持。[0064]现有的web开发流程可以包括如下:ui设计师和前端开发工程师分享他们的想法,尽力表达出潜在的客户场景或工作流程;如果双方达成一致意见,ui设计师可以在白纸或白板上将草图画出来,并由前端开发工程师手动将草图转化为html代码。然而,上述转化过程常常需要耗费很多时间和精力,有可能会拖慢产品发布的时间。在头脑风暴时,如果白纸或白板上手绘的草图能够通过机器自动转化成可以在浏览器中运行的代码,则在头脑风暴结束时我们就可以拥有一个已经由设计师、开发人员甚至客户验证过的网页原型,这将为网站和应用程序开发节省不少时间。[0065]以下实施例旨在自动生成页面代码的技术。[0066]实施例一[0067]图1示意性示出了根据本申请实施例一的基于草图的网页生成方法的流程图。可以理解,本方法实施例中的流程图不用于对执行步骤的顺序进行限定。下面以计算机设备为执行主体进行示例性描述。所述计算机设备包括,但不限于,平板电脑、膝上型计算机等。[0068]如图1所示,该基于草图的网页生成方法可以包括步骤s100~s106,其中:[0069]步骤s100,识别所述草图以获取多个元素的元素信息,每个元素对应所述草图中[0089]}[0090]如表1所示,各个数据节点介绍如下:[0091][0092]表1[0093]步骤s100中的识别所述草图以获取多个元素的元素信息,可以通过多种方式实现。具体如下。[0094]在示例性的实施例中,计算机设备为能够快速切割所述草图以获取多个元素的元素信息,所述步骤s100可以包括步骤s200~s202。步骤s200,沿第一方向对所述草图进行第一次分割操作,以得到与所述第一次分割操作得到的多个区域,并为所述第一次分割操作得到的各个区域分别创建一个相应的元素;步骤s202,重复执行第i次分割操作,直至当i=j时,从所述草图中分割出所有的原子区域:对所述第i-1次分割操作得到的各个区域分别进行第i次分割操作:将所述第i-1次分割操作得到的多个区域中的不可分割区域确定为相应的原子区域;将所述第i-1次分割操作得到的多个区域中的可分割区域继续执行所述第i次分割操作,以得到与所述第i次分割操作得到的多个区域,并为所述第i次分割操作得到的各个区域分别创建一个相应的元素;其中,i是初始值为2的正整数;当i为奇数时,所述第i次分割操作是沿所述第一方向进行分割的;当i为偶数时,所述第i次分割操作是沿第二方向进行分割的。[0095]作为示例,所述第一方向为纵向,也就是说,计算机设备以行为单位进行纵向逐行扫描;所述第二方向为横向,也就是说,计算机设备以列为单位进行横向逐列扫描。通过纵向逐行扫描和/或横向逐列扫描以识别出所述草图中的多个草图图案,可以称之为智能行列识别操作。由于用户早已习惯了滚动翻页的模式,因此大部分的网页都是采用限定最大宽度,然后滚动翻页的设计。因此,智能行列识别操作默认遵循先行后列的顺序,当然这个优先次序也可以根据需要调整。作为示例,如图3所示,计算机设备可以将示例性草图从上往下进行逐行扫描,以将所述示例性草图分割为三个区域,从而对应的创建与这三个区域一一对应的三个元素[0096]在示例性的实施例中,计算机设备为能够快速切割所述草图以得到所述多个原子区域,如图4所示,所述步骤s100可以包括步骤s400~s408:步骤s400、裁剪所述草图中的边缘空白区域,得到所述草图中的待处理区域。步骤s402、沿第一方向对所述待处理区域进行第一次分割操作,以得到与所述第一次分割操作得到的多个区域,并为所述第一次分割操作得到的各个区域分别创建一个相应的元素。步骤s404、重复执行第i次分割操作,直至当i=j时,从所述草图中分割出所有的原子区域:对所述第i-1次分割操作得到的各个区域分别进行第i次分割操作:将所述第i-1次分割操作得到的多个区域中的不可分割区域确定为相应的原子区域;将所述第i-1次分割操作得到的多个区域中的可分割区域继续执行所述第i次分割操作,以得到与所述第i次分割操作得到的多个区域,并为所述第i次分割操作得到的各个区域分别创建一个相应的元素。其中,i是初始值为2的正整数;当i为奇数时,所述第i次分割操作是沿所述第一方向进行分割的;当i为偶数时,所述第i次分割操作是沿第二方向进行分割的。在该示例性实施例中,如图3所示,计算机设备通过裁剪示例性草图中的边缘空白区域得到图3中的变化图1,可以得到更确切的ui设计布局和各个草图图案更确切的位置和尺寸,以得到更确切的网页布局和各个元素更确切的位置和尺寸。[0097]需要说明的是,“分割操作”不可能永远循环下去,总会在某次分割操作之后,就不可再循环分割了。在本实施例中,i是一个自变量,j是i在最后一次分割操作时的那个值,即在第j次分割操作之后,就不可再分割了,即此时已经分割得到了所述草图中所有的原子区域。[0098]作为示例,通过第一次分割操作得到一个区域a,并基于该区域a创建元素b;如果该区域a在第二分割操作中可以继续被分割为区域a1、a2,则基于所述区域a1创建元素b1、基于所述区域a2创建元素b2。其中,所述元素b和所述元素b1、b2之间是父子关系,该父子关系会被记录在所述元素b、b1、b2的元素信息中。[0099]作为示例,如图3所示的示例性草图,计算机设备可以去除示例性草图的边缘空白区域以得到所述示例性草图的待处理区域,接下来就是解析页面布局结构:首先创建一个元素拿到所述待处理区域的图像数据,从最上边开始向下逐行像素解析,当遇到第一个空白像素行时暂停,然后根据空白行之上的图像信息创建一个新的元素对象,然后继续解析直到遇到下一个空白像素行或最后一行。[0100]在示例性的实施例中,由于设计师在页面设计过程中会加入一些修饰性元素,这部分开发人员一般会用背景图片或css来实现,而这部分的内容由于形状的不规则性,对于现有的这些将设计稿转化为代码的转换工具而言,无疑带来了不小的挑战。本实施例通过背景识别技术,能够将主要元素从繁复的背景中抽取出来,从而解决掉大部分类似问题,提高识别率。计算机设备为能够快速切割所述草图以得到所述多个原子区域,如图5所示,所述步骤s100可以包括步骤s500~s510:步骤s500、处理所述草图的背景颜色,以得到处理后的草图;步骤s502、裁剪所述处理后的草图中的边缘空白区域,得到所述处理后的草图中的待处理区域;步骤s504、沿第一方向对所述待处理区域进行第一次分割操作,以得到与所述第一次分割操作得到的多个区域,并为所述第一次分割操作得到的各个区域分别创建一个相应的元素;步骤s506、重复执行第i次分割操作,直至当i=j时,从所述草图中分割出所有的原子区域:对所述第i-1次分割操作得到的各个区域分别进行第i次分割操作:将所述第i-1次分割操作得到的多个区域中的不可分割区域确定为相应的原子区域;将所述第i-1次分割操作得到的多个区域中的可分割区域继续执行所述第i次分割操作,以得到与所述第i次分割操作得到的多个区域,并为所述第i次分割操作得到的各个区域分别创建一个相应的元素。其中,i是初始值为2的正整数;当i为奇数时,所述第i次分割操作是沿所述第一方向进行分割的;当i为偶数时,所述第i次分割操作是沿第二方向进行分割的。[0101]在示例性的实施例中,如图6所示,所述处理所述草图的背景颜色以得到处理后的草图,可以通过步骤s600~s604实现:其中,步骤s600,获取所述草图中各个像素的像素颜色信息;步骤s602,根据预设颜色信息和所述各个像素的像素颜色信息,确定所述草图中的多个背景像素;步骤s604,将所述多个背景像素的像素颜色调整为单一颜色,以清理所述草图的背景颜色。[0102]作为示例,计算机设备可以通过canvas识别所述草图。具体实现可以如下:在canvas中,计算机设备可以通过getimagedata()方法读取指定位置像素点的色值信息;计算该色值和给定背景颜色色值的差异值;如果该差异值在预先给定阈值内,则认为该像素点是背景像素;如果该差异值不在预先给定阈值内,则认为该像素点是非背景像素(即,元素像素)。具体而言,getimagedata()方法返回的imagedata对象的data属性中以数组形式存放该像素的rgba值,即[r-红色(0-255),g-绿色(0-255),b-蓝色(0-255),a-alpha通道(0-255;0是透明的,255是完全可见的)],计算机设备可以计算getimagedata()方法返回的rgba和所述给定背景颜色色值的rgba之间的差值,确定该差值否在给定范围内。[0103]在示例性的实施例中,如图7所示,步骤s502可以通过步骤s700~s710实现:其中,步骤s700,从所述处理后的草图的上边缘起始,从上向下扫描所述处理后的草图,直至扫描到包括非空白像素的第m行;步骤s702,从所述处理后的草图的下边缘起始,从下向上扫描所述处理后的草图,直至扫描到包括非空白像素的第n行;步骤s704,从所述处理后的草图的左边缘起始,从左向右扫描所述处理后的草图,直至扫描到包括非空白像素的第p列;步骤s706,从所述处理后的草图的右边缘起始,从右向左扫描所述处理后的草图,直至扫描到包括非空白像素的第q列;步骤s708,根据所述处理后的草图中的第m行、第n行、第p列和第q列,确定所述处理后的草图中的边缘空白区域;步骤s710,裁剪所述处理后的草图中的所述边缘空白区域,以得到所述待处理区域。[0104]通过上述的智能行列识别法,得到了多个原子区域,每个原子区域中对应有一个草图图案,草图图案的位置、尺寸等信息,会直接影响到与之对应的元素的位置、尺寸信息。当这个草图图案周围还有空白区域时,则会影响到对应元素的outer:{ystart,yend,xstart,xend},因此有必要进行元素空白去除操作,以提升对应元素的上述信息的准确性,即提升页面布局的准确性。在示例性的实施例中,如图8所示,还包括如下步骤:步骤s800,在每个原子区域中提取出一个最小矩形区域;步骤s802,将每个原子区域中的最小矩形区域的位置信息确定为每个原子区域的相应元素的位置信息。所述最小矩形区域是指用于容纳相应原子区域中的草图图案的最小矩形区域;该最小矩形区域的第一边方向对应于所述第一方向,且第二边方向对应于所述第二方向。[0105]作为示例,如图9所示,计算机设备要要确定一个元素确切的位置及尺寸,需要先去除这个元素在所述草图中对应的草图图案周边的空白去除。在本实施例中,空白去除操作可以如下:按照先上后下,先左后右的顺序依次去掉空白像素,从而得到这个元素真实尺寸。需要说明的是,由于页面元素的尺寸大都是由元素的宽度和高度决定,也即其所占据的区域大多以矩形方式出现,因此去除空白的方法并不是以直观的去除元素周边所有空白为准(见上图最后一张),而是保留能够框住元素的最小矩形为准。在具体操作中对于上部的空白,以行的形式从最上边向下面逐行判断是否属于背景,是则继续,否则表示上部空白去除完毕。对于下部空白,判断方法和上部一致,只是方向是从最下一行向上逐行判断。对于左边的空白,以列的形式从最左边向右边逐列判断是否属于背景,是则继续,否则表示左边空白去除完毕。右边空白判断规则和左边一致,只是方向是从右向左。[0106]在示例性的实施例中,如前文所示,网页可能包括不同种类的多个元素,所述多个元素可能包括一些基本元素(如,按钮、输入框、图片、段落)和一些由基本组成的复杂元素(如,对话框、地域选择器)。面对所述草图中具有表格元素或者具有表格中嵌套表格的情形,现有技术的识别率往往很低、且无法完整识别、识别速度慢、操作配置复杂、学习成本比较高,而且生成的网页代码可读性不高,缺乏语义组织。为解决上述缺陷,如图10所示,所述步骤s100可以还包括步骤s1000~s1002。为了方面表示,下面以所述多个元素中的第一元素为例,所述第一元素对应于第一原子区域,该第一原子区域对应有第一最小矩形区域(即能够框住该第一原子区域中的草图图案的最小矩形区域)。步骤s1000,根据所述第一最小矩形区域判断所述第一元素是否为容器元素,所述容器元素包括普通容器元素和表格元素;步骤s1002,如果确定所述第一元素为所述容器元素,则判断所述第一元素是否为表格元素。[0107]判断所述第一元素是否为容器元素可以由多个实现方式。如以下提供的两种示例性方式:[0108]示例性方式一:如图11所示,所述步骤s1000可以还包括步骤s1100~s1102。步骤s1100,获取所述第一最小矩形区域内部的空白区域在所述第一最小矩形区域中的占比;步骤s1102,如果所述占比大于预设阈值,则确定所述第一元素是容器元素;步骤s1104,如果所述占比没有大于所述预设阈值,则确定所述第一元素不是所述容器元素。[0109]示例性方式二:如图12所示,所述步骤s1000可以还包括步骤s1200~s1202。步骤s1200,获取所述第一最小矩形区域的其中一个或多个样本行中的空白像素占比或一个或多个样本列中的空白像素占比;步骤s1202,如果所述一个或多个样本行中的空白像素占比大于所述预设阈值或所述一个或多个样本列中的空白像素占比大于所述预设阈值,则确定所述第一元素是容器元素。[0110]其中,如图13所示,步骤s1202可以通过如下步骤实现:步骤s1300,获取所述样本行中非空白像素的数量,所述非空白像素的数量包括位于所述样本行第一端的连续非空白像素的个数以及位于所述样本行第二端的连续非空白像素的个数;步骤s1302,根据所述样本行中非空白像素的数量和所述样本行中所有像素的数量,获取所述样本行中的非空白像素的数量占比。[0111]如图14所示,步骤s1202还可以通过如下步骤实现:步骤s1400,获取所述样本列中非空白像素的数量,所述非空白像素的数量包括位于所述样本列第一端的连续非空白像素的个数以及位于所述样本列第二端的连续非空白像素的个数;步骤s1402,根据所述样本列中非空白像素的数量和所述样本列中所有像素的数量,获取所述样本列中的非空白像素的数量占比。[0112]上述示例性方式一和示例性方式二,又可以称之为容器识别操作。[0113]为了便于理解,以下结合图15对示例性方式二进行介绍。所述第一元素是否是容器元素,取决于所述第一元素是否有子元素。如何判断所述第一元素有无子元素?通常子元素和容器元素之间会存在作为隔断的空白区域。即,如果所述第一元素内部不存在空白部分,那么这个元素类似图片的元素,而不是容器元素。因此,计算机设备可以通过判断第一元素内部的空白区域占比来判断所述第一元素是否是容器元素。考虑到遍历元素内部所有像素需要消耗大量计算资源,因此本实施例采用了多次抽样的方法来判断所述第一元素是否是容器元素。具体操作可以如下:从横向、纵向分别抽样四次,只要有一次空白部分占比超过指定阈值,则认为该第一元素是容器元素。需要说明的是,就是对单次取样的判断遵循这样的原则:a.通过所述第一元素对应的第一原子区域(即,能够)进行判断;b.分别从第一原子区域的两端获取连续非空白元素,遇到空白像素即停止获取;c.计算获取的两端非空白像素占整行或整列的像素数量占比。[0114]在示例性的实施例中,如图16所述,所述步骤s1002可以包括步骤s1600~s1606。步骤s1600,去除所述第一最小矩形区域中的元素边框,以得到第一无边框最小矩形区域;步骤s1602,沿所述第一方向或所述第二方向,对所述第一无边框最小矩形区域进行扫描,以确定所述第一无边框最小矩形区域是否能够被分割;步骤s1604,如果所述第一无边框最小矩形区域能够被分割,则确定所述第一元素为所述表格元素;步骤s1606,如果所述第一无边框最小矩形区域不能够被分割,则确定所述第一元素为所述普通容器元素。[0115]步骤s1600~s1606为表格识别操作。[0116]目前将草图转化为html代码的技术,在处理嵌套表格都会遇到一些难题。这是因为表格是一个特殊的容器元素,同时拥有横向和竖向两个维度,同时表格中的单元格内部还可以继续含有子元素,使得进一步下探识别加大了难度。同时表格的边框的宽度又不是一成不变,这对表格的结构判断也带来了挑战。本发明实施例独特的表格识别算法结合智能行列识别算法,能够解决该难度,成功实现对嵌套表格的解析。[0117]具体而言,对于表格元素的识别,本实施例是先去除容器元素的边框,然后再进行行列识别,如果行数或列数等于或大于1,则认为是表格元素,反之则认为是普通容器元素。需要说明的是,这里的识别规则和前面提到先行后列的解析模式是有关联的,例如:对于一行多列的情况,如果是先列后行的解析模式,则可以正常解析,但如果是先行后列的解析模式,则会因为只有一行,将会被归结为普通容器元素。因此这里需要做一个特殊判断,即先行后列的模式下,对于只有一行的情况需要继续做列的解析,如解析后只有一列,则认为是普通容器元素,如果多于一列,则认为是表格元素。同样先列后行的解析模式也需要特殊处理,一列多行的情况。[0118]去除所述第一最小矩形区域中的元素边框,可以由多个实现方式。如以下提供的两种示例性方式:[0119]示例性方式一,如图17所示:步骤s1700,以从边缘到中心的方向,探测所述第一最小矩形区域中的多个连续非空白像素;其中,每个连续非空白像素与所述多个连续非空白像素中的至少一个其他连续非空白像素是相邻的且与这个其他连续非空白像素之间的颜色差异在预设范围之内;步骤s1702,将所述多个连续非空白像素构成的非空白像素区域确定为所述元素边框;步骤s1704,将所述元素边框从所述第一最小矩形区域中去除,以得到所述第一无边框最小矩形区域。[0120]示例性方式二,如图18所示:步骤s1800,从所述第一最小矩形区域的左边缘起始,从左向右读取所述第一最小矩形区域的第一组连续非空白像素;步骤s1702,从所述第一最小矩形区域的右边缘起始,从右向左读取所述第一最小矩形区域的第二组连续非空白像素;步骤s1804,从所述第一最小矩形区域的下边缘起始,从下向上读取所述第一最小矩形区域的第三组连续非空白像素;步骤s1806,从所述第一最小矩形区域的上边缘起始,从上向下读取所述第一最小矩形区域的第四组连续非空白像素;步骤s1808,根据所述第一、第二、第三和第四组连续非空白像素,确定所述元素边框;步骤s1810,将所述元素边框从所述第一最小矩形区域中去除,以得到所述第一无边框最小矩形区域。[0121]上述示例性方式一和示例性方式二,又可以称之为边框识别操作。[0122]有时候为了增加不同元素之间的识别度,或者为了美观会用边框和花边将元素框起来,这种方式也给识别带来了一些难度。一方面边缘的不规则使得判断哪部分是装饰哪部分是内容难以判断,另一方面边框部分对内部元素的位置定位也带来了一些挑战。本实施例通过边框识别算法,能够将元素边框和内容部分区分开来,为后面识别子元素做了很好的前期准备。[0123]为了便于理解,以下结合图19对示例性方式二进行介绍。一个容器元素通常可以分为元素边框和内部元素两部分。为了确定内部元素的总尺寸和大小,需要把元素边框这部分的占比减去才能得到内部元素的总尺寸和大小。本实施例中识别边框部分的算法是:从上下左右四个方向,分四次,由外向内读取连续非空白像素直至结束,即可识别出元素边框的部分。具体而言,通常1个中心像素点周围会环绕着8个像素点,如果这8个像素点有和中心像素点颜色相同或相近(即差异小于给定阈值)的像素点,则认为这些颜色相同或相近的像素点和中心像素点是连续的。[0124]示例性方式一,利用较少计算资源即可探测到元素边框;[0125]示例性方式二,如果元素边框是由此次独立割裂开的多个边框部分构成的,示例性方式二可以防止示例性方式一边框识别不全的问题。[0126]在示例性的实施例中,如图20所述,所述步骤s1602可以包括步骤s2000~s2002。其中:步骤s2000,判断所述第一无边框最小矩形区域是否包括一个或多个空白像素组;其中,所述空白像素组包括空白像素行、多个连续空白像素行、空白像素列或多个连续空白像素列;步骤s2002,如果所述第一无边框最小矩形区域包括一个或多个空白像素组,则确定所述第一无边框最小矩形区域能够被分割。“空白像素行”解释如下:第一无边框最小矩形区域的有这样一个像素行,这个像素行其中一端在所述第一无边框最小矩形区域的其中一个左边缘,这个像素行的另一端在所述第一无边框最小矩形区域的右边缘,如果这个像素行的整行都是由空白像素构成的,则这个像素行即是空白像素行。所述空白像素列也做类同理解,本文不再赘述。[0127]在示例性的实施例中,如图21所述,还包括步骤s1004:如果所述第一元素为所述表格元素,则从所述第一原子区域中获取多个子元素。[0128]在示例性的实施例中,如图22所述,所述步骤s1004可以包括步骤s2200~s2204。步骤s2200,去除所述第一最小矩形区域中的元素边框,以得到第一无边框最小矩形区域;步骤s2202,沿所述第一方向或第二方向,对所述第一无边框最小矩形区域进行扫描,以分割得到多个子元素区域;所述每个子元素区域均为用于容纳相应的子元素图案的最小矩形区域;步骤s2204,为每个子元素区域分别生成相应的子元素,以得到所述第一最小矩形区域的所述多个子元素。[0129]在示例性的实施例中,如图23所示,所述步骤s1004可以包括步骤s2300~s2304。步骤s2300,判断所述多个子元素区域沿所述第一方向或所述第二方向是否是单一排列的;步骤s2302,如果所述述多个子元素区域沿所述第一方向或所述第二方向是单一排列的,则将所述多个子元素确定为所述第一元素的子级;步骤s2304,如果所述述多个子元素区域沿所述第一方向或所述第二方向不是单一排列的,则执行以下操作以得到三层元素结构:插入一个新的容器元素;将所述多个子元素确定为所述插入的容器元素的子级;及将所述插入的容器元素确定为所述第一元素的子级。[0130]步骤s2300~s2304为子元素识别操作。[0131]对于容器元素的子元素识别方法步骤如下:a.去除边框b.去除边缘空白区域c.行列识别。需要说明的是,在先行后列的解析模式下,对于容器元素内按纵向单一排列的子元素或先列后行的模式对横向单一排列的子元素,都会作为容器元素的子级。而非单一排列的,则插入一个新的容器元素以形成三层元素结构。[0132]为了方便理解,以下提供一个示例性应用场景,具体如下:[0133]①某个网站有一个支付信息页面,在该页面中用户可以录入订单支付方式相关信息,这些相关信息可以包括:cardholdername发卡行名称、cardnumber卡号、expirydate失效日期、cvv验证码等信息,因此在白板上绘制了如图24所示的草图。[0134]②计算机设备将需要转换的草图使用png或jpeg格式,载入到canvas中,然后清理背景颜色,包括去除渐变效果,去除污点等,以避免后面对主要元素解析造成影响,然后再进行行列解析,得到页面整体布局,接着再逐一解析页面元素,生成类似dom的元素语法树,最终再根据语法树生成html/css代码。[0135]步骤②的具体处理过程如下:[0136]步骤1:加载png格式的草图图片;[0137]varimg=newimage();[0138]img.src="demo.png";[0139]步骤2:将草图图片载入到canvas中;[0140]varcanvas=document.createelement("canvas");[0141]document.body.appendchild(canvas);[0142]varctx=canvas.getcontext('2d');[0143]ctx.drawimage(img,0,0);[0144]步骤3:清理草图图片中的背景颜色,如图25。[0145]步骤4:剪切掉草图图片中的边缘空白区域,如图26;[0146]步骤5:分析各个元素的元素信息,如图27;[0147]步骤6:生成语法树,结构如下:[0148][0149][0150]步骤7:根据所述语法树,生成html/css代码。如下:[0151][0152][0153][0154]实施例二[0155]图28示意性示出了根据本申请实施例二的基于草图的网页生成系统的框图,该基于草图的网页生成系统可以被分割成一个或多个程序模块,一个或者多个程序模块被存储于存储介质中,并由一个或多个处理器所执行,以完成本申请实施例。本申请实施例所称的程序模块是指能够完成特定功能的一系列计算机程序指令段,以下描述将具体介绍本实施例中各程序模块的功能。[0156]如图28所示,该基于草图的网页生成系统2800可以包括获取模块2810、第一生成模块2820、第二生成模块2830和第三生成模块1740,其中:[0157]获取模块2810,用于识别所述草图以获取多个元素的元素信息,每个元素对应所述草图中的一个草图图案;[0158]第一生成模块2820,用于根据所述多个元素的元素信息,生成语法树;[0159]第二生成模块2830,用于根据所述语法树,生成网页代码;及[0160]第三生成模块2840,用于根据所述网页代码,生成与所述草图对应的目标网页。[0161]在示例性的实施例中,个元素分别通过预先定义的通用元素进行表示,所述每个元素的元素信息是按照所述通用元素的数据结构进行存储的;其中,所述通用元素的数据结构包括多个数据节点,所述多个数据节点包括元素标识、元素外部尺寸、元素内部尺寸、子元素列表数组、元素类型、父元素对象和背景颜色值。[0162]在示例性的实施例中,所述获取模块2810,还用于:基于第一方向和/或第二方向,从所述草图中获取多个原子区域;及为每个原子区域分别生成一个元素,所述元素的元素信息包括相应原子区域在所述草图中的位置信息;其中,所述每个原子区域均为用于容纳相应的草图图案的最小矩形区域;该最小矩形区域的第一边方向对应于所述第一方向,且第二边方向对应于所述第二方向。[0163]在示例性的实施例中,所述获取模块2810,还用于:沿第一方向对所述草图进行第一次分割操作,以得到与所述第一次分割操作得到的多个区域,并为所述第一次分割操作得到的各个区域分别创建一个相应的元素;重复执行第i次分割操作,直至当i=j时,从所述草图中分割出所有的原子区域:对所述第i-1次分割操作得到的各个区域分别进行第i次分割操作:将所述第i-1次分割操作得到的多个区域中的不可分割区域确定为相应的原子区域;将所述第i-1次分割操作得到的多个区域中的可分割区域继续执行所述第i次分割操作,以得到与所述第i次分割操作得到的多个区域,并为所述第i次分割操作得到的各个区域分别创建一个相应的元素;其中,i是初始值为2的正整数;当i为奇数时,所述第i次分割操作是沿所述第一方向进行分割的;当i为偶数时,所述第i次分割操作是沿第二方向进行分割的。[0164]在示例性的实施例中,所述获取模块2810,还用于:裁剪所述草图中的边缘空白区域,得到所述草图中的待处理区域;沿第一方向对所述待处理区域进行第一次分割操作,以得到与所述第一次分割操作得到的多个区域,并为所述第一次分割操作得到的各个区域分别创建一个相应的元素;重复执行第i次分割操作,直至当i=j时,从所述草图中分割出所有的原子区域:对所述第i-1次分割操作得到的各个区域分别进行第i次分割操作:将所述第i-1次分割操作得到的多个区域中的不可分割区域确定为相应的原子区域;将所述第i-1次分割操作得到的多个区域中的可分割区域继续执行所述第i次分割操作,以得到与所述第i次分割操作得到的多个区域,并为所述第i次分割操作得到的各个区域分别创建一个相应的元素;其中,i是初始值为2的正整数;当i为奇数时,所述第i次分割操作是沿所述第一方向进行分割的;当i为偶数时,所述第i次分割操作是沿第二方向进行分割的。[0165]在示例性的实施例中,所述获取模块2810,还用于:处理所述草图的背景颜色,以得到处理后的草图;裁剪所述处理后的草图中的边缘空白区域,得到所述处理后的草图中的待处理区域;沿第一方向对所述待处理区域进行第一次分割操作,以得到与所述第一次分割操作得到的多个区域,并为所述第一次分割操作得到的各个区域分别创建一个相应的元素;重复执行第i次分割操作,直至当i=j时,从所述草图中分割出所有的原子区域:对所述第i-1次分割操作得到的各个区域分别进行第i次分割操作:将所述第i-1次分割操作得到的多个区域中的不可分割区域确定为相应的原子区域;将所述第i-1次分割操作得到的多个区域中的可分割区域继续执行所述第i次分割操作,以得到与所述第i次分割操作得到的多个区域,并为所述第i次分割操作得到的各个区域分别创建一个相应的元素;其中,i是初始值为2的正整数;当i为奇数时,所述第i次分割操作是沿所述第一方向进行分割的;当i为偶数时,所述第i次分割操作是沿第二方向进行分割的。[0166]在示例性的实施例中,处理所述草图的背景颜色,以得到处理后的草图,包括:获取所述草图中各个像素的像素颜色信息;根据预设颜色信息和所述各个像素的像素颜色信息,确定所述草图中的多个背景像素;及将所述多个背景像素的像素颜色调整为单一颜色,以清理所述草图的背景颜色。[0167]在示例性的实施例中,裁剪所述处理后的草图中的边缘空白区域,得到所述处理后的草图中的待处理区域,包括:从所述处理后的草图的上边缘起始,从上向下扫描所述处理后的草图,直至扫描到包括非空白像素的第m行;从所述处理后的草图的下边缘起始,从下向上扫描所述处理后的草图,直至扫描到包括非空白像素的第n行;从所述处理后的草图的左边缘起始,从左向右扫描所述处理后的草图,直至扫描到包括非空白像素的第p列;从所述处理后的草图的右边缘起始,从右向左扫描所述处理后的草图,直至扫描到包括非空白像素的第q列;根据所述处理后的草图中的第m行、第n行、第p列和第q列,确定所述处理后的草图中的边缘空白区域;及裁剪所述处理后的草图中的所述边缘空白区域,以得到所述待处理区域。[0168]在示例性的实施例中,获取模块2810,还用于:在每个原子区域中提取出一个最小矩形区域;将每个原子区域中的最小矩形区域的位置信息确定为每个原子区域的相应元素的位置信息;所述最小矩形区域是指用于容纳相应原子区域中的草图图案的最小矩形区域;该最小矩形区域的第一边方向对应于所述第一方向,且第二边方向对应于所述第二方向。[0169]在示例性的实施例中,所述多个元素包括第一元素,所述第一元素对应于第一原子区域,所述第一原子区域对应有第一最小矩形区域;识别所述草图以获取多个元素的元素信息,包括:根据所述第一最小矩形区域判断所述第一元素是否为容器元素,所述容器元素包括普通容器元素和表格元素;及如果确定所述第一元素为所述容器元素,则判断所述第一元素是否为表格元素。[0170]在示例性的实施例中,根据所述第一最小矩形区域判断所述第一元素是否为容器元素,包括:获取所述第一最小矩形区域内部的空白区域在所述第一最小矩形区域中的占比;如果所述占比大于预设阈值,则确定所述第一元素是容器元素;及如果所述占比没有大于所述预设阈值,则确定所述第一元素不是所述容器元素。[0171]在示例性的实施例中,根据所述第一最小矩形区域判断所述第一元素是否为容器元素,包括:获取所述第一最小矩形区域的其中一个或多个样本行中的空白像素占比或一个或多个样本列中的空白像素占比;及如果所述一个或多个样本行中的空白像素占比大于所述预设阈值或所述一个或多个样本列中的空白像素占比大于所述预设阈值,则确定所述第一元素是容器元素。[0172]在示例性的实施例中,获取所述第一最小矩形区域的其中一个或多个样本行中的空白像素占比或一个或多个样本列中的空白像素占比,包括:获取所述样本行中非空白像素的数量,所述非空白像素的数量包括位于所述样本行第一端的连续非空白像素的个数以及位于所述样本行第二端的连续非空白像素的个数;及根据所述样本行中非空白像素的数量和所述样本行中所有像素的数量,获取所述样本行中的非空白像素的数量占比。[0173]在示例性的实施例中,获取所述第一最小矩形区域的其中一个或多个样本行中的空白像素占比或一个或多个样本列中的空白像素占比,包括:获取所述样本列中非空白像素的数量,所述非空白像素的数量包括位于所述样本列第一端的连续非空白像素的个数以及位于所述样本列第二端的连续非空白像素的个数;及根据所述样本列中非空白像素的数量和所述样本列中所有像素的数量,获取所述样本列中的非空白像素的数量占比。[0174]在示例性的实施例中,如果确定所述第一元素为所述容器元素,则判断所述第一元素是否为表格元素,包括:去除所述第一最小矩形区域中的元素边框,以得到第一无边框最小矩形区域;沿所述第一方向或所述第二方向,对所述第一无边框最小矩形区域进行扫描,以确定所述第一无边框最小矩形区域是否能够被分割;如果所述第一无边框最小矩形区域能够被分割,则确定所述第一元素为所述表格元素;及如果所述第一无边框最小矩形区域不能够被分割,则确定所述第一元素为所述普通容器元素。[0175]在示例性的实施例中,去除所述第一最小矩形区域中的元素边框,以得到第一无边框最小矩形区域,包括:以从边缘到中心的方向,探测所述第一最小矩形区域中的多个连续非空白像素;其中,每个连续非空白像素与所述多个连续非空白像素中的至少一个其他连续非空白像素是相邻的且与这个其他连续非空白像素之间的颜色差异在预设范围之内;将所述多个连续非空白像素构成的非空白像素区域确定为所述元素边框;将所述元素边框从所述第一最小矩形区域中去除,以得到所述第一无边框最小矩形区域。[0176]在示例性的实施例中,去除所述第一最小矩形区域中的元素边框,以得到第一无边框最小矩形区域,包括:从所第一最小矩形区域的左边缘起始,从左向右读取所述第一最小矩形区域的第一组连续非空白像素;从所述第一最小矩形区域的右边缘起始,从右向左读取所述第一最小矩形区域的第二组连续非空白像素;从所述第一最小矩形区域的下边缘起始,从下向上读取所述第一最小矩形区域的第三组连续非空白像素;从所述第一最小矩形区域的上边缘起始,从上向下读取所述第一最小矩形区域的第四组连续非空白像素;根据所述第一、第二、第三和第四组连续非空白像素,确定所述元素边框;将所述元素边框从所述第一最小矩形区域中去除,以得到所述第一无边框最小矩形区域。[0177]在示例性的实施例中,确定所述第一无边框最小矩形区域是否能够被分割,包括:判断所述第一无边框最小矩形区域是否包括一个或多个空白像素组;其中,所述空白像素组包括空白像素行、多个连续空白像素行、空白像素列或多个连续空白像素列;及如果所述第一无边框最小矩形区域包括一个或多个空白像素组,则确定所述第一无边框最小矩形区域能够被分割。[0178]在示例性的实施例中,获取模块2810,还用于:如果所述第一元素为所述表格元素,则从所述第一最小矩形区域中获取多个子元素。[0179]在示例性的实施例中,从所述第一最小矩形区域中获取多个子元素,包括:去除所述第一最小矩形区域中的元素边框,以得到第一无边框最小矩形区域;沿所述第一方向或第二方向,对所述第一无边框最小矩形区域进行扫描,以分割得到多个子元素区域;所述每个子元素区域均为用于容纳相应的子元素图案的最小矩形区域;及为每个子元素区域分别生成相应的子元素,以得到所述第一最小矩形区域的所述多个子元素。[0180]在示例性的实施例中,从所述第一最小矩形区域中获取多个子元素,还包括:判断所述多个子元素区域沿所述第一方向或所述第二方向是否是单一排列的;如果所述述多个子元素区域沿所述第一方向或所述第二方向是单一排列的,则将所述多个子元素确定为所述第一元素的子级;及如果所述述多个子元素区域沿所述第一方向或所述第二方向不是单一排列的,则执行以下操作以得到三层元素结构:插入一个新的容器元素;将所述多个子元素确定为所述插入的容器元素的子级;及将所述插入的容器元素确定为所述第一元素的子级。[0181]实施例三[0182]图29示意性示出了根据本申请实施例三的计算机设备的硬件架构示意图。本实施例中,计算机设备是一种能够按照事先设定或者存储的指令,自动进行数值计算和/或信息处理的设备。例如,可以是智能手机、平板电脑、笔记本电脑、台式计算机、视频会议系统、机架式服务器、刀片式服务器、塔式服务器或机柜式服务器(包括独立的服务器,或者多个服务器所组成的服务器集群)。如图29所示,计算机设备至少包括但不限于:可通过系统总线相互通信链接存储器2910、处理器2920、网络接口2930。其中:[0183]存储器2910至少包括一种类型的计算机可读存储介质,可读存储介质包括闪存、硬盘、多媒体卡、卡型存储器(例如,sd或dx存储器等)、随机访问存储器(ram)、静态随机访问存储器(sram)、只读存储器(rom)、电可擦除可编程只读存储器(eeprom)、可编程只读存储器(prom)、磁性存储器、磁盘、光盘等。在一些实施例中,存储器2910可以是计算机设备的内部存储模块,例如该计算机设备的硬盘或内存。在另一些实施例中,存储器2910也可以是计算机设备的外部存储设备,例如该计算机设备上配备的插接式硬盘,智能存储卡(smartmediacard,简称为smc),安全数字(securedigital,简称为sd)卡,闪存卡(flashcard)等。当然,存储器2910还可以既包括计算机设备的内部存储模块也包括其外部存储设备。本实施例中,存储器2910通常用于存储安装于计算机设备的操作系统和各类应用软件,例如基于草图的网页生成方法的程序代码等。此外,存储器2910还可以用于暂时地存储已经输出或者将要输出的各类数据。[0184]处理器2920在一些实施例中可以是中央处理器(centralprocessingunit,简称为cpu)、控制器、微控制器、微处理器、或其他数据处理芯片。该处理器2920通常用于控制计算机设备的总体操作,例如执行与计算机设备进行数据交互或者通信相关的控制和处理等。本实施例中,处理器2920用于运行存储器2910中存储的程序代码或者处理数据。[0185]网络接口2930可包括无线网络接口或有线网络接口,该网络接口2930通常用于在计算机设备与其他计算机设备之间建立通信链接。例如,网络接口2930用于通过网络将计算机设备与外部终端相连,在计算机设备与外部终端之间的建立数据传输通道和通信链接等。网络可以是企业内部网(intranet)、互联网(internet)、全球移动通讯系统(globalsystemofmobilecommunication,简称为gsm)、宽带码分多址(widebandcodedivisionmultipleaccess,简称为wcdma)、4g网络、5g网络、蓝牙(bluetooth)、wi-fi等无线或有线网络。[0186]需要指出的是,图29仅示出了具有部件2910-2930的计算机设备,但是应理解的是,并不要求实施所有示出的部件,可以替代的实施更多或者更少的部件。[0187]在本实施例中,存储于存储器2910中的基于草图的网页生成方法还可以被分割为一个或者多个程序模块,并由一个或多个处理器(本实施例为处理器2920)所执行,以完成本申请实施例。[0188]实施例四[0189]本申请还提供一种计算机可读存储介质,计算机可读存储介质其上存储有计算机程序,计算机程序被处理器执行时实现实施例中的基于草图的网页生成方法的步骤。[0190]本实施例中,计算机可读存储介质包括闪存、硬盘、多媒体卡、卡型存储器(例如,sd或dx存储器等)、随机访问存储器(ram)、静态随机访问存储器(sram)、只读存储器(rom)、电可擦除可编程只读存储器(eeprom)、可编程只读存储器(prom)、磁性存储器、磁盘、光盘等。在一些实施例中,计算机可读存储介质可以是计算机设备的内部存储单元,例如该计算机设备的硬盘或内存。在另一些实施例中,计算机可读存储介质也可以是计算机设备的外部存储设备,例如该计算机设备上配备的插接式硬盘,智能存储卡(smartmediacard,简称为smc),安全数字(securedigital,简称为sd)卡,闪存卡(flashcard)等。当然,计算机可读存储介质还可以既包括计算机设备的内部存储单元也包括其外部存储设备。本实施例中,计算机可读存储介质通常用于存储安装于计算机设备的操作系统和各类应用软件,例如实施例中基于草图的网页生成方法的程序代码等。此外,计算机可读存储介质还可以用于暂时地存储已经输出或者将要输出的各类数据。[0191]最后,为了体现本申请的优势,以下提供几个示例对比对象,以供参考。[0192]第一:adobe公司推出的photoshop的切片功能,通过切片功能可以将整个web页面切分成一个个小图,并将它们全部放入一个完整表格中,然后导出为html+image的格式,在操作过程中还可以把图像放大,借助参考线以使各个部分尺寸更加准确。不过这种方式有三点不足,1.很难处理嵌套表格,2.只能以图片形式导出,3.导出的html代码可读性太差。[0193]第二:由微软和kabel、spiketechniques合作开发推出的sketch2code。用户将图片上传到sketch2code网站上,自定义视觉模型预测在图像中出现的html元素,并将它们的位置标出来,手写文本识别服务读取预测元素中的文本,布局算法根据预测元素的边框空间信息生成网格结构,然后由html生成引擎使用上述信息来生成html代码。和photoshop相比,sketch2code是可以直接导出文本内容,不足之处是边框信息不够准确,且对用边框框起来的子模块识别度不高,同样导出代码的可读性不高。[0194]第三:uizard公司推出的pix2code。pix2code训练了一个神经网络,能够把图形用户界面的截图转译成代码。跟所有机器学习一样,使用者需要用手头的任务实例去训练模型。主要分三个步骤,首先,通过计算机视觉来理解gui图像和里面的元素(按钮、条框等)。接下来模型需要理解计算机代码,并且能生成在句法上和语义上都正确的样本。最后把前两步联系起来,需要它用推测场景来生成描述文本。该pix2code实测生成代码的识别准确率不高,并且对草图选择性很强,不同风格的设计识别率差异极大,很难一套系统适应多个场景。同时,pix2code也存在和前面两款工具一样的缺陷,无法识别嵌套表格,生成代码可读性差。[0195]针对上述问题本申请尤其通过特有的行列识别操作、容器识别操作、边框识别操作、表格识别操作和子元素识别操作,以及智能行列布局算法,可以高效解决上述问题。[0196]目前大部分现有技术都采用了绝对定位布局的方式,这是因为计算元素相对于左上角坐标原点的距离的难度要远低于通过相对定位的方式来计算元素的位置和大小。本申请实施例可以采用对开发人员也更为友好的相对定位方式,再结合智能行列识别技术,使转换后的布局更为合理,有利于后期开发人员二次开发。[0197]显然,本领域的技术人员应该明白,上述的本申请实施例的各模块或各步骤可以用通用的计算装置来实现,它们可以集中在单个的计算装置上,或者分布在多个计算装置所组成的网络上,可选地,它们可以用计算装置可执行的程序代码来实现,从而,可以将它们存储在存储装置中由计算装置来执行,并且在某些情况下,可以以不同于此处的顺序执行所示出或描述的步骤,或者将它们分别制作成各个集成电路模块,或者将它们中的多个模块或步骤制作成单个集成电路模块来实现。这样,本申请实施例不限制于任何特定的硬件和软件结合。[0198]以上仅为本申请的优选实施例,并非因此限制本申请的专利范围,凡是利用本申请说明书及附图内容所作的等效结构或等效流程变换,或直接或间接运用在其他相关的
技术领域
:,均同理包括在本申请的专利保护范围内。当前第1页1 2 3 当前第1页1 2 3 
当前第1页1 2 3 
网友询问留言 已有0条留言
  • 还没有人留言评论。精彩留言会获得点赞!
1