CN108492342B - 合并碎图的方法、装置、处理器、存储介质和终端 - Google Patents

合并碎图的方法、装置、处理器、存储介质和终端 Download PDF

Info

Publication number
CN108492342B
CN108492342B CN201810242358.3A CN201810242358A CN108492342B CN 108492342 B CN108492342 B CN 108492342B CN 201810242358 A CN201810242358 A CN 201810242358A CN 108492342 B CN108492342 B CN 108492342B
Authority
CN
China
Prior art keywords
sub
graph
area
broken
picture
Prior art date
Legal status (The legal status is an assumption and is not a legal conclusion. Google has not performed a legal analysis and makes no representation as to the accuracy of the status listed.)
Active
Application number
CN201810242358.3A
Other languages
English (en)
Other versions
CN108492342A (zh
Inventor
张宁新
Current Assignee (The listed assignees may be inaccurate. Google has not performed a legal analysis and makes no representation or warranty as to the accuracy of the list.)
Netease Hangzhou Network Co Ltd
Original Assignee
Netease Hangzhou Network Co Ltd
Priority date (The priority date is an assumption and is not a legal conclusion. Google has not performed a legal analysis and makes no representation as to the accuracy of the date listed.)
Filing date
Publication date
Application filed by Netease Hangzhou Network Co Ltd filed Critical Netease Hangzhou Network Co Ltd
Priority to CN201810242358.3A priority Critical patent/CN108492342B/zh
Publication of CN108492342A publication Critical patent/CN108492342A/zh
Application granted granted Critical
Publication of CN108492342B publication Critical patent/CN108492342B/zh
Active legal-status Critical Current
Anticipated expiration legal-status Critical

Links

Images

Classifications

    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06TIMAGE DATA PROCESSING OR GENERATION, IN GENERAL
    • G06T11/002D [Two Dimensional] image generation
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06TIMAGE DATA PROCESSING OR GENERATION, IN GENERAL
    • G06T15/003D [Three Dimensional] image rendering
    • G06T15/005General purpose rendering architectures
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06TIMAGE DATA PROCESSING OR GENERATION, IN GENERAL
    • G06T5/00Image enhancement or restoration
    • G06T5/50Image enhancement or restoration using two or more images, e.g. averaging or subtraction
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06TIMAGE DATA PROCESSING OR GENERATION, IN GENERAL
    • G06T2207/00Indexing scheme for image analysis or image enhancement
    • G06T2207/20Special algorithmic details
    • G06T2207/20212Image combination
    • G06T2207/20221Image fusion; Image merging

Landscapes

  • Engineering & Computer Science (AREA)
  • Physics & Mathematics (AREA)
  • General Physics & Mathematics (AREA)
  • Theoretical Computer Science (AREA)
  • Computer Graphics (AREA)
  • Editing Of Facsimile Originals (AREA)
  • Processing Or Creating Images (AREA)
  • Image Generation (AREA)

Abstract

本发明公开了一种合并碎图的方法、装置、处理器、存储介质和终端。其中,该方法包括:获取目标图片,其中,目标图片是由多张碎图合并而成且包含有透明区域的图片,所述透明区域为所述目标图片上不包含像素信息的区域;根据多张碎图在目标图片中占据的面积比例,确定至少一张子图,其中,至少一张子图用于合并多张碎图,且至少一张子图的面积之和小于目标图片的面积;将多张碎图合并到至少一张子图上。本发明解决了现有技术中,将多个小图合并为一张大图后进行渲染的方案,由于大图中存在透明区域导致存储空间浪费的技术问题。

Description

合并碎图的方法、装置、处理器、存储介质和终端
技术领域
本发明涉及计算机软件领域,具体而言,涉及一种合并碎图的方法、装置、处理器、存储介质和终端。
背景技术
现有技术中,在游戏开发或网页制作过程中,为了减少资源内存的占用,需要将图片转换为pvr资源,如果使用各种合图软件工具(例如,texturepacker)将很多碎图(小图)合并为一张方形二次幂的大图,大图中会存在一些没有有效像素的透明区域,这些透明区域会占用多余的存储空间。
例如,图1是根据现有技术的一种可选的合并碎图方案示意图,如图1所示,通常情况下,合图软件工具(例如,texturepacker)将若干资源图片拼接为一张方形二次幂(方形二次幂是指png图片必须是二次幂宽高并且宽高一样,如尺寸大小为64×64、128×128、256×256、512×512等)的png大图,由图1可以看出,合并后的png大图中存在很多透明区域,这部分区域既浪费包体,又占用内存。
针对上述现有技术中,将多个小图合并为一张大图后进行渲染的方案,由于大图中存在透明区域导致存储空间浪费的问题,目前尚未提出有效的解决方案。
发明内容
本发明实施例提供了一种合并碎图的方法、装置、处理器、存储介质和终端,以至少解决现有技术中,将多个小图合并为一张大图后进行渲染的方案,由于大图中存在透明区域导致存储空间浪费的技术问题。
根据本发明实施例的一个方面,提供了一种合并碎图的方法,包括:获取目标图片,其中,目标图片是由多张碎图合并而成且包含有透明区域的图片,所述透明区域为所述目标图片上不包含像素信息的区域;根据多张碎图在目标图片中占据的面积比例,确定至少一张子图,其中,至少一张子图用于合并多张碎图,且至少一张子图的面积之和小于目标图片的面积;将多张碎图合并到至少一张子图上。
进一步地,根据多张碎图在目标图片中占据的面积比例,确定至少一张子图,包括:获取目标图片的第一配置文件,其中,第一配置文件中记载目标图片中合并的每张碎图在目标图片中的位置信息和有效像素区域的面积信息;基于第一配置文件,计算多张碎图的有效像素区域的面积在目标图片中占据的面积比例;根据目标图片的尺寸信息和面积比例,确定至少一张子图。
进一步地,在目标图片和至少一张子图为方形二次幂图片的情况下,根据目标图片的尺寸信息和面积比例,确定至少一张子图,包括:如果面积比例在0.25与0.5之间,则确定采用两张子图合并多张碎图,其中,每张子图的大小为目标图片的尺寸的一半;如果面积比例在0.5与0.75之间,则确定采用三张子图合并多张碎图,其中,每张子图的大小为目标图片的尺寸的一半;如果面积比例在0.75与1之间,则确定采用三张第一尺寸的子图和一张第二尺寸的子图合并多张碎图,其中,第一尺寸为目标图片的尺寸的一半,第二尺寸为第一尺寸的一半。
进一步地,将多张碎图合并到至少一张子图上,包括:基于每张碎图的有效像素区域的面积,对多张碎图进行排序;按照有效像素区域的面积从大到小的顺序,将多张碎图依次合并到至少一张子图上,直到每张子图上合并的碎图的有效像素区域的面积达到每张子图的有效合并面积,其中,有效合并面积为每张子图上需要合并碎图的最大像素面积。
进一步地,在将多张碎图合并到至少一张子图上之后,方法还包括:输出至少一张子图,并为每张子图生成第二配置文件,其中,第二配置文件记载对应子图中包含的每张碎图的有效像素区域信息以及每张碎图在对应子图中的位置信息。
进一步地,在输出至少一张子图,并生成第二配置文件之后,方法还包括:为至少一张子图生成第三配置文件,其中,第三配置文件至少用于记录子图的数量和每张子图的尺寸信息。
根据本发明实施例的另一方面,还提供了一种合并图片的装置,包括:获取单元,用于获取目标图片,其中,目标图片是由多张碎图合并而成且包含有透明区域的图片,所述透明区域为所述目标图片上不包含像素信息的区域;确定单元,用于根据多张碎图在目标图片中占据的面积比例,确定至少一张子图,其中,至少一张子图用于合并多张碎图,且至少一张子图的面积之和小于目标图片的面积;合并单元,用于将多张碎图合并到至少一张子图上。
根据本发明实施例的另一方面,还提供了一种存储介质,所述存储介质包括存储的程序,其中,在所述程序运行时控制所述存储介质所在设备执行上述方法实施例中任意一项可选的或优选的合并碎图的方法。
根据本发明实施例的另一方面,还提供了一种处理器,所述处理器用于运行程序,其中,所述程序运行时执行上述方法实施例中任意一项可选的或优选的合并碎图的方法。
根据本发明实施例的另一方面,还提供了一种终端,包括:一个或多个处理器,存储器,显示装置以及一个或多个程序,其中,所述一个或多个程序被存储在所述存储器中,并且被配置为由所述一个或多个处理器执行,所述一个或多个程序包括用于执行上述方法实施例中任意一项可选的或优选的合并碎图的方法。
在本发明实施例中,通过获取目标图片,其中,目标图片是由多张碎图合并而成且包含有透明区域的图片,所述透明区域为所述目标图片上不包含像素信息的区域;根据多张碎图在目标图片中占据的面积比例,确定至少一张子图,其中,至少一张子图用于合并多张碎图,且至少一张子图的面积之和小于目标图片的面积;将多张碎图合并到至少一张子图上,达到了在合并碎图的时候,尽量降低合并碎图而产生的透明区域的目的,从而实现了减少内存占用的技术效果,进而解决了现有技术中,将多个小图合并为一张大图后进行渲染的方案,由于大图中存在透明区域导致存储空间浪费的技术问题。
附图说明
此处所说明的附图用来提供对本发明的进一步理解,构成本申请的一部分,本发明的示意性实施例及其说明用于解释本发明,并不构成对本发明的不当限定。在附图中:
图1是根据现有技术的一种可选的合并碎图方案示意图;
图2是根据本发明实施例的一种合并碎图的方法流程图;
图3是根据本发明实施例的一种可选的合并碎图方案示意图;
图4是根据本发明实施例的一种合并碎图的方法流程图;
图5是根据本发明实施例的一种合并碎图的方法流程图;
图6是根据本发明实施例的一种合并碎图的方法流程图;
图7是根据本发明实施例的一种可选的自动拆分plist文件方法流程图;
图8是根据本申请实施例的一种可选的自动拆分plist文件的功能模块示意图;
图9是根据本申请实施例的一种可选的自动拆分plist文件的功能模块示意图;以及
图10是根据本发明实施例的一种合并碎图的装置示意图。
具体实施方式
为了使本技术领域的人员更好地理解本发明方案,下面将结合本发明实施例中的附图,对本发明实施例中的技术方案进行清楚、完整地描述,显然,所描述的实施例仅仅是本发明一部分的实施例,而不是全部的实施例。基于本发明中的实施例,本领域普通技术人员在没有做出创造性劳动前提下所获得的所有其他实施例,都应当属于本发明保护的范围。
需要说明的是,本发明的说明书和权利要求书及上述附图中的术语“第一”、“第二”等是用于区别类似的对象,而不必用于描述特定的顺序或先后次序。应该理解这样使用的数据在适当情况下可以互换,以便这里描述的本发明的实施例能够以除了在这里图示或描述的那些以外的顺序实施。此外,术语“包括”和“具有”以及他们的任何变形,意图在于覆盖不排他的包含,例如,包含了一系列步骤或单元的过程、方法、系统、产品或设备不必限于清楚地列出的那些步骤或单元,而是可包括没有清楚地列出的或对于这些过程、方法、产品或设备固有的其它步骤或单元。
根据本发明实施例,提供了一种合并碎图的方法实施例,需要说明的是,在附图的流程图示出的步骤可以在诸如一组计算机可执行指令的计算机系统中执行,并且,虽然在流程图中示出了逻辑顺序,但是在某些情况下,可以以不同于此处的顺序执行所示出或描述的步骤。
图2是根据本发明实施例的一种合并碎图的方法流程图,如图2所示,该方法包括如下步骤:
步骤S202,获取目标图片,其中,目标图片是由多张碎图合并而成且包含有透明区域的图片,透明区域为所述目标图片上不包含像素信息的区域。
具体地,上述目标图片可以是由多张碎图合并而成的图片,可选地,该目标图片格式包括但不限于png格式,作为一种可选的实施例,上述目标图片可以是通过合图软件工具(例如,texturepacker工具)将多张碎图合并而成的图片,texturePacker是一款快速打包图片的工具,可以将多张小图(即碎图)合并成一张大图png和一份plist文件,plist文件是cocos2dx引擎中用来组织多张png资源的配置文件。合并大图的好处是减少渲染dp同时能将碎图中的透明区域进行裁剪,从而减少资源大小。
需要说明的是,上述透明区域是指在将多张碎图合并为一张大图时,大图上不包含有效像素的区域,该区域在渲染时可以根据具体场景添加像素信息。
容易注意的是,pvr资源是ios平台压缩纹理资源格式,但是pvr只支持方形二次幂的资源。因而,为了将把png转换成pvr格式,使用texturepacker合并出来的大图png必须是方形二次幂的。由图1可以看出,一旦输出方形二次幂的大图png后,我们发现大图png中存在很多透明的区域,而这部分区域既浪费包体又浪费内存。
步骤S204,根据多张碎图在目标图片中占据的面积比例,确定至少一张子图,其中,至少一张子图用于合并多张碎图,且至少一张子图的面积之和小于目标图片的面积。
具体地,在上述步骤中,如果可以将多张碎图合并到一张目标图片上,那么也可以将待合并的多张碎图合并到多个子图上,子图是指面积小于目标图片面积的图片,可选地,可以是将目标图片进行划分或切割而成的多个子图,按照多张碎图在目标图片中占据的面积比例,可以确定需要多张子图来合并该多张碎图,如果用于合并多张碎图的至少一张子图的面积之和小于目标图片的面积,则可以裁剪掉一些没有有效像素的透明区域,例如,png图片中的透明区域。
例如,图3是根据本发明实施例的一种可选的合并碎图方案示意图,如果假设图1所示的是一张512×512的大图,则图3所示的是两张256×256的子图,当待合并到目标图片上的多张碎图的面积之和小于目标图片面积的二分之一(即待合并到目标图片上的多张碎图在目标图片中占据的面积比例小于0.5)的情况下,则可以将待合并的多张碎图合并到两张256×256的子图上,从而节省了两张256×256大小的透明区域,使得内存占用直接降低了一半。
步骤S206,将多张碎图合并到至少一张子图上。
具体地,在根据多张碎图在目标图片中占据的面积比例确定需要使用的子图数量和尺寸信息后,可以将待合并到目标图片上的多张碎图合并到多张子图上。
容易注意的是,目前使用texturepacker合并碎图是都是输出一份方形二次幂png和plist,并不会主动去拆分plist输出,这样会导致冗余的包体和内存占用。如果有需要将碎图合并成多份plist输出时,基本都是手动将碎图分成几份,然后每份单独合并输出plist,缺少一种能够自动批量处理拆分输出多份plist的工具,如果针对大量这种资源需要处理时,手动方式必然不可行的。
需要说明的是,上述步骤S202至S206公开的方案,可以不仅能处理碎图还能直接处理已经存在的大图。如果是处理已经存在的plist时才需要这一步,根据plist配置再把大图png里面的每个小图都单独拆分出来保存,
由上可知,在本申请上述实施例中,在获取到由多张碎图合并而成的目标图片,根据多张碎图占据目标图片的面积比例,确定用于合并该多张碎图使用的至少一张子图,然后将多张碎图合并到确定的至少一张子图上,达到了在合并碎图的时候,尽量降低合并碎图而产生的透明区域的目的,从而实现了减少内存占用的技术效果,进而解决了现有技术中,将多个小图合并为一张大图后进行渲染的方案,由于大图中存在透明区域导致存储空间浪费的技术问题。
容易注意的是,上述本申请上述步骤S202至S206公开的方案,可以用于将任意一种包含多张碎图的图片进行重新裁剪合并,以得到透明区域最小的几张子图;也可以用于将一组待合并的碎图直接合并为多张透明区域最小的子图。在后一种情形下,由于事先无法估算用于合并碎图的子图的数量,因而,需要使用合并软件工具将待合并的多张碎图合并为一张目标图片。
在一种可选的实施例中,如图4所示,根据多张碎图在目标图片中占据的面积比例,确定至少一张子图,可以包括:
步骤S402,获取目标图片的第一配置文件,其中,第一配置文件中记载目标图片中合并的每张碎图在目标图片中的位置信息和有效像素区域的面积信息;
步骤S404,基于第一配置文件,计算多张碎图的有效像素区域的面积在目标图片中占据的面积比例;
步骤S406,根据目标图片的尺寸信息和面积比例,确定至少一张子图。
具体地,在上述实施例中,第一配置文件可以是与目标图片对应的记载了目标图片中合并的每张碎图在目标图片中的位置信息和有效像素区域的面积信息的文件,作为一种可选的实施方式,当上述目标图片为texturepacker工具合并输出的png图片的情况下,上述第一配置文件可以是对应的plist文件。根据目标图片的第一配置文件中记载的信息,可以获取到目标图片中每张碎图的有效像素区域的面积信息,根据目标图片的尺寸信息以及目标图片中每张碎图的有效像素区域的面积信息,计算得到目标图片中多张碎图的有效像素区域的面积在目标图片中占据的面积比例,进而根据目标图片的尺寸信息和面积比例,确定用于合并目标图片中多张碎图时使用的子图的数量以及每张子图的尺寸信息。
基于上述实施例,作为一种可选的实施例,如图5所示,在目标图片和至少一张子图为方形二次幂图片的情况下,根据目标图片的尺寸信息和面积比例,确定至少一张子图,可以包括如下步骤:
步骤S502,如果面积比例在0.25与0.5之间,则确定采用两张子图合并多张碎图,其中,每张子图的大小为目标图片的尺寸的一半;
步骤S504,如果面积比例在0.5与0.75之间,则确定采用三张子图合并多张碎图,其中,每张子图的大小为目标图片的尺寸的一半;
步骤S506,如果面积比例在0.75与1之间,则确定采用三张第一尺寸的子图和一张第二尺寸的子图合并多张碎图,其中,第一尺寸为目标图片的尺寸的一半,第二尺寸为第一尺寸的一半。
需要说明的是,以texturepacker工具为例,由于texturepacker工具合并输出的目标图片是方形二次幂的,因而,如果可以使用一张子图合并目标图片上的多张碎图,则texturepacker工具会直接输出一张子图大小的图片,例如,大图是512×512的,使用一张256*256的图肯定是没法直接存下的,否则texturepacker在合并大图时,会自动采用256*256来存。
因而,目标图片上的多张碎图的有效像素区域面积之和占大图比例ratio一定是大于0.25的。
仍以512×512大图为例,当ratio为0.25-0.5之间,预估两张256×256来放;当ratio为0.5-0.75之间,预估3张256×256来放;当ratio大于0.75时,预估3张256×256+一张小于256×256图来放,如果需要四张256×256才能存放时,那么此时的大图就没必要拆分了。
容易注意的是,在选择子图时,会自动选择比大图小一个等级的,不能一直拆分下去,比如将512*512的大图,拆分成2个256*256子图,就只有2个渲染批次,如果拆成4个128*128就是4个渲染批次,同时会增加I/O次数,所以拆分的上限是3个低一等级子图+1张低一等级以下的子图,这样既保证合并小图的优势,同时降低了透明区域,如果需要4个低一等级的子图的话,那么就不会去拆分了,这种拆分的意义不大了。
在一种可选的实施例中,如图6所示,将多张碎图合并到至少一张子图上,可以包括:
步骤S602,基于每张碎图的有效像素区域的面积,对多张碎图进行排序;
步骤S604,按照有效像素区域的面积从大到小的顺序,将多张碎图依次合并到至少一张子图上,直到每张子图上合并的碎图的有效像素区域的面积达到每张子图的有效合并面积,其中,有效合并面积为每张子图上需要合并碎图的最大像素面积。
具体地,在上述实施例中,在根据目标图片的尺寸信息和面积比例,确定用于合并目标图片中多张碎图时使用的子图的数量以及每张子图的尺寸信息后,在将目标图片上的多张碎图合并到子图上时,可以将待合并的碎图按照有效像素区域面积从大到小进行排序,以便在重组子图时,优先合并面积大的。预估了子图个数之后,就能估算每个子图能放的小图面积之和,将拆分出来的每个小图由大到小进行排序,然后累加小图面积直至达到子图能放的面积之和,然后合并到一个子图。如果预估的小图放不下时,这时texturepacker会自动反馈给我们放不下的小图,这些多余的小图继续往下一张子图去放。如果能放下时,尝试把剩下最小的小图继续加入这张子图中,直到不能继续放时,这样就合成了一张子图。这样预估的目的就是减少算法时间开销,只需要判断几张小图即可,而且最后的输出结果也是满意的,因为不可能百分百过滤掉所有的透明区域的。
作为一种可选的实施例,可以根据所有待合并的碎图的有效像素区域面积之和除以子图个数得到每个子图需要合并的小图有效合并面积,使用Sub表示,依次遍历排序后的小图,累加小图面积直至达到子图面积Sub,然后合并一个子图。
如果预估的小图放不下时,这时texturepacker会自动反馈给放不下的那些小图,这些多余的小图放回原来的排序后的小图列表中,等待下一张子图合并。
如果能放下时,尝试把剩下最小的小图依次继续加入这张子图中,直到不能继续放时,这样就合成了一张子图。在合并子图256*256时,如果子图里面的小图可以用更小的子图如128*128来存放时,那么texturepacker会自动采用更小的子图来存。
这样预估的目的就是减少算法时间开销,只需要判断几张小图即可。
基于上述任意一种可选的实施例,作为一种可选的实施例,在将多张碎图合并到至少一张子图上之后,上述方法还可以包括:输出至少一张子图,并为每张子图生成第二配置文件,其中,第二配置文件记载对应子图中包含的每张碎图的有效像素区域信息以及每张碎图在对应子图中的位置信息。
通过第二配置文件可以记录每张子图合并的碎图的效像素区域信息以及每张碎图在对应子图中的位置信息。
基于上述实施例,作为一种可选的实施例,上述方法还可以包括:为至少一张子图生成第三配置文件,其中,第三配置文件至少用于记录子图的数量和每张子图的尺寸信息。
通过第三配置文件可以确定待合并的碎图需要使用多少张子图来合并(即原始目标图片被拆分几份),以及每张子图的大小。
作为一种优选的实施例,本申请上述各个实施例提供的合并图片的方法可以用于自动拆分texturepacker输出的plist文件,图7是根据本发明实施例的一种可选的自动拆分plist文件方法流程图,如图7所示,包括如下步骤:
步骤S701,将需要合并的碎图用texturepacker输出一份大图plist和png。
因为一开始我们无法估算应该拆分几张小图plist输出,所以我们反其道而行之,先用texturepacker输出一份大图plist和png,其中输出的大图plist中记录了各个小图在大图中的位置以及真实的像素区域(裁减掉碎图边缘透明区域之后的图像),所以我们就可以根据大图的plist文件进行后续的分析来估算拆分的子图个数。
步骤S702,计算大图png中每个小图的真实有效像素区域(即过滤边缘透明区域部分)面积。
如果是处理已经存在的plist,而没有原始的小图时,我们需要先根据plist从大图png中拆分出每个小图。将大图plist拆分成多个子plist之后,在游戏中修改资源加载逻辑,兼容两种资源的加载。
在合并大图时,每个小图边缘的透明区域是可以裁减掉的,同时记录了裁减之后的小图在原始小图中的位置和大小,这样真正需要读取这张小图时,就能根据这个信息补充裁减后的透明区域,因此真正合并大图时,实际是用了裁减掉边缘透明区域后的小图来组成大图的。
步骤S703,根据有效像素区域占大图png面积的比例来预估算最后需要几张子图来保存。
步骤S704,将大图合并的所有小图按照有效像素区域面积从大到小进行排序。
步骤S705,根据预估的子图个数,分别合并出每个子图输出。
步骤S706,拆分完子图后,会额外生成一个配置记录原始大图被拆分了几份。例如,如果texturepacker原始输出为src_a.plist(目标图片的第一配置文件)和src_a.png(目标图片),那么经过拆分后输出为:src_a/src_a_1.plist(子图1的配置文件,即上述第二配置文件),src_a/src_a_1.png(子图1);src_a/src_a_2.plist(子图1的配置文件,即上述第二配置文件),src_a/src_a_2.png(子图2),src_a.sp_conf(即第三配置文件),用于记录大图被拆分的份数。
由于游戏要兼容大图plist和拆分后的子图plist两种资源,因而,游戏逻辑会根据是否有对应的sp_conf配置来分别加载。
在本申请上述实施例中,利用先合并好的大图plist分析出相关信息,预估需要拆分的子图个数,在合并每个子图时,还会根据合并情况进行动态调整,以保证每个子图尽可能的合并更多的小图或碎图,同时只会对那些拆分之后能够减少透明区域的大图进行拆分,经过拆分处理之后,相对原始的大图plist资源节省了30%左右的包体大小和内存占用。
可选地,图8是根据本申请实施例的一种可选的自动拆分plist文件的功能模块示意图,如图8所示,功能模块包括:
碎图合并大图plist模块801,用于将碎图通过texturepacker合并输出一份大图plist和png;
大图png拆出小图模块802,用于将已有的大图png根据相应的plist文件,从大图中拆分并恢复出每一个原始小图png;
计算小图真实像素模块803,用于根据plist文件信息计算出大图png中每个小图真实的像素区域面积;
估算拆分子图个数模块804,用于根据小图真实像素区域所占大图的比例来估算最后拆分的子图个数,这个的估算并不代表最终的子图个数,而是会在合并子图过程中动态进行调整;
小图排序模块805,用于将大图合并使用的小图按照有效像素区域面积大小从大到小排序;
合并子图模块806,用于把小图进行分组,然后依次把每组小图合并成一个子图,中间在合并分组小图时,会动态的增加或者删减小图,以尽可能的保证每张子图合并更多的小图;
配置和结果保存模块807,用于生成标记拆分子图个数的配置文件以及根据规定的文件命名输出拆分后的子图;
其中,如图9所示,合并子图模块806具体包括:
小图分组单元8061,用于根据估算出来的子图个数N,以及大图对应的所有小图有效区域总面积S,得到每组的小图面积之和M=S/N,然后按照排序后的小图的顺序,依次累加小图有效区域,当达到M时,分组出来,然后同理重新计算下一个分组;
分组合并单元8062,用于将分组出来的小图,利用texturepacker合并成子图输出;
动态调整单元8063,用于在合并分组子图时,动态调整分组里面的小图,如果当前分组的小图不能在规定的子图中合并输出是,texturepacker会自动反馈给我们放不下的那些小图,然后将这些小图放入下一个分组中;如果能放下时,尝试把剩下最小的小图依次继续加入这张子图中,直到不能继续放时,经过动态调整之后,能够保证每张子图尽可能多的合并更多小图。
通过本申请上述实施例公开的方案,可以提供一套自动批处理的工具,可以省去目前人工拆分所需要的时间,另外不仅可以直接将碎图一键拆分多份plist输出,而且还能拆分已经合并好的大图plist文件;最后,本装置不仅处理速度快,而且效果也很满意。
由于游戏中的npc和特效资源都是2d资源,是从端游直接转换过来的,而且资源量巨大,原始png资源达到10G左右,经过这套装置拆分之后,减少了资源的透明空白区域,最后为包体大小和内存占用减少了30%左右。
根据本发明实施例,还提供了一种用于实现上述合并碎图的方法的装置实施例,图10是根据本发明实施例的一种合并碎图的装置示意图,如图10所示,该装置包括:获取单元101、确定单元103和合并单元105。
其中,获取单元101,用于获取目标图片,其中,目标图片是由多张碎图合并而成且包含有透明区域的图片,所述透明区域为所述目标图片上不包含像素信息的区域;
确定单元103,用于根据多张碎图在目标图片中占据的面积比例,确定至少一张子图,其中,至少一张子图用于合并多张碎图,且至少一张子图的面积之和小于目标图片的面积;
合并单元105,用于将多张碎图合并到至少一张子图上。
此处需要说明的是,上述获取单元101、确定单元103和合并单元105对应于方法实施例中的步骤S202至S206,上述模块与对应的步骤所实现的示例和应用场景相同,但不限于上述方法实施例所公开的内容。需要说明的是,上述模块作为装置的一部分可以在诸如一组计算机可执行指令的计算机系统中执行。
由上可知,在本申请上述实施例中,通过获取单元101获取由多张碎图合并而成的目标图片,通过确定单元103根据多张碎图占据目标图片的面积比例,确定用于合并该多张碎图使用的至少一张子图,然后通过合并单元105将多张碎图合并到确定的至少一张子图上,达到了在合并碎图的时候,尽量降低合并碎图而产生的透明区域的目的,从而实现了减少内存占用的技术效果,进而解决了现有技术中,将多个小图合并为一张大图后进行渲染的方案,由于大图中存在透明区域导致存储空间浪费的技术问题。
在一种可选的实施例中,上述确定单元可以包括:获取模块,用于获取目标图片的第一配置文件,其中,第一配置文件中记载目标图片中合并的每张碎图在目标图片中的位置信息和有效像素区域的面积信息;计算模块,用于基于第一配置文件,计算多张碎图的有效像素区域的面积在目标图片中占据的面积比例;确定模块,用于根据目标图片的尺寸信息和面积比例,确定至少一张子图。
在一种可选的实施例中,在目标图片和至少一张子图为方形二次幂图片的情况下,上述确定模块可以包括:第一确定子模块,用于如果面积比例在0.25与0.5之间,则确定采用两张子图合并多张碎图,其中,每张子图的大小为目标图片的尺寸的一半;第二确定子模块,用于如果面积比例在0.5与0.75之间,则确定采用三张子图合并多张碎图,其中,每张子图的大小为目标图片的尺寸的一半;第三确定子模块,用于如果面积比例在0.75与1之间,则确定采用三张第一尺寸的子图和一张第二尺寸的子图合并多张碎图,其中,第一尺寸为目标图片的尺寸的一半,第二尺寸为第一尺寸的一半。
在一种可选的实施例中,上述合并单元可以包括:排序模块,用于基于每张碎图的有效像素区域的面积,对多张碎图进行排序;合并模块,用于按照有效像素区域的面积从大到小的顺序,将多张碎图依次合并到至少一张子图上,直到每张子图上合并的碎图的有效像素区域的面积达到每张子图的有效合并面积,其中,有效合并面积为每张子图上需要合并碎图的最大像素面积。
基于上述任意一种可选的实施例,作为一种可选的实施例,上述装置还可以包括:输出单元,用于输出至少一张子图,并为每张子图生成第二配置文件,其中,第二配置文件记载对应子图中包含的每张碎图的有效像素区域信息以及每张碎图在对应子图中的位置信息。
基于上述实施,作为一种可选的实施例,上述装置还可以包括:生成单元,用于为至少一张子图生成第三配置文件,其中,第三配置文件至少用于记录子图的数量和每张子图的尺寸信息。
根据本发明实施例,还提供了一种存储介质,所述存储介质包括存储的程序,其中,在所述程序运行时控制所述存储介质所在设备执行上述方法实施例中任意一项可选的或优选的合并碎图的方法。
根据本发明实施例,还提供了一种处理器,所述处理器用于运行程序,其中,所述程序运行时执行上述方法实施例中任意一项可选的或优选的合并碎图的方法。
根据本发明实施例,还提供了一种终端,包括:一个或多个处理器,存储器,显示装置以及一个或多个程序,其中,所述一个或多个程序被存储在所述存储器中,并且被配置为由所述一个或多个处理器执行,所述一个或多个程序包括用于执行上述方法实施例中任意一项可选的或优选的合并碎图的方法。
上述的装置可以包括处理器和存储器,上述单元均可以作为程序单元存储在存储器中,由处理器执行存储在存储器中的上述程序单元来实现相应的功能。
存储器可能包括计算机可读介质中的非永久性存储器,随机存取存储器(RAM)和/或非易失性内存等形式,如只读存储器(ROM)或闪存(flash RAM),存储器包括至少一个存储芯片。
上述本申请实施例的顺序不代表实施例的优劣。
在本申请的上述实施例中,对各个实施例的描述都各有侧重,某个实施例中没有详述的部分,可以参见其他实施例的相关描述。在本申请所提供的几个实施例中,应该理解到,所揭露的技术内容,可通过其它的方式实现。
其中,以上所描述的装置实施例仅仅是示意性的,例如所述单元的划分,可以为一种逻辑功能划分,实际实现时可以有另外的划分方式,例如多个单元或组件可以结合或者可以集成到另一个系统,或一些特征可以忽略,或不执行。另一点,所显示或讨论的相互之间的耦合或直接耦合或通信连接可以是通过一些接口,单元或模块的间接耦合或通信连接,可以是电性或其它的形式。
另外,在本申请各个实施例中的各功能单元可以集成在一个处理单元中,也可以是各个单元单独物理存在,也可以两个或两个以上单元集成在一个单元中。上述集成的单元既可以采用硬件的形式实现,也可以采用软件功能单元的形式实现。
所述集成的单元如果以软件功能单元的形式实现并作为独立的产品销售或使用时,可以存储在一个计算机可读取存储介质中。基于这样的理解,本申请的技术方案本质上或者说对现有技术做出贡献的部分或者该技术方案的全部或部分可以以软件产品的形式体现出来,该计算机软件产品存储在一个存储介质中,包括若干指令用以使得一台计算机设备(可为个人计算机、服务器或者网络设备等)执行本申请各个实施例所述方法的全部或部分步骤。而前述的存储介质包括:U盘、只读存储器(ROM,Read-Only Memory)、随机存取存储器(RAM,Random Access Memory)、移动硬盘、磁碟或者光盘等各种可以存储程序代码的介质。
以上所述仅是本申请的优选实施方式,应当指出,对于本技术领域的普通技术人员来说,在不脱离本申请原理的前提下,还可以做出若干改进和润饰,这些改进和润饰也应视为本申请的保护范围。

Claims (10)

1.一种合并碎图的方法,其特征在于,包括:
获取目标图片,其中,所述目标图片是由多张碎图合并而成,且包含有透明区域的图片,所述透明区域为所述目标图片上不包含像素信息的区域;
根据所述多张碎图在所述目标图片中占据的面积比例,确定至少一张子图,其中,所述至少一张子图用于合并所述多张碎图,且所述至少一张子图的面积之和小于所述目标图片的面积;
将所述多张碎图合并到所述至少一张子图上,其中,所述目标图片和所述至少一张子图为方形二次幂图片;
其中,将所述多张碎图合并到所述至少一张子图上,包括:裁剪掉每张所述碎图的所述透明区域,且将裁剪后的每张所述碎图合并到所述至少一张子图上。
2.根据权利要求1所述的方法,其特征在于,根据所述多张碎图在所述目标图片中占据的面积比例,确定所述至少一张子图,包括:
获取所述目标图片的第一配置文件,其中,所述第一配置文件中记载所述目标图片中合并的每张碎图在所述目标图片中的位置信息和有效像素区域的面积信息;
基于所述第一配置文件,计算所述多张碎图的有效像素区域的面积在所述目标图片中占据的面积比例;
根据所述目标图片的尺寸信息和所述面积比例,确定所述至少一张子图。
3.根据权利要求2所述的方法,其特征在于,根据所述目标图片的尺寸信息和所述面积比例,确定所述至少一张子图,包括:
如果所述面积比例在0.25与0.5之间,则确定采用两张子图合并所述多张碎图,其中,每张子图的大小为所述目标图片的尺寸的一半;
如果所述面积比例在0.5与0.75之间,则确定采用三张子图合并所述多张碎图,其中,每张子图的大小为所述目标图片的尺寸的一半;
如果所述面积比例在0.75与1之间,则确定采用三张第一尺寸的子图和一张第二尺寸的子图合并所述多张碎图,其中,所述第一尺寸为所述目标图片的尺寸的一半,所述第二尺寸为所述第一尺寸的一半。
4.根据权利要求1所述的方法,其特征在于,将所述多张碎图合并到所述至少一张子图上,包括:
基于每张碎图的有效像素区域的面积,对所述多张碎图进行排序;
按照有效像素区域的面积从大到小的顺序,将所述多张碎图依次合并到所述至少一张子图上,直到每张子图上合并的碎图的有效像素区域的面积达到所述每张子图的有效合并面积,其中,所述有效合并面积为每张子图上需要合并碎图的最大像素面积。
5.根据权利要求1至4中任意一项所述的方法,其特征在于,在将所述多张碎图合并到所述至少一张子图上之后,所述方法还包括:
输出所述至少一张子图,并为每张子图生成第二配置文件,其中,所述第二配置文件记载对应子图中包含的每张碎图的有效像素区域信息以及所述每张碎图在对应子图中的位置信息。
6.根据权利要求5所述的方法,其特征在于,在输出所述至少一张子图,并生成所述第二配置文件之后,所述方法还包括:
为所述至少一张子图生成第三配置文件,其中,所述第三配置文件至少用于记录子图的数量和每张子图的尺寸信息。
7.一种合并图片的装置,其特征在于,包括:
获取单元,用于获取目标图片,其中,所述目标图片是由多张碎图合并而成且包含有透明区域的图片,所述透明区域为所述目标图片上不包含像素信息的区域;
确定单元,用于根据所述多张碎图在所述目标图片中占据的面积比例,确定至少一张子图,其中,所述至少一张子图用于合并所述多张碎图,且所述至少一张子图的面积之和小于所述目标图片的面积;
合并单元,用于将所述多张碎图合并到所述至少一张子图上,其中,所述目标图片和所述至少一张子图为方形二次幂图片;
其中,所述合并单元用于通过以下步骤将所述多张碎图合并到所述至少一张子图上:裁剪掉每张所述碎图的所述透明区域,且将裁剪后的每张所述碎图合并到所述至少一张子图上。
8.一种存储介质,其特征在于,所述存储介质包括存储的程序,其中,在所述程序运行时控制所述存储介质所在设备执行权利要求1至6任意一项所述的合并碎图的方法。
9.一种处理器,其特征在于,所述处理器用于运行程序,其中,所述程序运行时执行权利要求1至6中任意一项所述的合并碎图的方法。
10.一种终端,其特征在于,包括:一个或多个处理器,存储器,显示装置以及一个或多个程序,其中,所述一个或多个程序被存储在所述存储器中,并且被配置为由所述一个或多个处理器执行,所述一个或多个程序包括用于执行权利要求1至6中任意一项所述的合并碎图的方法。
CN201810242358.3A 2018-03-22 2018-03-22 合并碎图的方法、装置、处理器、存储介质和终端 Active CN108492342B (zh)

Priority Applications (1)

Application Number Priority Date Filing Date Title
CN201810242358.3A CN108492342B (zh) 2018-03-22 2018-03-22 合并碎图的方法、装置、处理器、存储介质和终端

Applications Claiming Priority (1)

Application Number Priority Date Filing Date Title
CN201810242358.3A CN108492342B (zh) 2018-03-22 2018-03-22 合并碎图的方法、装置、处理器、存储介质和终端

Publications (2)

Publication Number Publication Date
CN108492342A CN108492342A (zh) 2018-09-04
CN108492342B true CN108492342B (zh) 2022-05-03

Family

ID=63319456

Family Applications (1)

Application Number Title Priority Date Filing Date
CN201810242358.3A Active CN108492342B (zh) 2018-03-22 2018-03-22 合并碎图的方法、装置、处理器、存储介质和终端

Country Status (1)

Country Link
CN (1) CN108492342B (zh)

Families Citing this family (6)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
CN110930292B (zh) * 2018-09-19 2024-01-26 珠海金山办公软件有限公司 一种图像处理的方法、装置、计算机存储介质及终端
CN111353115B (zh) * 2018-12-24 2023-10-27 中移(杭州)信息技术有限公司 一种雪碧图的生成方法及装置
CN111080763A (zh) * 2019-12-26 2020-04-28 珠海金山网络游戏科技有限公司 一种贴图合并方法及装置
CN113791914B (zh) * 2021-11-17 2022-03-11 腾讯科技(深圳)有限公司 对象处理方法、装置、计算机设备、存储介质及产品
CN115442637A (zh) * 2022-09-06 2022-12-06 北京字跳网络技术有限公司 直播特效渲染方法、装置、设备、可读存储介质及产品
CN117576247B (zh) * 2024-01-17 2024-03-29 江西拓世智能科技股份有限公司 一种基于人工智能的图片生成方法及系统

Citations (11)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
WO1997006512A2 (en) * 1995-08-04 1997-02-20 Microsoft Corporation Method and system for rendering graphical objects to image chunks and combining image layers into a display image
KR100822949B1 (ko) * 2006-12-07 2008-04-17 부산대학교 산학협력단 다중 키 프레임 기반의 벡터 그래픽 애니메이션 제작 방법및 제작 시스템
JP2010224733A (ja) * 2009-03-23 2010-10-07 Yamaha Corp レンダリング装置およびプログラム
EP2492843A1 (en) * 2011-02-22 2012-08-29 Thomson Licensing Graphic user interface for adaption of parameters for an automatic logo removal algorithm and method for adaption of these parameters
CN105373768A (zh) * 2014-08-14 2016-03-02 三星电子株式会社 提供图像内容的方法和设备
CN105608716A (zh) * 2015-12-21 2016-05-25 联想(北京)有限公司 一种信息处理方法及电子设备
CN106504185A (zh) * 2016-10-26 2017-03-15 腾讯科技(深圳)有限公司 一种渲染优化方法和装置
CN106528174A (zh) * 2016-11-25 2017-03-22 上海野火网络科技有限公司 基于cocos2dx的flash渲染方法和渲染引擎
CN106570824A (zh) * 2016-10-12 2017-04-19 网易(杭州)网络有限公司 一种散图拼接方法和装置
CN106886353A (zh) * 2017-02-23 2017-06-23 腾讯科技(深圳)有限公司 一种用户界面的显示处理方法及装置
CN107463398A (zh) * 2017-07-21 2017-12-12 腾讯科技(深圳)有限公司 游戏渲染方法、装置、存储设备及终端

Family Cites Families (4)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US8966447B2 (en) * 2010-06-21 2015-02-24 Apple Inc. Capturing and displaying state of automated user-level testing of a graphical user interface application
US9269174B2 (en) * 2013-08-23 2016-02-23 Disney Enterprises, Inc. Methods and systems for generating a polygon mesh
US9355464B2 (en) * 2014-05-30 2016-05-31 Apple Inc. Dynamic generation of texture atlases
US9844723B2 (en) * 2014-07-25 2017-12-19 Zynga Inc. In-browser emulation of multiple technologies to create consistent visualization experience

Patent Citations (11)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
WO1997006512A2 (en) * 1995-08-04 1997-02-20 Microsoft Corporation Method and system for rendering graphical objects to image chunks and combining image layers into a display image
KR100822949B1 (ko) * 2006-12-07 2008-04-17 부산대학교 산학협력단 다중 키 프레임 기반의 벡터 그래픽 애니메이션 제작 방법및 제작 시스템
JP2010224733A (ja) * 2009-03-23 2010-10-07 Yamaha Corp レンダリング装置およびプログラム
EP2492843A1 (en) * 2011-02-22 2012-08-29 Thomson Licensing Graphic user interface for adaption of parameters for an automatic logo removal algorithm and method for adaption of these parameters
CN105373768A (zh) * 2014-08-14 2016-03-02 三星电子株式会社 提供图像内容的方法和设备
CN105608716A (zh) * 2015-12-21 2016-05-25 联想(北京)有限公司 一种信息处理方法及电子设备
CN106570824A (zh) * 2016-10-12 2017-04-19 网易(杭州)网络有限公司 一种散图拼接方法和装置
CN106504185A (zh) * 2016-10-26 2017-03-15 腾讯科技(深圳)有限公司 一种渲染优化方法和装置
CN106528174A (zh) * 2016-11-25 2017-03-22 上海野火网络科技有限公司 基于cocos2dx的flash渲染方法和渲染引擎
CN106886353A (zh) * 2017-02-23 2017-06-23 腾讯科技(深圳)有限公司 一种用户界面的显示处理方法及装置
CN107463398A (zh) * 2017-07-21 2017-12-12 腾讯科技(深圳)有限公司 游戏渲染方法、装置、存储设备及终端

Non-Patent Citations (4)

* Cited by examiner, † Cited by third party
Title
Correct way to import and create many large sprites: SpriteKit;stackoverflow;《https://stackoverflow.com/questions/39881364/correct-way-to-import-and-create-many-large-sprites-spritekit》;20161119;第1页 *
TexturePacker + Importer - Spritesheet generator & Sprite mesh optimizer;Unity Forum;《https://forum.unity.com/threads/texturepacker-importer-spritesheet-generator-sprite-mesh-optimizer.367738/》;20140731;全文 *
TexturePacker纹理打包打法及技巧;小九的博客;《https://blog.csdn.net/qq_31301099/article/details/49798411》;20151112;第1-2页 *
小九的博客.TexturePacker纹理打包打法及技巧.《https://blog.csdn.net/qq_31301099/article/details/49798411》.2015, *

Also Published As

Publication number Publication date
CN108492342A (zh) 2018-09-04

Similar Documents

Publication Publication Date Title
CN108492342B (zh) 合并碎图的方法、装置、处理器、存储介质和终端
KR101142739B1 (ko) 검색 영역을 제한한 이미지 복원 장치 및 방법
CN110555847B (zh) 一种基于卷积神经网络的图像处理方法及装置
CN104834645B (zh) 用于展示版式文档的方法和装置
CN102332001A (zh) 一种视频缩略图生成方法及装置
US9824421B2 (en) Content-aware image resizing using superpixels
JP2007158510A (ja) 画像処理装置及びその制御方法、並びに、コンピュータプログラム及びコンピュータ可読記憶媒体
CN111709883A (zh) 一种图像检测方法、装置及设备
KR20210024126A (ko) 특징 맵 확대 방법, 장치, 디바이스 및 컴퓨터 판독 가능 기록 매체
CN113191235B (zh) 杂物检测方法、装置、设备及存储介质
CN109389659A (zh) Ppt中数学公式的渲染方法、装置、存储介质及终端设备
CN105828081A (zh) 编码方法及编码装置
CN102486379B (zh) 一种导航地图处理方法及装置
CN112732191A (zh) 基于日志结构合并树合并数据的方法、系统、设备及介质
KR20150089598A (ko) 요약정보 생성 장치 및 방법, 그리고 컴퓨터 프로그램이 기록된 기록매체
CN107103632B (zh) 图像压缩方法及装置
CN111340914A (zh) 地图生成方法及装置、存储介质和运载工具
CN101378507B (zh) 块效应去除系统和方法
JP5158974B2 (ja) 注目領域抽出方法、プログラム、及び、画像評価装置
CN108921802B (zh) 一种图像处理方法及装置
CN112738416A (zh) 缩略图预览方法、系统、设备及计算机可读存储介质
JP5614835B2 (ja) 画像レイアウト設定方法および装置
CN104899915A (zh) 一种图片处理方法及终端
CN102915530B (zh) 用于分割输入图像的方法和装置
JP3624013B2 (ja) 画像処理方法及び装置

Legal Events

Date Code Title Description
PB01 Publication
PB01 Publication
SE01 Entry into force of request for substantive examination
SE01 Entry into force of request for substantive examination
GR01 Patent grant
GR01 Patent grant