*CN102855602A*
(10)申请公布号 CN 102855602 A(43)申请公布日 2013.01.02
(12)发明专利申请
(21)申请号 201110177194.9(22)申请日 2011.06.28
(71)申请人阿里巴巴集团控股有限公司
地址英属开曼群岛大开曼资本大厦一座四
层847号邮箱(72)发明人叶茗
(74)专利代理机构北京润泽恒知识产权代理有
限公司 11319
代理人苏培华(51)Int.Cl.
G06T 1/00(2006.01)
权利要求书 2 页 说明书 11 页 附图 3 页权利要求书2页 说明书11页 附图3页
(54)发明名称
一种图片处理方法和装置(57)摘要
本申请提供了一种图片处理方法和装置,其中的方法具体包括:获取图片的二进制数据,所述二进制数据包括若干个数据段;根据图像格式规范对各数据段进行匹配;若某一数据段的匹配结果为失败,则认为该图片为非法格式,结束该图片的处理;若某一数据段的匹配结果为成功,则根据图像格式规范判断所述某一数据段是否为展现无关数据段,若是,则丢弃所述某一数据段,否则,保留所述某一数据段;其中,所有被保留的数据段组成处理后的图片。本申请能够在占用少量系统资源和存储资源的前提下,快速地将图片处理为具有更高安全性的图片。
CN 102855602 ACN 102855602 A
权 利 要 求 书
1/2页
1.一种图片处理方法,其特征在于,包括:获取图片的二进制数据,所述二进制数据包括若干个数据段;根据图像格式规范对各数据段进行匹配;若某一数据段的匹配结果为失败,则认为该图片为非法格式,结束该图片的处理;若某一数据段的匹配结果为成功,则根据图像格式规范判断所述某一数据段是否为展现无关数据段,若是,则丢弃所述某一数据段,否则,保留所述某一数据段;其中,所有被保留的数据段组成处理后的图片。
2.如权利要求1所述的方法,其特征在于,所述数据段包括文件头和图像数据段;所述根据图像格式规范对各数据段进行匹配的步骤,包括:依据图像格式规范对图片的文件头进行校验;若校验未通过,则认为该图片为非法格式,结束该图片的处理;若校验通过,则获取该图片的文件格式,并依据所述该图片的文件格式的图像格式规范,对各图像数据段进行匹配。
3.如权利要求2所述的方法,其特征在于,所述图像数据段的格式包括数据段开始标志;
所述对各图像数据段进行匹配的步骤,包括:
判断某一图像数据段的数据段开始标志是否以所述该图片的文件格式的图像格式规范中规定的格式开头,若是,则得到成功的匹配结果,否则,得到失败的匹配结果。
4.如权利要求2所述的方法,其特征在于,所述图像数据段的格式包括数据段长度;所述对各图像数据段进行匹配的步骤,包括:
判断某一图像数据段的数据段长度是否等于所述该图片的文件格式的图像格式规范中规定的长度,若是,则得到成功的匹配结果,否则,得到失败的匹配结果。
5.如权利要求2所述的方法,其特征在于,所述图像数据段的格式包括数据段开始标志;
所述展现无关数据段包括注释数据段和/或自定义数据段;通过以下步骤判断某一图像数据段是否为展现无关数据段:判断某一图像数据段的数据段开始标志,是否以所述该图片的文件格式的图像格式规范中规定的展现无关数据段的格式开头,若是,则认为所述某一图像数据段为展现无关数据段,否则,认为所述某一图像数据段不是展现无关数据段。
6.如权利要求2所述的方法,其特征在于,所述图像数据段的格式包括图像结束标志;所述展现无关数据段包括附加数据段;
通过以下步骤判断某一图像数据段是否为展现无关数据段:
判断所述某一图像数据段是否位于所述该图片的文件格式的图像格式规范中规定的图像结束标志所在数据段的后面,若是,则认为所述某一图像数据段为附加数据段,否则,认为所述某一图像数据段不是附加数据段。
7.如权利要求1所述的方法,其特征在于,还包括:将所述二进制数据保存至第一数组;
所述根据图像格式规范对各数据段进行匹配的步骤,包括:依次读取所述第一数组中的数据段,并根据图像格式规范对各数据段进行匹配;
2
CN 102855602 A
权 利 要 求 书
2/2页
所述保留所述某一数据段的步骤,包括:在所述某一数据段不是展现无关数据段时,将所述某一数据段复制至第二数组,最终第二数组中存储的数据段组成处理后的图片。
8.一种图片处理装置,其特征在于,包括:匹配模块,用于根据图像格式规范对当前待处理的图片的二进制数据的各数据段进行匹配;当某一数据段的匹配结果为失败时,结束该图片的处理;当某一数据段的匹配结果为成功时,通知处理模块;
处理模块,用于在所述某一数据段为展现无关数据段时,丢弃所述某一数据段;以及,在所述某一数据段不是展现无关数据段时,保留所述某一数据段;
输出模块,用于将所有被保留的数据段组成处理后的图片,并加以输出。9.如权利要求8所述的装置,其特征在于,所述数据段包括文件头和图像数据段;所述匹配模块,包括:校验子模块,用于依据图像格式规范对图片的文件头进行校验;当校验未通过时,认为该图片为非法格式,结束该图片的处理;当校验通过时,通知匹配子模块;
第一匹配子模块,用于获取该图片的文件格式,并依据所述该图片的文件格式的图像格式规范,对各图像数据段进行匹配;当某一图像数据段的匹配结果为失败时,结束该图片的处理;当某一图像数据段的匹配结果为成功时,通知所述处理模块。
10.如权利要求9所述的装置,其特征在于,所述图像数据段的格式包括数据段开始标志;
所述第一匹配子模块,包括:第一判断单元,用于判断某一图像数据段的数据段开始标志是否以所述该图片的文件格式的图像格式规范中规定的格式开头,若是,则得到成功的匹配结果,否则,得到失败的匹配结果。
3
CN 102855602 A
说 明 书
一种图片处理方法和装置
1/11页
技术领域
[0001]
本申请涉及图片数据处理技术领域,特别是涉及一种图片处理方法和装置。
背景技术
目前随着互联网技术应用的发展,大量的多媒体信息通过互联网进行传输,其中,
这些多媒体信息中,又包含着大量的图片信息。[0003] 例如,交易网站、论坛、博客等很多网络应用都支持用户上传图片。但是,用户上传的图片有时会含有一些额外信息如注释、EXIF(可交换图像文件,Exchangeable Image File)信息甚至恶意代码、病毒等,或者,用户上传的图片根本就不是浏览器支持的图片。[0004] 对于一些未严格按照图像格式规范生成的图片,浏览器通常会有一定的容错机制以保证这些图片能够正常显示。在用户浏览上述含有恶意代码、病毒的图片时,容易导致缓冲区溢出,诱发系统漏洞,进而执行病毒代码。[0005] 为了提高用户上传图片的安全性,并过滤图片中的病毒和恶意代码,通过使用第三方图像处理工具包,比如ImageMagicK、各种编程自带的图像处理函数等,把图片载入内存后重新保存一遍,可以达到去除恶意代码、病毒的目的。[0006] 但是,由于现有技术对图片的像素进行处理,具体而言,将图片数据按照对应的图像格式进行解码,在内存中还原出图片的所有像素点,然后再对图片进行重新编码并保存,其具有如下缺点:[0007] 1、占用大量的系统资源;[0008] 一幅不到1MB的图片,可能由于图像压缩率较高而有着极高的分辨率,如10000×6000,这种情况下,如果这幅图片是32位真彩图片,则它就至少需要占用(10000×6000×4)Byte=240MB的内存空间。[0009] 另外,由于图像解码编码需要使用大量的CPU资源,这样,在服务器并发量比较高的情况下,很容易造成服务器处理占用资源过多、超时,甚至导致应用服务器进程崩溃。[0010] 2、有些时候,图像处理技术熟练的用户往往上传的是经过专业图像处理软件优化的高质量高压缩的图片,此时,第三方图像处理工具包在重新保存时,很可能由于算法的差距而导致重新保存后的图片比原图片更大,这样都会造成大量的服务器存储浪费。[0011] 总之,本领域技术人员需要迫切解决的一个技术问题就是:如何能够降低上述情形下的系统资源和存储资源的占用。
[0002]
发明内容
本申请所要解决的技术问题是提供一种图片处理方法和装置,能够在占用少量系
统资源和存储资源的前提下,快速地将图片处理为具有更高安全性的图片。[0013] 为了解决上述问题,本申请公开了一种图片处理方法,包括:[0014] 获取图片的二进制数据,所述二进制数据包括若干个数据段;[0015] 根据图像格式规范对各数据段进行匹配;
[0012]
4
CN 102855602 A[0016]
说 明 书
2/11页
若某一数据段的匹配结果为失败,则认为该图片为非法格式,结束该图片的处
理;
若某一数据段的匹配结果为成功,则根据图像格式规范判断所述某一数据段是否
为展现无关数据段,若是,则丢弃所述某一数据段,否则,保留所述某一数据段;其中,所有被保留的数据段组成处理后的图片。[0018] 优选的,所述数据段包括文件头和图像数据段;
[0019] 所述根据图像格式规范对各数据段进行匹配的步骤,包括:[0020] 依据图像格式规范对图片的文件头进行校验;[0021] 若校验未通过,则认为该图片为非法格式,结束该图片的处理;[0022] 若校验通过,则获取该图片的文件格式,并依据所述该图片的文件格式的图像格式规范,对各图像数据段进行匹配。[0023] 优选的,所述图像数据段的格式包括数据段开始标志;[0024] 所述对各图像数据段进行匹配的步骤,包括:
[0025] 判断某一图像数据段的数据段开始标志是否以所述该图片的文件格式的图像格式规范中规定的格式开头,若是,则得到成功的匹配结果,否则,得到失败的匹配结果。[0026] 优选的,所述图像数据段的格式包括数据段长度;[0027] 所述对各图像数据段进行匹配的步骤,包括:
[0028] 判断某一图像数据段的数据段长度是否等于所述该图片的文件格式的图像格式规范中规定的长度,若是,则得到成功的匹配结果,否则,得到失败的匹配结果。[0029] 优选的,所述图像数据段的格式包括数据段开始标志;
[0030] 所述展现无关数据段包括注释数据段和/或自定义数据段;[0031] 通过以下步骤判断某一图像数据段是否为展现无关数据段:[0032] 判断某一图像数据段的数据段开始标志,是否以所述该图片的文件格式的图像格式规范中规定的展现无关数据段的格式开头,若是,则认为所述某一图像数据段为展现无关数据段,否则,认为所述某一图像数据段不是展现无关数据段。[0033] 优选的,所述图像数据段的格式包括图像结束标志;[0034] 所述展现无关数据段包括附加数据段;
[0035] 通过以下步骤判断某一图像数据段是否为展现无关数据段:
[0036] 判断所述某一图像数据段是否位于所述该图片的文件格式的图像格式规范中规定的图像结束标志所在数据段的后面,若是,则认为所述某一图像数据段为附加数据段,否则,认为所述某一图像数据段不是附加数据段。[0037] 优选的,所述方法还包括:
[0038] 将所述二进制数据保存至第一数组;
[0039] 所述根据图像格式规范对各数据段进行匹配的步骤,包括:[0040] 依次读取所述第一数组中的数据段,并根据图像格式规范对各数据段进行匹配;[0041] 所述保留所述某一数据段的步骤,包括:[0042] 在所述某一数据段不是展现无关数据段时,将所述某一数据段复制至第二数组,最终第二数组中存储的数据段组成处理后的图片。[0043] 另一方面,本申请还公开了一种图片处理装置,包括:
[0017]
5
CN 102855602 A[0044]
说 明 书
3/11页
匹配模块,用于根据图像格式规范对当前待处理的图片的二进制数据的各数据段
进行匹配;当某一数据段的匹配结果为失败时,结束该图片的处理;当某一数据段的匹配结果为成功时,通知处理模块;[0045] 处理模块,用于在所述某一数据段为展现无关数据段时,丢弃所述某一数据段;以及,在所述某一数据段不是展现无关数据段时,保留所述某一数据段;输出模块,用于将所有被保留的数据段组成处理后的图片,并加以输出。[0047] 优选的,所述数据段包括文件头和图像数据段;[0048] 所述匹配模块,包括:[0049] 校验子模块,用于依据图像格式规范对图片的文件头进行校验;当校验未通过时,认为该图片为非法格式,结束该图片的处理;当校验通过时,通知匹配子模块;[0050] 第一匹配子模块,用于获取该图片的文件格式,并依据所述该图片的文件格式的图像格式规范,对各图像数据段进行匹配;当某一图像数据段的匹配结果为失败时,结束该图片的处理;当某一图像数据段的匹配结果为成功时,通知所述处理模块。[0051] 优选的,所述图像数据段的格式包括数据段开始标志;[0052] 所述第一匹配子模块,包括:[0053] 第一判断单元,用于判断某一图像数据段的数据段开始标志是否以所述该图片的文件格式的图像格式规范中规定的格式开头,若是,则得到成功的匹配结果,否则,得到失败的匹配结果。
[0054] 与现有技术相比,本申请具有以下优点:
[0055] 本申请不是类似现有技术对图片像素本身进行处理,而是将图片视为普通的二进制数据,并根据图像格式规范对所述二进制数据中的各个数据段进行匹配;由于本申请的图片处理仅涉及二进制数据的匹配和简单的计算,故相对于现有技术分辨率越大,处理的像素点就越多,导致占用大量的系统资源和存储资源的缺点,本申请不仅能够提高处理效率,而且能够大大减少占用的系统资源。[0056] 一方面,在某一数据段的匹配结果为失败时,可以认为所述某一数据段不符合图像格式规范,从而确定所述某一数据段所在的图片为非法格式,;因此,可以完全抛弃匹配失败的、非法格式的图片;[0057] 另一方面,本申请还可以对匹配结果为成功、但可能会在将来被利用于隐藏病毒或恶意代码的展现无关数据段进行丢弃处理,所述展现无关数据段具体可以包括注释数据段、自定义数据段或者附加数据段等,它们与图像展现本身相关的数据段,比如分辨率、样本精度等元数据、JPEG中的Huffman表、量化表等数据段毫无关联,故不会对图像展现造成影响;因此,所述丢弃处理不影响图像展现,且能够进一步提高图片的安全性;而且,由于所述丢弃处理能够使得处理后图片的数据段数目小于原图片,因此,本申请还能够在保证安全性的同时,可以降低图片的存储和流量成本。
[0046]
另外,在应用于用户上传图片的处理时,本申请能够对原图片进行处理得到符合图像格式规范的图片,因此,能够在保证用户上传图片安全性的前提下,降低服务器处理占用资源、存储和流量成本。
[0058]
附图说明
6
CN 102855602 A[0059]
说 明 书
4/11页
图1是本申请一种图片处理方法实施例1的流程图;
[0060] 图2是本申请一种图片处理方法实施例2的流程图;[0061] 图3是本申请一种图片处理方法实施例3的流程图;[0062] 图4是本申请一种图片处理装置实施例的结构图。
具体实施方式
[0063] 为使本申请的上述目的、特征和优点能够更加明显易懂,下面结合附图和具体实施方式对本申请作进一步详细的说明。
[0064] 现有技术系统对图片的像素进行处理,分辨率越大,处理的像素点就越多,导致占用大量的系统资源和存储资源。[0065] 本申请注意到了这一点,故完全摒弃了现有技术中对图片的像素进行处理的解决思路,创造性地提出了一种基于二进制数据的图片处理方式,也即,将图片视为普通的二进制数据,并根据图像格式规范对所述二进制数据中的各个数据段进行匹配,一方面,能够完全抛弃匹配失败的、非法格式的图片,阻止这类图片保存到服务器中,另一方面,即使匹配成功,也能够丢弃图片中容易出现安全问题的数据段或无用的数据段,最终生成一张符合图像格式规范的图片。[0066] 参照图1,示出了本申请一种图片处理方法实施例1的流程图,具体可以包括:[0067] 步骤101、获取图片的二进制数据,所述二进制数据可以包括若干个数据段;[0068] 步骤102、根据图像格式规范对各数据段进行匹配;[0069] 步骤103、若某一数据段的匹配结果为失败,则可以认为该图片为非法格式,结束该图片的处理;[0070] 步骤104、若某一数据段的匹配结果为成功,则根据图像格式规范判断所述某一数据段是否为展现无关数据段,若是,则丢弃所述某一数据段,否则,保留所述某一数据段;其中,所有被保留的数据段组成处理后的图片。[0071] 在实际中,该图片可以位于用户终端,例如,用户使用本申请处理本地终端的图片以提高图片的安全性;所述图片也可以位于互联网的服务器中,例如,交易网站、论坛、博客等很多网络服务器可使用本申请处理用户上传图片,以提高用户上传图片的安全性,阻止非法格式的图片保存到服务器中,避免容易出现安全问题的图片保存到服务器中。总之,本申请的目的是通过处理图片提高图片的安全性,其可以适用于各种各样的图片,而不会对图片所处的位置等属性加以限制。[0072] 对于位于用户终端的图片,可以通过直接二进制读取获得相应的二进制数据。[0073] 对于位于互联网的用户上传图片,可以利用web框架来获取相应的二进制数据。例如,可以通过JSP智能加载(JSPSmartUpload)、Apache普通文件加载(Apache Common File Upload)等通用组件获取用户上传图片的二进制数据,或者,可以基于Java ServletAPI框架开发新的上传组件,并利用新的上传组件来获取用户上传图片的二进制数据。
[0074] 常见图片的文件格式具有可以包括:BMP(位图)、JPEG(联合照片专家组,Joint Photographic Experts Group)、GIF(图形交换格式,Graphics Interchange Format)、PNG(可移植网络图形,Portable Network Graphics)等,这些图片的文件格式都有其对应
7
CN 102855602 A
说 明 书
5/11页
的图像格式规范,其中,这些图像格式规范中详细定义了文件中各个图像数据段的作用及限制。
[0075] 本申请根据图像格式规范对各数据段进行匹配,具有如下优点:[0076] 1、在某一数据段的匹配结果为失败时,可以认为所述某一数据段不符合图像格式规范,从而确定所述某一数据段所在的图片为非法格式;因此,本申请可以完全抛弃匹配失败的、非法格式的图片,阻止这类图片保存到服务器中;[0077] 需要说明的是,所述某一数据段不符合图像格式规范,并不一定代表所述某一数据段就是病毒或者恶意代码,其也有可能是因为在上传所述某一数据段所在的图片时,网络出错、用户的图像处理软件的BUG(缺陷)等问题所致。因此,本申请不仅能够阻止含有病毒或者恶意代码的图片,而且,能够阻止其它非法格式的图片。[0078] 2、在某一数据段的匹配结果为成功时,虽然可以认为所述某一数据段符合图像格式规范,但是,理论上有可能会在将来被利用于存储病毒或恶意代码。例如,图片中的“注释”数据段,由于其可以存放文本,故容易被植入恶意代码,而这些恶意代码在特定条件下存在被非法执行的可能;又如,在图像结束标志的数据段之后出现的附加数据段也可被认为是最危险的非法数据段,等等。[0079] 而上述“注释”数据段、在图像结束标志的附加数据段之后出现的数据段均与图像展现无关,具体表现在它们与图像展现本身相关的数据段,比如分辨率、样本精度等元数据,或者JPEG中的Huffman表、量化表等数据段毫无关联,故不会对图像展现造成影响。因此,本申请将其理解为展现无关数据段。为了进一步提高图片的安全性,本申请直接将这类不影响图像展现的展现无关数据段丢弃。由于所述丢弃处理能够使得处理后图片的数据段数目小于原图片数据,因此,本申请还能够在保证安全性的同时,可以降低图片的存储和流量成本。
[0080] 例如,丢弃上述“注释”数据段、在图像结束标志的数据段之后出现的附加数据段,不仅可以消除这些展现无关数据段的安全隐患,而且也能减小图片二进制文件的体积,以节省存储及流量。[0081] 3、由于本申请的图片处理仅涉及二进制数据的匹配和简单的计算,故相对于现有技术,不仅能够提高处理效率,而且能够大大减少占用的系统资源。[0082] 例如,一幅不到1MB的32位真彩图片,分辨率为10000×6000,现有技术对其进行处理,至少需要占用(10000×6000×4)Byte=240MB的内存空间。[0083] 而本申请仅需占用将该图片的二进制文件读入内存的开销,通常来说,二进制文件有多大,就占多大的内存空间,也即,在理想情况下,仅占用1MB的内存空间;保守情况下,加上计算时需要的一点临时交换空间,本申请占用的最大内存空间也仅仅是图片的二进制文件大小×2。因此,相对于现有技术,本申请能够大大减少占用的系统资源。[0084] 需要说明的是,由于本申请的实现基于对文件及二进制数据的输入/输出的操作,故而越接近底层的语言效率越高,常见的计算机语言中,C语言能够达到最佳的实施效果。
[0085] 当然,所述计算机语言并不限于C,C++、C#、Java,汇编等所有支持二进制数据处理的语言均可实现本申请的图片处理方案。[0086] 参照图2,示出了本申请一种图片处理方法实施例2的流程图,具体可以包括:
8
CN 102855602 A[0087]
说 明 书
6/11页
步骤201、获取图片的二进制数据,所述二进制数据可以包括若干个数据段,所述
数据段可以包括文件头和图像数据段;[0088] 步骤202、依据图像格式规范对图片的文件头进行校验,若校验通过,则执行步骤203,若校验未通过,则执行步骤204;[0089] 步骤203、获取该图片的文件格式,并依据所述该图片的文件格式的图像格式规范,对各图像数据段进行匹配;[0090] 步骤204、认为该图片为非法格式,结束该图片的处理;[0091] 步骤205、若某一图像数据段的匹配结果为失败,则可以认为该图片为非法格式,结束该图片的处理;[0092] 步骤206、若某一图像数据段的匹配结果为成功,则根据图像格式规范判断所述某一数据段是否为展现无关数据段,若是,则丢弃所述某一数据段,否则,保留所述某一数据段;其中,所有被保留的数据段组成处理后的图片。[0093] 本实施例与实施例1的区别在于,首先依据图像格式规范对图片的文件头进行校验,不仅能够预先抛弃校验未通过、非法格式的图片,而且,在校验通过时,能够获取该图片的文件格式,从而可以依据所述该图片的文件格式的图像格式规范,对各图像数据段进行后续的匹配。
通常来讲,通过文件头前8个字节即可简单的判断文件格式,过滤其它格式文件。
参照表1,示出了几种常见图片的文件格式的文件头示例。[0095] 表1
[0094] [0096]
当然,除了JPEG、GIF、PNG外,本申请还可以适用其它图片的文件格式,如BMP、
TIFF(标记图像文件格式,Tag Image File Format)等,本申请对具体的图片的文件格式不加以限制。
[0098] 在实际中,所述图像数据段通常可以包括:数据段开始标志、数据段长度、数据实体、图像结束标志等几个部分,但除数据段开始标志以外的其它部分均是可选项,以具体图像格式规范中规定的为准。
[0099] 以下通过图像数据段各部分的功能,来描述对各图像数据段进行匹配的方案。[0100] 匹配方案一:
[0101] 在本申请的一种优选实施例中,所述图像数据段的格式可以包括数据段开始标志;
[0097]
9
CN 102855602 A[0102]
说 明 书
7/11页
此时,所述对各图像数据段进行匹配的步骤,具体可以包括:
[0103] 判断某一图像数据段的数据段开始标志是否以所述该图片的文件格式的图像格式规范中规定的格式开头,若是,则得到成功的匹配结果,否则,得到失败的匹配结果。[0104] 以JPEG的图像格式规范为例,其规定数据段开始标志为0xFFXX,其中,FF是固定的,XX用于标识数据段类型,其值可能为:D8、C0、C1、C2、C4、DA、DB、DD、E0、FE、D9等等。另外,GIF的图像格式规范中规定了以0x21开头的扩展数据段,或者,以0x2C开头的图像描述数据段;PNG的图像格式规范中规定的数据段开始标志是固定的0x89594E470D0A1A0A。这些均可以作为对各图像数据段进行匹配的依据。[0106] 匹配方案二:
[0107] 在本申请的另一种优选实施例中,所述图像数据段的格式可以包括数据段长度;[0108] 此时,所述对各图像数据段进行匹配的步骤,具体可以包括:
[0109] 判断某一图像数据段的数据段长度是否等于所述该图片的文件格式的图像格式规范中规定的长度,若是,则得到成功的匹配结果,否则,得到失败的匹配结果。[0110] 以JPEG的图像格式规范为例,其规定数据段长度为固定两个字节,解析为整数即为本数据段长度,比如0x0010就代表数据段长度为16字节、0x0100代表数据段长度为256字节,注意这个长度是包括这两个字节了的,即0x0010意味着后面的数据实体部分只有16-2=14字节。[0111] 在匹配时,数据段长度大于或小于所述该图片的文件格式的图像格式规范中规定的长度的图像数据段,都可以认为所在图片为非法格式,此时,应完全抛弃该图片。[0112] 以上对两种匹配方案进行了详细介绍,可以理解,本领域技术人员可以根据需要联合使用所述两种匹配方案,或者,使用其中任一种,本申请对此不加以限制。[0113] 当然,除了上述两种匹配方案外,本申请还可以通过其它匹配方式来实现,这应严格依据具体图像格式规范来进行。下面简单介绍JPEG、GIF、PNG的图像格式规范。[0114] A、JPEG
[0115] JPEG的数据段格式通常包括数据段开始标志(0xFFXX)、数据段长度、数据实体、图像结束标志四个部分,其中,0xFFD8(图像开始数据段)通常仅包括数据段开始标志部分、0xFFD9(图像结束数据段)通常仅包括图像结束标志部分,0xFFDA(图像扫描行数据段)通常仅包括数据段开始标志和数据实体两个部分。[0116] JPEG的数据实体部分可以不做图片处理,也可以根据JPEG的图像格式规范把一些数据段解析出来给应用服务使用。
[0105]
另外,0xFFDA数据段比较特殊,没有数据段长度,可以直接读取数据实体,一直读
取到0xFFD9图像结束标志出现时结束。[0118] B、GIF
[0119] GIF在图像格式规范中规定,以0x21开头的扩展数据段通常包括“数据段开始标志+(数据段长度+数据实体)+0x00结束符”,其中“(数据段长度+数据实体)”可能为一个或多个,数据段长度为一个字节,例如,0x10代表数据长度为16字节(和JPEG不同,这个长度值并不包括数据段长度所占的那一个字节),如果读取16字节完成后下一个字节不为0x00,则认为是第二段的“(数据段长度+数据)”,以同样的方式读取一直到数据段读取完成后下一个字节为0x00为止。对于该数据段,可以重点关注两种类型:0x21F9和0x21FF,
[0117]
10
CN 102855602 A
说 明 书
8/11页
其它类型可以忽略。
[0120] 以0x2C开头的图像描述数据段有9字节数据用于描述图像的基本元数据及是否有局部色彩表,如果有局部色彩表则会有额外的若干字节的数据用于描述色彩数据(因为GIF是支持动画的,可以有多帧图像组成,所以这部分格式和GIF头部很像),之后就是图像数据块了,读取的方式和0x21开头的数据段的读取方式类似。[0121] C、PNG
[0122] PNG数据段格式最为简单,通常包括数据段长度、数据段标识、数据实体和数据段校验码四个部分。其中,数据段长度(这个长度值与GIF的类似,只单纯表示“数据实体”那一段的字节数)、数据段标识为4个字节,PNG的图像结束标志位0x49454E44AE426082。[0123] 需要说明的是,PNG有2个必须存在的图像数据段,相应的数据段开始表示分别为0x49484452(即字符串IHDR)和0x49444154(即字符串IDAT),并且,这两个数据段开始标志必须有序的依次出现。[0124] 另外,PNG还支持其它十多种图像数据段,其中,图像数据段tEXt为文本数据段,需要进行过滤,其余的依应用的实际情况决定是否需要过滤。[0125] 实施例1中提到,为了进一步提高图片的安全性,本申请直接将这类不影响图像展现的展现无关数据段丢弃。以下通过图像数据段各部分的功能,来描述判断某一图像数据段是否为展现无关数据段的判断方案。
判断方案一:
[0127] 在本申请的一种优选实施例中,所述图像数据段的格式可以包括数据段开始标志;
[0128] 所述展现无关数据段具体可以包括注释数据段和/或自定义数据段;这些展现无关数据段不影响图像展现。[0129] 此时,可以通过以下步骤判断某一图像数据段是否为展现无关数据段:[0130] 判断某一图像数据段的数据段开始标志,是否以所述该图片的文件格式的图像格式规范中规定的展现无关数据段的格式开头,若是,则认为所述某一图像数据段为展现无关数据段,否则,认为所述某一图像数据段不是展现无关数据段。[0131] 以JPEG的图像格式规范为例,其规定数据段开始标志为0xFFXX,其中,FF是固定的,XX用于标识数据段类型,其值可能为:D8、C0、C1、C2、C4、DA、DB、DD、E0、FE、D9等等;[0132] 其中,FE通常会表示图片的注释数据段,这类注释数据段不影响图像展现,且其中可能隐藏一些病毒和恶意代码,所以为了安全起见,可直接将这类注释数据段丢弃,保证安全的同时还可以降低存储及流量成本;
[0133] E1-EF通常会表示图片的一些自定义数据段,用于描述EXIF信息和PhotoShop等图像处理软件生成的应用程序自定义的数据,这类自定义数据段虽然隐藏病毒和恶意代码的可能性比较小,但由于其不影响图像展现,认为其为多余的,故也可以直接将其丢弃。[0134] 判断方案二:
[0135] 在本申请的另一种优选实施例中,所述图像数据段的格式可以包括图像结束标志;
[0126]
所述展现无关数据段具体可以包括附加数据段;
[0137] 此时,可以通过以下步骤判断某一图像数据段是否为展现无关数据段:
[0136]
11
CN 102855602 A[0138]
说 明 书
9/11页
判断所述某一图像数据段是否位于所述该图片的文件格式的图像格式规范中规
定的图像结束标志所在数据段的后面,若是,则认为所述某一图像数据段为附加数据段,否则,认为所述某一图像数据段不是附加数据段。[0139] 在实际中,在图像结束标志所在数据段之后出现的附加数据段被认为是最危险的非法数据,故为了安全起见,可直接将这些数据丢弃,在保证安全的同时还可以降低存储及流量成本。
[0140] 例如,GIF的图像结束标志为0x3B,0x3B所在数据段之后,如果文件还没结束,则丢弃剩余的数据,大部分恶意代码都会藏在此处。[0141] 以上对两种判断方案进行了详细介绍,可以理解,本领域技术人员可以根据需要联合使用所述两种判断方案,或者,使用其中任一种,或者,采用依据具体图像格式规范的其它判断方案;本申请的宗旨是依据具体图像格式规范进行图片处理,而不会对具体的判断方案加以限制。[0142] 综上,针对上述展现无关数据段的丢弃,不仅可以消除这些展现无关数据段的安全隐患,而且可以使处理后图片的文件长度小于原图片的文件长度,所以不会发生由于算法差异而使图片在被处理后可能存在的文件长度变大的情况。
参照图3,示出了本申请一种图片处理方法实施例3的流程图,具体可以包括:
[0144] 步骤301、获取图片的二进制数据,所述二进制数据可以包括若干个数据段;[0145] 步骤302、将所述二进制数据保存至第一数组;[0146] 步骤303、依次读取所述第一数组中的数据段,并根据图像格式规范对各数据段进行匹配;
[0147] 步骤304、若某一数据段的匹配结果为失败,则可以认为该图片为非法格式,结束该图片的处理;[0148] 步骤305、若某一数据段的匹配结果为成功,则根据图像格式规范判断所述某一数据段是否为展现无关数据段,若是,则执行步骤306,否则,执行步骤307;[0149] 步骤306、丢弃所述某一数据段;[0150] 步骤307、将所述某一数据段复制至第二数组;最终第二数组中存储的数据段组成处理后的图片。
[0151] 本实施例相对于实施例1,分别采用第一数组和第二数组保存处理前后图片的二进制数据,由于在某一数据段符合图像格式规范,且不是存在安全隐患或者多余的展现无关数据段时,才会将其复制至第二数组,故最终第二数组中存储的数据段能够组成符合图像格式规范的图片。[0152] 另外,由于在丢弃某一数据段时,并不会将所述某一数据段复制到第二数组中,因此,第二数组的长度小于等于第一数组。[0153] 与前述图片处理方法实施例相应,本申请还公开了一种图片处理装置,参照图4,具体可以包括:
[0154] 匹配模块401,用于根据图像格式规范对当前待处理的图片的二进制数据的各数据段进行匹配;当某一数据段的匹配结果为失败时,结束该图片的处理;当某一数据段的匹配结果为成功时,通知处理模块;
[0143] [0155]
处理模块402,用于在所述某一数据段为展现无关数据段时,丢弃所述某一数据
12
CN 102855602 A
说 明 书
10/11页
段;以及,在所述某一数据段不是展现无关数据段时,保留所述某一数据段;及[0156] 输出模块403,用于将所有被保留的数据段组成处理后的图片,并加以输出。[0157] 在本申请的一种优选实施例中,所述数据段可以包括文件头和图像数据段;[0158] 相应地,所述匹配模块401,可以进一步包括:[0159] 校验子模块,用于依据图像格式规范对图片的文件头进行校验;当校验未通过时,认为该图片为非法格式,结束该图片的处理;当校验通过时,通知匹配子模块;[0160] 第一匹配子模块,用于获取该图片的文件格式,并依据所述该图片的文件格式的图像格式规范,对各图像数据段进行匹配;当某一图像数据段的匹配结果为失败时,结束该图片的处理;当某一图像数据段的匹配结果为成功时,通知所述处理模块。[0161] 在本申请的另一种优选实施例中,所述图像数据段的格式可以包括数据段开始标志;
[0162] 相应地,所述第一匹配子模块,可以进一步包括:[0163] 第一判断单元,用于判断某一图像数据段的数据段开始标志是否以所述该图片的文件格式的图像格式规范中规定的格式开头,若是,则得到成功的匹配结果,否则,得到失败的匹配结果。
[0164]
在本申请的另一种优选实施例中,所述图像数据段的格式可以进一步包括数据段
长度;
此时,所述第一匹配子模块,可以进一步包括:
[0166] 第二判断单元,用于判断某一图像数据段的数据段长度是否等于所述该图片的文件格式的图像格式规范中规定的长度,若是,则得到成功的匹配结果,否则,得到失败的匹配结果。
[0167] 在本申请实施例中,优选的是,所述图像数据段的格式可以进一步包括数据段开始标志;
[0168] 所述展现无关数据段可以包括注释数据段和/或自定义数据段;[0169] 此时,所述系统还可以包括:[0170] 第一扩展判断模块,用于判断某一图像数据段的数据段开始标志,是否以所述该图片的文件格式的图像格式规范中规定的展现无关数据段的格式开头,若是,则认为所述某一图像数据段为展现无关数据段,否则,认为所述某一图像数据段不是展现无关数据段。[0171] 在本申请实施例中,优选的是,所述图像数据段的格式可以进一步包括图像结束标志;
[0172] 所述展现无关数据段可以包括附加;[0173] 相应地,所述系统可以还包括:[0174] 第二扩展判断模块,用于判断所述某一图像数据段是否位于所述该图片的文件格式的图像格式规范中规定的图像结束标志所在数据段的后面,若是,则认为所述某一图像数据段为附加数据段,否则,认为所述某一图像数据段不是附加数据段。[0175] 在本申请的一种优选实施例中,所述系统还可以包括:
[0165]
保存模块,用于将所述二进制数据保存至第一数组;[0177] 此时,所述匹配模块401,可以进一步包括:[0178] 读取子模块,用于依次读取所述第一数组中的数据段;
[0176]
13
CN 102855602 A[0179]
说 明 书
11/11页
第二匹配子模块,用于根据图像格式规范对读取的各数据段进行匹配;当某一数
据段的匹配结果为失败时,结束该图片的处理;当某一数据段的匹配结果为成功时,通知所述处理模块;[0180] 相应地,所述处理模块402,可以进一步包括:[0181] 复制单元,用于在所述某一数据段不是展现无关数据段时,将所述某一数据段复制至第二数组;最终第二数组中存储的数据段组成处理后的图片。[0182] 对于装置实施例而言,由于其与方法实施例基本相似,所以描述的比较简单,相关之处参见方法实施例的部分说明即可。
[0183] 本说明书中的各个实施例均采用递进的方式描述,每个实施例重点说明的都是与其他实施例的不同之处,各个实施例之间相同相似的部分互相参见即可。[0184] 以上对本申请所提供的一种图片处理方法和装置,进行了详细介绍,本文中应用了具体个例对本申请的原理及实施方式进行了阐述,以上实施例的说明只是用于帮助理解本申请的方法及其核心思想;同时,对于本领域的一般技术人员,依据本申请的思想,在具体实施方式及应用范围上均会有改变之处,综上所述,本说明书内容不应理解为对本申请的限制。
14
CN 102855602 A
说 明 书 附 图
1/3页
图1
15
CN 102855602 A
说 明 书 附 图
2/3页
图2
16
CN 102855602 A
说 明 书 附 图
3/3页
图3
图4
17
因篇幅问题不能全部显示,请点此查看更多更全内容