本发明属于图片压缩技术领域,尤其涉及一种图片压缩方法及系统。
背景技术:
随着高分辨率图像采集设备的发展,获取图片的质量越来越高,海量的图像数据与有限的存储空间、有限的网络带宽之间的矛盾日趋突出,因此,研究出更好的图片压缩方法对减少图像传输带宽和存储空间有重要意义。
目前,安卓系统中常用的图片压缩方法是调用安卓系统提供的API,通过该API调用底层的图片压缩函数库libjpeg来对图片进行压缩,然而该API是由安卓系统中的2D向量图形处理函数库skia封装后提供给JAVA层供开发者调用的,其可供开发者配置的参数很少,大部分参数是在底层封装skia时由系统统一配置的,尤其是参数optimize_coding,一般默认设置为flase,因此其图片压缩效率较低,并且压缩后的图片质量较差。
技术实现要素:
本发明实施例的目的在于提供一种图片压缩方法及系统,旨在解决现有的安卓系统中常用的图片压缩方法的图片压缩效率较低,并且压缩后的图片质量较差的问题。
本发明实施例是这样实现的,一种图片压缩方法,包括:
加载预先编译的动态图片压缩函数库;
根据用户的输入获取待压缩的图片;
调用所述动态图片压缩函数库提供的应用程序编程接口对所述待压缩的图片进行压缩处理。
在上述技术方案的基础上,所述加载预先编译的动态图片压缩函数库之前还包括:
获取静态图片压缩函数库;
修改所述静态图片压缩函数库中关键参数的设置;
将所述关键参数的设置封装成应用程序编程接口,供开发者灵活设置;
编译生成所述动态图片压缩函数库。
在上述技术方案的基础上,所述获取静态图片压缩函数库包括:
从Android系统源码中获取所述静态图片压缩函数库;或者,
从其他设备上下载或拷贝所述静态图片压缩函数库。
在上述技术方案的基础上,所述修改所述静态图片压缩函数库中关键参数的设置具体包括:
将所述静态图片压缩函数库中的参数optimize_coding的默认值设置为true;
所述将所述关键参数的设置封装成应用程序编程接口,供开发者灵活设置具体包括:
将所述参数optimize_coding的设置封装成接口setOpimizeCoding(bool flag),以便将参数optimize_coding的设置权交给开发者。
在上述技术方案的基础上,所述编译生成所述动态图片压缩函数库具体包括:
在Android源码中编译生成所述动态图片压缩函数库,或者
通过Android NDK工具编译生成所述动态图片压缩函数库。
另一方面,本发明实施例还提供一种图片压缩系统,包括:
动态库加载单元,用于加载预先编译的动态图片压缩函数库;
待压缩图片获取单元,用于根据用户的输入获取待压缩的图片;
图片压缩处理单元,用于调用所述动态图片压缩函数库提供的应用程序编程接口对所述待压缩的图片进行压缩处理。
在上述技术方案的基础上,还包括:
静态库获取单元,用于获取静态图片压缩函数库;
关键参数修改单元,用于修改所述静态图片压缩函数库中关键参数的设置;
编程接口封装单元,用于将所述关键参数的设置封装成应用程序编程接口,供开发者灵活设置;
动态库编译单元,用于编译生成所述动态图片压缩函数库。
在上述技术方案的基础上,所述静态库获取单元具体用于:
从Android系统源码中获取所述静态图片压缩函数库;或者,
从其他设备上下载或拷贝所述静态图片压缩函数库。
在上述技术方案的基础上,所述关键参数修改单元具体用于:
将所述静态图片压缩函数库中的参数optimize_coding的默认值设置为true;
所述编程接口封装单元具体用于:
将所述参数optimize_coding的设置封装成接口setOpimizeCoding(bool flag),以便将参数optimize_coding的设置权交给开发者。
在上述技术方案的基础上,所述动态库编译单元具体用于:
在Android源码中编译生成所述动态图片压缩函数库,或者
通过Android NDK工具编译生成所述动态图片压缩函数库。
实施本发明实施例提供的一种图片压缩方法及系统具有以下有益效果:
本发明实施例通过加载预先编译的动态图片压缩函数库;根据用户的输入获取待压缩的图片;调用所述动态图片压缩函数库提供的应用程序编程接口对所述待压缩的图片进行压缩处理,从而可以提高图片压缩的效率和质量,并且提升了用户体验。
附图说明
为了更清楚地说明本发明实施例技术方案,下面将对实施例描述中所需要使用的附图作简单地介绍,显而易见地,下面描述中的附图是本发明的一些实施例,对于本领域普通技术人员来讲,在不付出创造性劳动的前提下,还可以根据这些附图获得其他的附图。
图1是本发明实施例提供的一种图片压缩方法的示意流程图;
图2是本发明另一实施例提供的一种图片压缩方法的示意流程图;
图3是本发明实施例提供的一种图片压缩系统的示意性框图;
图4是本发明另一实施例提供的一种图片压缩系统的示意性框图。
具体实施方式
为了使本发明的目的、技术方案及优点更加清楚明白,以下结合附图及实施例,对本发明进行进一步详细说明。应当理解,此处所描述的具体实施例仅仅用以解释本发明,并不用于限定本发明。
图1是本发明实施例提供的一种图片压缩方法的示意流程图。参见图1所示,本实施例提供的一种图片压缩方法包括:
在S101中,加载预先编译的动态图片压缩函数库。
在本实施例中,所述动态图片压缩函数库采用C或者C++语言实现,所述动态图片压缩函数库提供的应用程序编程接口可以根据需求定制,用户可通过应用程序调用所述动态图片压缩函数库提供的应用程序编程接口,来修改所述动态图片压缩函数库中的参数。
在S102中,根据用户的输入获取待压缩的图片。
在本实施例中,步骤S102具体包括:
接收用户输入的图片存储路径;
读取并显示所述图片存储路径下存储的所有图片供用户选择;
根据用户的选择获取所述待压缩的图片。
在S103中,调用所述动态图片压缩函数库提供的应用程序编程接口对所述待压缩的图片进行压缩处理。
在本实施例中,在获取到所述待压缩的图片后可以通过所述应用程序编程接口调用所述动态图片压缩函数库对所述待压缩的图片进行压缩处理,由于所述动态图片压缩函数库中的参数是由用户根据自身需求自由设置的,因此,其执行图片压缩处理的执行效率更高,并且获得的压缩后的图片的质量也更加稳定。
以上可以看出,本实施例提供的一种图片压缩方法由于通过加载预先编译的动态图片压缩函数库;根据用户的输入获取待压缩的图片;调用所述动态图片压缩函数库提供的应用程序编程接口对所述待压缩的图片进行压缩处理,从而可以提高图片压缩的效率和质量,并且提升了用户体验。
图2是本发明另一实施例提供的一种图片压缩方法的示意流程图。参见图2所示,本实施例提供的一种图片压缩方法,包括:
在S201中,获取静态图片压缩函数库。
在本实施例中,步骤S201具体包括:
从Android系统源码中获取所述静态图片压缩函数库;或者,
从其他设备上下载或拷贝所述静态图片压缩函数库。
其中,所述静态图片压缩函数库可以为诸如libjpeg库类的第三方图像处理库,源代码可以从Android系统源码中获取,也可以直接从其他设备上拷贝或者下载原始的libjpeg库代码。
在S202中,修改所述静态图片压缩函数库中关键参数的设置。
在本实施例中,所述关键参数包括但不限于参数optimize_coding。进一步的,步骤S202具体包括:将所述静态图片压缩函数库中的参数optimize_coding的默认值设置为true。
在本实施例中,由于将压缩图像时的参数optimize_coding默认设为TRUE,这样在压缩图像过程中基于图像数据计算哈弗曼表,使得压缩后的图片在细节上更柔和、平滑。
在S203中,将所述关键参数的设置封装成应用程序编程接口,供开发者灵活设置。
在本实施例中,用户可以根据需求将关键参数的设置封装成应用程序编译接口给上层应用,供开发者灵活设置,比如说参数optimize_coding,可以封装成接口setOpimizeCoding(bool flag),这样便可以将该参数optimize_coding的设置权交给开发者,使开发者可以根据目标设备的硬件配置来设置,若硬件配置较低,则将参数optimize_coding的默认值设为false,节省压缩时对内存的消耗,反之,则可以将参数optimize_coding的默认值设为true,以获取更高质量的压缩图片。
在S204中,编译生成所述动态图片压缩函数库。
在本实施例中,步骤S204具体包括:
在Android源码中编译生成所述动态图片压缩函数库,或者
通过Android NDK工具编译生成所述动态图片压缩函数库。
其中,所述在Android源码中编译生成所述动态图片压缩函数库具体包括:
在linux环境下下载Android源码;
在源码的externel目录下新建文件夹,拷贝步骤S201~步骤S203中所有的代码;
根据拷贝的代码编写Android.mk文件;
在源码的目录下执行make命令,生成so库。
其中,通过Android NDK工具编译生成所述动态图片压缩函数库具体包括:
在linux环境下下载安装Android NDK开发包;
新建文件夹,拷贝步骤S201~步骤S203中所有的代码;
根据拷贝的代码编写Android.mk文件;
调用ndk-build命令生成so库。
在S205中,加载预先编译的动态图片压缩函数库。
在S206中,根据用户的输入获取待压缩的图片。
在S207中,调用所述动态图片压缩函数库提供的应用程序编程接口对所述待压缩的图片进行压缩处理。
需要说明的是,本实施例中的,步骤S205~步骤S207的具体实现方式由于与上一实施例中的步骤S101~步骤S103的实现方式完全相同,因此,在此不再赘述。
因此,可以看出,本实施例提供的一种图片压缩方法同样可以提高图片压缩的效率和质量,并且提升了用户体验。
图3是本发明实施例提供的一种图片压缩系统的示意性框图。为了便于说明仅仅示出了与本实施例相关的部分。
参见图3所示,本实施例提供的一种图片压缩系统,包括:
动态库加载单元11,用于加载预先编译的动态图片压缩函数库;
待压缩图片获取单元12,用于根据用户的输入获取待压缩的图片;
图片压缩处理单元13,用于调用所述动态图片压缩函数库提供的应用程序编程接口对所述待压缩的图片进行压缩处理。
可选的,参见图4所示,在另一实施例中,所述的图片压缩系统还包括:
静态库获取单元14,用于获取静态图片压缩函数库;
关键参数修改单元15,用于修改所述静态图片压缩函数库中关键参数的设置;
编程接口封装单元16,用于将所述关键参数的设置封装成应用程序编程接口,供开发者灵活设置;
动态库编译单元17,用于编译生成所述动态图片压缩函数库。
可选的,所述静态库获取单元14具体用于:
从Android系统源码中获取所述静态图片压缩函数库;或者,
从其他设备上下载或拷贝所述静态图片压缩函数库。
可选的,所述关键参数修改单元15具体用于:
将所述静态图片压缩函数库中的参数optimize_coding的默认值设置为true;
所述编程接口封装单元16具体用于:
将所述参数optimize_coding的设置封装成接口setOpimizeCoding(bool flag),以便将参数optimize_coding的设置权交给开发者。
可选的,所述动态库编译单元17具体用于:
在Android源码中编译生成所述动态图片压缩函数库,或者
通过Android NDK工具编译生成所述动态图片压缩函数库。
需要说明的是,本发明实施例提供的上述系统中的各个单元,由于与本发明方法实施例基于同一构思,其带来的技术效果与本发明方法实施例相同,具体内容可参见本发明方法实施例中的叙述,此处不再赘述。
因此,可以看出,本发明实施例提供的一种图片压缩系统同样由于包括动态库加载单元,用于加载预先编译的动态图片压缩函数库;待压缩图片获取单元,用于根据用户的输入获取待压缩的图片;图片压缩处理单元,用于调用所述动态图片压缩函数库提供的应用程序编程接口对所述待压缩的图片进行压缩处理,从而可以提高图片压缩的效率和质量,并且提升了用户体验。
以上所述仅为本发明的较佳实施例而已,并不用以限制本发明,凡在本发明的精神和原则之内所作的任何修改、等同替换和改进等,均应包含在本发明的保护范围之内。