一种压缩点九图的方法及装置与流程

文档序号:18903590发布日期:2019-10-18 22:19阅读:380来源:国知局
一种压缩点九图的方法及装置与流程

本说明书实施例涉及信息技术领域,尤其涉及一种压缩点九图的方法及装置。



背景技术:

点九图(后缀名为.9.png)是安卓系统所支持的一种图片格式,其由人工在png图片基础上进行绘制得到。具体地,人工需要在png图片的四周绘制一定长度的黑线,以告知安卓系统在渲染该png图片时,哪些区域可以被伸缩,哪些区域应当保持原有比例。如此,安卓系统使用点九图进行图片渲染(会根据手机的屏幕尺寸进行图片伸缩),并不会导致渲染出的图片失真。

在工程实践中,点九图的尺寸越小,越能节省存储资源。



技术实现要素:

为了减小点九图的尺寸,节省存储资源,本说明书实施例提供一种压缩点九图的方法及装置,技术方案如下:

根据本说明书实施例的第1方面,提供一种压缩点九图的方法,用于压缩点九图的横向尺寸,所述方法包括:

确定所述点九图中各可压缩的横向伸缩区域;

从确定出的各可压缩的横向伸缩区域中,选择至少一个横向伸缩区域;

针对选择的每个横向伸缩区域,压缩该横向伸缩区域的横向尺寸,并调整该横向伸缩区域对应的横向伸缩标示线的尺寸,使得调整后的该横向伸缩标示线可标示出压缩后的该横向伸缩区域;

其中,确定所述点九图中各可压缩的横向伸缩区域,包括:

针对所述点九图的每个横向伸缩标示线,确定所述点九图中对应于该横向伸缩标示线的横向伸缩区域;

判断该横向伸缩区域是否满足第一指定条件;所述第一指定条件为,在该横向伸缩区域内,同一行上的每个像素点的颜色相同;

若是,则确定该横向伸缩区域可压缩。

根据本说明书实施例的第2方面,提供一种压缩点九图的方法,用于压缩点九图的纵向尺寸,所述方法包括:

确定所述点九图中各可压缩的纵向伸缩区域;

从确定出的可压缩的各纵向伸缩区域中,选择至少一个纵向伸缩区域;

针对选择的每个纵向伸缩区域,压缩该纵向伸缩区域的纵向尺寸,并调整该纵向伸缩区域对应的纵向伸缩标示线的尺寸,使得调整后的该纵向伸缩标示线可标示出压缩后的该纵向伸缩区域;

其中,确定所述点九图中各可压缩的纵向伸缩区域,包括:

针对所述点九图的每个纵向伸缩标示线,确定所述点九图中对应于该纵向伸缩标示线的纵向伸缩区域;

判断该纵向伸缩区域是否满足第二指定条件;所述第二指定条件为,在该纵向伸缩区域内,同一列上的每个像素点的颜色相同;

若是,则确定该纵向伸缩区域可压缩。

根据本说明书实施例的第3方面,提供一种压缩点九图的装置,用于压缩点九图的横向尺寸,所述装置包括:

确定模块,确定所述点九图中各可压缩的横向伸缩区域;

选择模块,从确定出的各可压缩的横向伸缩区域中,选择至少一个横向伸缩区域;

压缩模块,针对选择的每个横向伸缩区域,压缩该横向伸缩区域的横向尺寸,并调整该横向伸缩区域对应的横向伸缩标示线的尺寸,使得调整后的该横向伸缩标示线可标示出压缩后的该横向伸缩区域;

其中,所述确定模块包括:

确定子模块,针对所述点九图的每个横向伸缩标示线,确定所述点九图中对应于该横向伸缩标示线的横向伸缩区域;

判断处理子模块,判断该横向伸缩区域是否满足第一指定条件,所述第一指定条件为,在该横向伸缩区域内,同一行上的每个像素点的颜色相同;若是,则确定该横向伸缩区域可压缩。

根据本说明书实施例的第4方面,提供一种压缩点九图的装置,用于压缩点九图的纵向尺寸,所述装置包括:

确定模块,确定所述点九图中各可压缩的纵向伸缩区域;

选择模块,从确定出的可压缩的各纵向伸缩区域中,选择至少一个纵向伸缩区域;

压缩模块,针对选择的每个纵向伸缩区域,压缩该纵向伸缩区域的纵向尺寸,并调整该纵向伸缩区域对应的纵向伸缩标示线的尺寸,使得调整后的该纵向伸缩标示线可标示出压缩后的该纵向伸缩区域;

其中,所述确定模块包括:

确定子模块,针对所述点九图的每个纵向伸缩标示线,确定所述点九图中对应于该纵向伸缩标示线的纵向伸缩区域;

判断处理模块,判断该纵向伸缩区域是否满足第二指定条件,所述第二指定条件为,在该纵向伸缩区域内,同一列上的每个像素点的颜色相同;若是,则确定该纵向伸缩区域可压缩。

本说明书实施例所提供的技术方案,对于点九图的任一横向伸缩区域而言,如果在该横向伸缩区域内,同一行上的每个像素点的颜色相同,则说明该横向伸缩区域具有横向可压缩性,如此,可以对该横向伸缩区域进行横向压缩,以缩小点九图的横向尺寸。同理,也可以缩小点九图的纵向尺寸。通过本说明书实施例,可以压缩人工绘制的点九图的尺寸大小,提升图片压缩率。

应当理解的是,以上的一般描述和后文的细节描述仅是示例性和解释性的,并不能限制本说明书实施例。

此外,本说明书实施例中的任一实施例并不需要达到上述的全部效果。

附图说明

为了更清楚地说明本说明书实施例或现有技术中的技术方案,下面将对实施例或现有技术描述中所需要使用的附图作简单地介绍,显而易见地,下面描述中的附图仅仅是本说明书实施例中记载的一些实施例,对于本领域普通技术人员来讲,还可以根据这些附图获得其他的附图。

图1是点九图示意图;

图2a和2b是点九图中伸缩区域的示意图;

图3是本说明书实施例提供的一种压缩点九图的方法的流程示意图;

图4是本说明实施例提供的横向压缩点九图的示意图;

图5是本说明书实施例提供的一种压缩点九图的方法的流程示意图;

图6是本说明书实施例提供的一种压缩点九图的装置的结构示意图;

图7是本说明书实施例提供的另一种压缩点九图的装置的结构示意图;

图8是用于配置本说明书实施例方法的一种设备的结构示意图。

具体实施方式

此处对点九图的原理进行介绍。图1是点九图示意图。如图1所示,由人工在png图片的四周绘制四条黑色的标示线。其中,上边的两条横向伸缩标示线的作用是标示出png图片在横向上可伸缩的区域范围;左边的纵向伸缩标示线的作用是标示出png图片在纵向上可伸缩的区域范围;右边的纵向内间距标示线的作用是标示出以png图片为背景,在纵向上可显示内容的区域范围;下边的横向内间距标示线的作用是标示出以png图片为背景,在横向上可显示内容的区域范围。

需要说明的是,本文关注的重点是点九图的尺寸而非点九图如何显示内容,因此,并不会过多提及纵向内间距标示线与横向内间距标示线。

参见图2a和2b,根据点九图的每个横向伸缩标示线可以确定相应的横向伸缩区域,根据点九图的每个纵向伸缩标示线可以确定相应的纵向伸缩区域。安卓系统需要进行图片渲染时,首先会根据手机的屏幕尺寸确定需要渲染的图片的尺寸,然后根据需要渲染的图片的尺寸(横向尺寸与纵向尺寸),对点九图进行尺寸调整(即横向伸缩和/或纵向伸缩)。在对点九图进行伸缩时,在横向上仅会伸缩横向伸缩区域,在纵向上仅会伸缩纵向伸缩区域。

由于点九图实际上可以视为安卓系统所使用的图片渲染模板,点九图本身的尺寸大小并不是影响渲染出的图片的尺寸大小的关键因素,因此,如何在保留点九图中必要信息的前提下,减小点九图的尺寸以节省存储资源,是一个工程实践中丞待解决的技术问题。

为解决此技术问题,在本说明书的一个或多个实施例中,自动尝试对人工绘制得到的点九图进行压缩,如果发现点九图中存在不必要的冗余信息,就将冗余信息删除,以压缩点九图的尺寸大小。

具体而言,对于点九图的任一横向伸缩区域而言,如果在该横向伸缩区域内,同一行上的每个像素点的颜色相同,则说明对该横向伸缩区域进行横向压缩并不会导致点九图丧失必要信息(即不会影响安卓系统对点九图进行横向伸缩),因此,可以对该横向伸缩区域进行横向压缩,压缩掉的像素点即是冗余信息。

同理,对于点九图的任一纵向伸缩区域而言,如果在该纵向伸缩区域内,同一行上的每个像素点的颜色相同,则说明对该纵向伸缩区域进行纵向压缩并不会导致点九图丧失必要信息(即不会影响安卓系统对点九图进行纵向伸缩),因此,可以对该纵向伸缩区域进行纵向压缩,压缩掉的像素点即是冗余信息。

为了使本领域技术人员更好地理解本说明书实施例中的技术方案,下面将结合本说明书实施例中的附图,对本说明书实施例中的技术方案进行详细地描述,显然,所描述的实施例仅仅是本说明书的一部分实施例,而不是全部的实施例。基于本说明书中的实施例,本领域普通技术人员所获得的所有其他实施例,都应当属于保护的范围。

以下结合附图3和附图5,详细说明本技术方案。

图3所示方法与图5所示方法的执行主体可以是为实现点九图压缩目的而开发的点九图压缩程序。在实际应用中,所述点九图压缩程序可以集成于点九图绘制程序中,作为点九图绘制程序的一个功能模块。

在实际应用中,用户基于png图片绘制得到点九图后,可以将点九图输入到点九图压缩程序,由点九图压缩程序判断是否可以对点九图进行压缩,如果可以,即对点九图进行压缩,将压缩后的点九图输出给用户。

需要说明的是,图3所示的方法用于压缩点九图的横向尺寸,图5所示的方法用于压缩点九图的纵向尺寸。图3与图5所示的方法可以分别独立实现,也可以结合实现(既尝试压缩点九图的横向尺寸,又尝试压缩点九图的纵向尺寸)。

图3是本说明书实施例提供的一种压缩点九图的方法的流程示意图,包括以下步骤:

s300:确定所述点九图中各可压缩的横向伸缩区域。

需要说明的是,点九图一般由矩形的png图片与png图片四周的黑色标示线组成。点九图可以具有1个横向伸缩标示线,也可以具有不止1个横向伸缩标示线。每个横向伸缩标示线对应的横线伸缩区域也是矩形的。

特殊情况下,点九图的横向伸缩标示线的尺寸大小可以是1像素,如此,横向伸缩标示线的尺寸具体为一个像素,相应地的横向伸缩区域的横向尺寸具体为一个像素,在形式上表现为点九图中的一条纵贯线。应当理解,本文中所述的横向伸缩线与横向伸缩区域的概念囊括了该特殊情况。

在本说明书实施例中,确定所述点九图中各可压缩的横向伸缩区域,具体实现为:针对所述点九图的每个横向伸缩标示线,确定所述点九图中对应于该横向伸缩标示线的横向伸缩区域;判断该横向伸缩区域是否满足第一指定条件;若是,则确定该横向伸缩区域可压缩,若否,则确定该横向伸缩区域不可压缩。

其中,所述第一指定条件为,在该横向伸缩区域内,同一行上的每个像素点的颜色相同。

此处对第一指定条件涉及的原理进行说明。安卓系统在基于点九图进行图片渲染时,会根据屏幕尺寸来在横向上将点九图的横向伸缩区域伸缩到合适的尺寸。如果横向伸缩区域的任一横贯线上的像素点的颜色都是相同的,那么说明点九图中横向伸缩区域的横向尺寸即便被压缩,也不会丢失必要信息,即不会影响安卓系统对横向伸缩区域进行横向伸缩。

基于上述原理,满足第一指定条件的横向伸缩区域,即是具有横向可压缩性的横向伸缩区域。

值得强调的是,如果横向伸缩区域的横向尺寸原本就是1像素,那么也就没有压缩的必要,因此,这种特殊情况下,视为横向伸缩区域不满足所述第一指定条件。

s302:从确定出的各可压缩的横向伸缩区域中,选择至少一个横向伸缩区域。

在本说明书实施例中,如果有不止一个满足第一指定条件的横向伸缩区域,则可以选择一个或多个横向伸缩区域进行压缩。选择的标准可以根据实际需要设定,具体可以是选择所有满足第一指定条件的横向压缩区域。

s304:针对选择的每个横向伸缩区域,压缩该横向伸缩区域的横向尺寸,并调整该横向伸缩区域对应的横向伸缩标示线的尺寸。

在本说明书实施例中,对于选择的每个横向伸缩区域,可以将该横向伸缩区域的横向尺寸进行适当压缩。进一步地,可以将该横向伸缩区域的横向尺寸压缩为1像素,如此,该横向伸缩区域实际上会坍缩成点九图中的一条横贯线。

此外,还需要根据压缩后的该横向伸缩区域,来调整相应地横向伸缩标示线,使得调整后的该横向伸缩标示线仍然能够标示出压缩后的该横向伸缩区域。

图4是本说明实施例提供的横向压缩点九图的示意图。需要说明的是,点九图的纵向伸缩标示线、纵向内间距标示线、横向内间距标示线未在图4中示出。如图4所示,假设点九图的两个横向伸缩区域都满足第一指定条件,将每个横向压缩区域的横向尺寸都压缩至1像素。横向压缩后的点九图的横向伸缩标示线坍缩为黑色像素点,相应的横向伸缩区域坍缩为1像素宽的纵贯线。

继续参见图4。安卓系统使用横向压缩后的点九图依然可以进行图片渲染。具体而言,安卓系统会根据手机屏幕的尺寸,确定需要渲染的图片的实际尺寸。例如,横向压缩后的点九图的横向尺寸(即宽度)为10个像素,而安卓系统需要基于点九图渲染出横向尺寸为20个像素的图片。安卓系统可以将左边的横向伸缩区域一(横向尺寸为1像素)的横向尺寸拉伸为11像素,不对右边的横向伸缩区域二(横向尺寸为1像素)做处理。安卓系统也可以将左边的横向伸缩区域一(横向尺寸为1像素)的横向尺寸拉伸为6像素,将右边的横向伸缩区域二(横向尺寸为1像素)的横向尺寸也拉伸为6像素。于是,最终渲染出的图片的横向尺寸为20像素。

图5是本说明书实施例提供的一种压缩点九图的方法的流程示意图,包括以下步骤:

s500:确定所述点九图中各可压缩的纵向伸缩区域。

确定所述点九图中各可压缩的纵向伸缩区域,包括:针对所述点九图的每个纵向伸缩标示线,确定所述点九图中对应于该纵向伸缩标示线的纵向伸缩区域;判断该纵向伸缩区域是否满足第二指定条件;若是,则确定该纵向伸缩区域可压缩。其中,所述第二指定条件为,在该纵向伸缩区域内,同一列上的每个像素点的颜色相同。

s502:从确定出的可压缩的各纵向伸缩区域中,选择至少一个纵向伸缩区域。

具体可以选择所有满足所述第二指定条件的纵向压缩区域。

s504:针对选择的每个纵向伸缩区域,压缩该纵向伸缩区域的纵向尺寸,并调整该纵向伸缩区域对应的纵向伸缩标示线的尺寸。

具体可以针对选择的每个纵向伸缩区域,将该纵向伸缩区域的纵向尺寸压缩为1像素。

由于图5所示的方法与图3所示的方法在原理上是一致的,因此不再重复说明。

通过本说明书的一个或多个实施例,可以进一步压缩人工绘制的点九图的尺寸大小,提升图片压缩率。

还需要说明的是,在实践中,用户如果想要使得绘制的点九图的尺寸较小,则需要在绘制点九图之前,手动对png图片进行裁剪,将冗余部分裁减掉,然后在裁剪后的png图片的四周绘制标示线。然而,这种方式对用户而言比较麻烦,并且,手动参见图片的精度也不高,无法实现最佳的裁剪效果。

在本说明书实施例中,用户不用考虑如何得到尺寸最小的点九图,而是由点九图压缩程序自动对点九图进行压缩,可以最大程度地去除点九图中的冗余信息,节省存储空间。

此外,将图3所示的方法与图5所示的方法结合使用时,有的点九图可能只能够在横向上进行压缩,而不能在纵向上进行压缩;有的点九图可能只能够在纵向上进行压缩,而不能在横向上进行压缩;有的点九图可能既能在横向上进行压缩,也能在纵向上进行压缩。

对于既能在横向上进行压缩,也能在纵向上进行压缩的点九图,在压缩顺序上,可以先执行图3所示的方法进行横向压缩,再执行图5所示的方法进行纵向压缩。当然,也可以先进行纵向压缩,再进行横向压缩。

图6是本说明书实施例提供的一种压缩点九图的装置,用于压缩点九图的横向尺寸,所述装置包括:

确定模块601,确定所述点九图中各可压缩的横向伸缩区域;

选择模块602,从确定出的各可压缩的横向伸缩区域中,选择至少一个横向伸缩区域;

压缩模块603,针对选择的每个横向伸缩区域,压缩该横向伸缩区域的横向尺寸,并调整该横向伸缩区域对应的横向伸缩标示线的尺寸,使得调整后的该横向伸缩标示线可标示出压缩后的该横向伸缩区域;

其中,所述确定模块包括:

确定子模块6011,针对所述点九图的每个横向伸缩标示线,确定所述点九图中对应于该横向伸缩标示线的横向伸缩区域;

判断处理子模块6012,判断该横向伸缩区域是否满足第一指定条件,所述第一指定条件为,在该横向伸缩区域内,同一行上的每个像素点的颜色相同;若是,则确定该横向伸缩区域可压缩。

所述选择模块602,选择所有可压缩的横向压缩区域。

所述压缩模块603,针对选择的每个横向伸缩区域,将该横向伸缩区域的横向尺寸压缩为1像素。

图7是本说明书实施例提供的另一种压缩点九图的装置,用于压缩点九图的纵向尺寸,所述装置包括:

确定模块701,确定所述点九图中各可压缩的纵向伸缩区域;

选择模块702,从确定出的可压缩的各纵向伸缩区域中,选择至少一个纵向伸缩区域;

压缩模块703,针对选择的每个纵向伸缩区域,压缩该纵向伸缩区域的纵向尺寸,并调整该纵向伸缩区域对应的纵向伸缩标示线的尺寸,使得调整后的该纵向伸缩标示线可标示出压缩后的该纵向伸缩区域;

其中,所述确定模块包括:

确定子模块7011,针对所述点九图的每个纵向伸缩标示线,确定所述点九图中对应于该纵向伸缩标示线的纵向伸缩区域;

判断处理子模块7012,判断该纵向伸缩区域是否满足第二指定条件,所述第二指定条件为,在该纵向伸缩区域内,同一列上的每个像素点的颜色相同;若是,则确定该纵向伸缩区域可压缩。

所述选择模块702,选择所有可压缩的纵向压缩区域。

所述压缩模块703,针对选择的每个纵向伸缩区域,将该纵向伸缩区域的纵向尺寸压缩为1像素。

本说明书实施例还提供一种计算机设备,其至少包括存储器、处理器及存储在存储器上并可在处理器上运行的计算机程序,其中,处理器执行所述程序时实现图3和/或5所示的方法。

图8示出了本说明书实施例所提供的一种更为具体的计算设备硬件结构示意图,该设备可以包括:处理器1010、存储器1020、输入/输出接口1030、通信接口1040和总线1050。其中处理器1010、存储器1020、输入/输出接口1030和通信接口1040通过总线1050实现彼此之间在设备内部的通信连接。

处理器1010可以采用通用的cpu(centralprocessingunit,中央处理器)、微处理器、应用专用集成电路(applicationspecificintegratedcircuit,asic)、或者一个或多个集成电路等方式实现,用于执行相关程序,以实现本说明书实施例所提供的技术方案。

存储器1020可以采用rom(readonlymemory,只读存储器)、ram(randomaccessmemory,随机存取存储器)、静态存储设备,动态存储设备等形式实现。存储器1020可以存储操作系统和其他应用程序,在通过软件或者固件来实现本说明书实施例所提供的技术方案时,相关的程序代码保存在存储器1020中,并由处理器1010来调用执行。

输入/输出接口1030用于连接输入/输出模块,以实现信息输入及输出。输入输出/模块可以作为组件配置在设备中(图中未示出),也可以外接于设备以提供相应功能。其中输入设备可以包括键盘、鼠标、触摸屏、麦克风、各类传感器等,输出设备可以包括显示器、扬声器、振动器、指示灯等。

通信接口1040用于连接通信模块(图中未示出),以实现本设备与其他设备的通信交互。其中通信模块可以通过有线方式(例如usb、网线等)实现通信,也可以通过无线方式(例如移动网络、wifi、蓝牙等)实现通信。

总线1050包括一通路,在设备的各个组件(例如处理器1010、存储器1020、输入/输出接口1030和通信接口1040)之间传输信息。

需要说明的是,尽管上述设备仅示出了处理器1010、存储器1020、输入/输出接口1030、通信接口1040以及总线1050,但是在具体实施过程中,该设备还可以包括实现正常运行所必需的其他组件。此外,本领域的技术人员可以理解的是,上述设备中也可以仅包含实现本说明书实施例方案所必需的组件,而不必包含图中所示的全部组件。

本说明书实施例还提供一种计算机可读存储介质,其上存储有计算机程序,该程序被处理器执行时实现图3和/或5所示的方法。

计算机可读介质包括永久性和非永久性、可移动和非可移动媒体可以由任何方法或技术来实现信息存储。信息可以是计算机可读指令、数据结构、程序的模块或其他数据。计算机的存储介质的例子包括,但不限于相变内存(pram)、静态随机存取存储器(sram)、动态随机存取存储器(dram)、其他类型的随机存取存储器(ram)、只读存储器(rom)、电可擦除可编程只读存储器(eeprom)、快闪记忆体或其他内存技术、只读光盘只读存储器(cd-rom)、数字多功能光盘(dvd)或其他光学存储、磁盒式磁带,磁带磁磁盘存储或其他磁性存储设备或任何其他非传输介质,可用于存储可以被计算设备访问的信息。按照本文中的界定,计算机可读介质不包括暂存电脑可读媒体(transitorymedia),如调制的数据信号和载波。

通过以上的实施方式的描述可知,本领域的技术人员可以清楚地了解到本说明书实施例可借助软件加必需的通用硬件平台的方式来实现。基于这样的理解,本说明书实施例的技术方案本质上或者说对现有技术做出贡献的部分可以以软件产品的形式体现出来,该计算机软件产品可以存储在存储介质中,如rom/ram、磁碟、光盘等,包括若干指令用以使得一台计算机设备(可以是个人计算机,服务设备,或者网络设备等)执行本说明书实施例各个实施例或者实施例的某些部分所述的方法。

上述实施例阐明的系统、方法、模块或单元,具体可以由计算机芯片或实体实现,或者由具有某种功能的产品来实现。一种典型的实现设备为计算机,计算机的具体形式可以是个人计算机、膝上型计算机、蜂窝电话、相机电话、智能电话、个人数字助理、媒体播放器、导航设备、电子邮件收发设备、游戏控制台、平板计算机、可穿戴设备或者这些设备中的任意几种设备的组合。

本说明书中的各个实施例均采用递进的方式描述,各个实施例之间相同相似的部分互相参见即可,每个实施例重点说明的都是与其他实施例的不同之处。尤其,对于方法实施例而言,由于其基本相似于方法实施例,所以描述得比较简单,相关之处参见方法实施例的部分说明即可。以上所描述的方法实施例仅仅是示意性的,其中所述作为分离部件说明的模块可以是或者也可以不是物理上分开的,在实施本说明书实施例方案时可以把各模块的功能在同一个或多个软件和/或硬件中实现。也可以根据实际的需要选择其中的部分或者全部模块来实现本实施例方案的目的。本领域普通技术人员在不付出创造性劳动的情况下,即可以理解并实施。

以上所述仅是本说明书实施例的具体实施方式,应当指出,对于本技术领域的普通技术人员来说,在不脱离本说明书实施例原理的前提下,还可以做出若干改进和润饰,这些改进和润饰也应视为本说明书实施例的保护范围。

当前第1页1 2 
网友询问留言 已有0条留言
  • 还没有人留言评论。精彩留言会获得点赞!
1