背景技术
随着科技的进步,移动终端的性能也大幅的提高,同时移动终端内的图片也越来越多。其中,图片的来源可包括多个方面,例如用户拍照、网页图片、社交软件产生的图片等。随着图片的增多,会占用移动终端大量的存储空间,移动终端经常会出现OOM(Out ofMemory,内存溢出)问题。
图片展示可以说在任何一个应用软件都不可避免,然而在Android手机上加载显示大图往往会引发OOM问题,究其原因是在Android设备上ImageView(图像视图)最终要加载Bitmap(位图文件)对象,Bitmap所占内存过大。
Bitmap内存大小=图片宽度*图片高度*单位像素占用的字节;单位像素所占字节和Bitmap的编码有关具体如下表:
Bitmap编码 |
单位像素所占字节数 |
ALPHA_8 |
1 |
ARGB_4444 |
2 |
ARGB_8888 |
4 |
RGB_565 |
2 |
通常android***采用ARGB_8888编码,那么一张常见的1080*1920的图片内存占用就是:1920*1080*4=7.9M。
通过上面的公式可以看出,压缩图片所占内存,需要从图片的尺寸(宽和高)和Bitmap编码入手。
Android官方提供了一种采样率压缩法,通过设置采样率inSampleSize(这个采样率只能是2的N次方,如果算出的采样率是5,Android***会去近似值4),来压缩图片,使其尺寸变小,从而到达减少图片所占内存的效果。
然而采样率压缩法的采样率只能是2的N次方(1,2,4,8...),如果需要将分辨率为3840*2400的图片,压缩至当前手机分辨率1280*720,经过计算采样率inSampleSize为max(3840/1280,2400/720)=3.33,即理想的压缩后尺寸应该为(3840*2400)/3.33=1152*720,然而***会把理想采样率3.33修正为2^2=4,这样通过采样压缩算法压缩后的图片分辨率只能是960*600,这样压缩后的图片尺寸并不符合预期一个图片尺寸,还有就是对于长图,采样率压缩法,往往会过度压缩图片,即压缩后的图片的尺寸会非常小,影响图片的显示效果。
公开号为CN 201360283的专利公开了一种将手机中图片压缩存储装置,包括:手机CPU,解压缩模块、压缩的图片资源数据和显示模块,所述的通过在手机中增设图片解压缩模块,当使用压缩的图片资源时,先对压缩的图片资源数据进行解压缩处理,然后由显示模块来显示。从而减少了图片资源对存储空间的占用,大大降低了手机的存储成本。该方法虽然可以实现对手机中的图片进行压缩,但是在对图片压缩时对常规图片和长图片都是一样的压缩规则,还是避免不了过度压缩长图,从而影响长图的显示效果。
发明内容
本发明的目的是针对现有技术的缺陷,提供了一种基于移动终端的图片压缩方法及***,根据当前移动终端分辨率对常规图片和长图片分别采用不同的算法计算缩放率和图片压缩的目标尺寸来压缩图片,在避免图片显示引发的OOM问题的同时使压缩后的图片在本手机上的显示效果最佳。
为了实现以上目的,本发明采用以下技术方案:
一种基于移动终端的图片压缩方法,包括步骤:
S1.获取移动终端自身的分辨率和图片的分辨率;
S2.根据所述图片的分辨率判断所述图片是否为长图片;若是,则跳到步骤S3,若否,则跳到步骤S4;
S3.根据长图缩放率计算方法计算所述图片的缩放率,然后跳到步骤S5;
S4.根据常规图片缩放率计算方法计算所述图片的缩放率,然后跳到步骤S5;
S5.根据计算得到的图片的缩放率计算图片的采样率;
S6.判断所述图片是否需要压缩;若是,则跳到步骤S7;
S7.根据所述采样率的大小对图片进行压缩。
进一步的,所述步骤S7之后还包括步骤:
S8.判断压缩后的图片的尺寸与目标图片的尺寸是否一致,若否,则跳到步骤S9;
S9.对所述压缩后的图片进行Matrix缩放处理使图片最终尺寸为目标尺寸。
进一步的,根据所述图片的分辨率判断所述图片是否为长图片的具体方法为:
根据图片的分辨率计算图片高和宽的比值;
判断所述比值是否大于2,若是,则所述图片为长图片。
进一步的,所述长图缩放率计算方法为:
A1.计算移动终端自身屏幕总像素点个数;
A2.计算长图的总像素点个数;
A3.根据所述移动终端自身屏幕总像素点个数与所述长图的总像素个数计算所述长图的缩放率。
进一步的,所述常规图片缩放率计算方法为:
B1.计算图片宽度和移动终端自身屏幕宽度的比率;
B2.计算图片高度和移动终端自身屏幕高度的比率;
B3.取所述宽度的比率和所述高度的比率中较大的作为所述图片的缩放率。
进一步的,所述目标图片的尺寸计算方法为:
所述目标图片的宽为所述图片的宽除以所述计算得到的图片的缩放率的值;所述目标图片的高为所述图片的高除以所述计算得到的图片的缩放率的值。
相应的,还提供一种基于移动终端的图片压缩***,包括:
获取模块,用于获取移动终端自身的分辨率和图片的分辨率;
第一判断模块,用于根据所述图片的分辨率判断所述图片是否为长图片;
第一计算模块,用于在所述图片为长图片时根据长图缩放率计算方法计算所述图片的缩放率;
第二计算模块,用于在所述图片为非长图片时根据常规图片缩放率计算方法计算所述图片的缩放率;
第三计算模块,用于根据计算得到的图片的缩放率计算图片的采样率;
第二判断模块,用于判断所述图片是否需要压缩;
压缩模块,用于在所述图片需要压缩时根据所述采样率的大小对图片进行压缩。
进一步的,还包括:
第三判断模块,用于判断压缩后的图片的尺寸与目标图片的尺寸是否一致;
缩放模块,用于在所述压缩后的图片的尺寸与目标图片的尺寸不一致时对所述压缩后的图片进行Matrix缩放处理使图片最终尺寸为目标尺寸。
进一步的,根据所述图片的分辨率判断所述图片是否为长图片的具体方法为:
根据图片的分辨率计算图片高和宽的比值;
判断所述比值是否大于2,若是,则所述图片为长图片。
进一步的,所述长图缩放率计算方法为:
A1.计算移动终端自身屏幕总像素点个数;
A2.计算长图的总像素点个数;
A3.根据所述移动终端自身屏幕总像素点个数与所述长图的总像素个数计算所述长图的缩放率。
进一步的,所述常规图片缩放率计算方法为:
B1.计算图片宽度和移动终端自身屏幕宽度的比率;
B2.计算图片高度和移动终端自身屏幕高度的比率;
B3.取所述宽度的比率和所述高度的比率中较大的作为所述图片的缩放率。
进一步的,所述目标图片的尺寸计算方法为:
所述目标图片的宽为所述图片的宽除以所述计算得到的图片的缩放率的值;所述目标图片的高为所述图片的高除以所述计算得到的图片的缩放率的值。
与现有技术相比,本发明根据当前移动终端的分辨率,确定图片的目标尺寸,通过对常规图片和长图片采用不同的算法计算其缩放率和目标图片尺寸,通过计算得到的缩放率进而得到采样率,然后根据采样率压缩图片,可以避免图片在移动终端中显示出现OOM问题,可以有效避免长图片被过度压缩,并且在经过压缩后还判断压缩后的图片尺寸与目标尺寸是否一致,如果压缩后的图片尺寸和目标尺寸不一致,再通过Matrix缩放图片,使图片尺寸符合目标尺寸,使最终的图片在移动终端中显示的效果最好。
具体实施方式
以下通过特定的具体实例说明本发明的实施方式,本领域技术人员可由本说明书所揭露的内容轻易地了解本发明的其他优点与功效。本发明还可以通过另外不同的具体实施方式加以实施或应用,本说明书中的各项细节也可以基于不同观点与应用,在没有背离本发明的精神下进行各种修饰或改变。需说明的是,在不冲突的情况下,以下实施例及实施例中的特征可以相互组合。
需要说明的是,以下实施例中所提供的图示仅以示意方式说明本发明的基本构想,遂图式中仅显示与本发明中有关的组件而非按照实际实施时的组件数目、形状及尺寸绘制,其实际实施时各组件的型态、数量及比例可为一种随意的改变,且其组件布局型态也可能更为复杂。
本发明提供了一种基于移动终端的图片压缩方法及***,根据当前移动终端分辨率对常规图片和长图片分别采用不同的算法计算缩放率和图片压缩的目标尺寸来压缩图片,在避免图片显示引发的OOM问题的同时使压缩后的图片在本手机上的显示效果最佳。
实施例一
本实施例提供一种基于移动终端的图片压缩方法,如图1所示,包括步骤:
S11.获取移动终端自身的分辨率和图片的分辨率;
S12.根据所述图片的分辨率判断所述图片是否为长图片;若是,则跳到步骤S13,若否,则跳到步骤S14;
S13.根据长图缩放率计算方法计算所述图片的缩放率,然后跳到步骤S15;
S14.根据常规图片缩放率计算方法计算所述图片的缩放率,然后跳到步骤S15;
S15.根据计算得到的图片的缩放率计算图片的采样率;
S16.判断所述图片是否需要压缩;若是,则跳到步骤S17;
S17.根据所述采样率的大小对图片进行压缩。
本实施例的基于移动终端的图片压缩方法的执行主体为移动终端。具体的所述的移动终端为Android***。
首先移动终端会获取到自身的分辨率(宽为W,高为H)和图片的分辨率(宽为W1,高为H1),以便后续缩放率的计算。
获取到图片的分辨率后就可以根据图片的分辨率来判断所述图片是否为长图片,如果图片为长图片就利用长图缩放率计算方法来计算图片的缩放率,如果图片不是长图片(即常规图片)就利用常规图片缩放率计算方法来计算图片的缩放率。
进一步的,根据所述图片的分辨率判断所述图片是否为长图片的具体方法为:
根据图片的分辨率计算图片高和宽的比值;
判断所述比值是否大于2,若是,则所述图片为长图片。
具体的,上述已得到图片的分辨率(宽为W1,高为H1),若H1/W1的值大于2,则该图片就为长图片,否则,该图片就为常规图片。
进一步的,所述长图缩放率计算方法为:
A1.计算移动终端自身屏幕总像素点个数;
A2.计算长图的总像素点个数;
A3.根据所述移动终端自身屏幕总像素点个数与所述长图的总像素个数计算所述长图的缩放率。
具体的,根据移动终端的分辨率(宽为W,高为H)就可以得到移动终端屏幕的总像素点个数P=W*H;根据图片的分辨率(宽为W1,高为H1)就可以得到图片的总像素点个数P1=W1*H1;然后根据所述的移动终端自身屏幕总像素点个数与所述长图总像素点个数就可以计算该长图的缩放率,具体的缩放率本实施例长图片的缩放率在总像素点的比值上再进行开根号可以使得长图片的缩放率比常规图片的缩放率更小,从而避免长图片被过度压缩。
进一步的,所述常规图片缩放率计算方法为:
B1.计算图片宽度和移动终端自身屏幕宽度的比率;
B2.计算图片高度和移动终端自身屏幕高度的比率;
B3.取所述宽度的比率和所述高度的比率中较大的作为所述图片的缩放率。
具体的,根据移动终端的分辨率(宽为W,高为H)和图片的分辨率(宽为W1,高为H1)首先计算图片宽度和移动终端自身屏幕宽度的比率rw=W1/W,然后计算图片高度和移动终端自身屏幕高度的比率rh=H1/H,最后取rw和rh中较大的那个作为图片的缩放率ratio。
通过上述长图片缩放率计算方法和常规图片缩放率计算方法就可以得到计算出图片的缩放率,计算出图片的缩放率以后就可以得到图片的采样率,在本实施例中采样率inSampieSize的值为缩放率ratio最接近的2的N次方值,例如若缩放率为2.8,那么采样率为2,若缩放率为3.3,那么采样率为4。
计算出采样率后,要先判断图片是否需要压缩,具体的,如果采样率大于1则根据采样率的大小对图片进行压缩,如果采样率小于等于1则不对图片进行压缩处理。
相应的,本实施例还提供一种基于移动终端的图片压缩***,如图2所示,包括:
获取模块11,用于获取移动终端自身的分辨率和图片的分辨率;
第一判断模块12,用于根据所述图片的分辨率判断所述图片是否为长图片;
第一计算模块13,用于在所述图片为长图片时根据长图缩放率计算方法计算所述图片的缩放率;
第二计算模块14,用于在所述图片为非长图片时根据常规图片缩放率计算方法计算所述图片的缩放率;
第三计算模块15,用于根据计算得到的图片的缩放率计算图片的采样率;
第二判断模块16,用于判断所述图片是否需要压缩;
压缩模块17,用于在所述图片需要压缩时根据所述采样率的大小对图片进行压缩。
具体的,根据所述图片的分辨率判断所述图片是否为长图片的具体方法为:
根据图片的分辨率计算图片高和宽的比值;
判断所述比值是否大于2,若是,则所述图片为长图片。
具体的,所述长图缩放率计算方法为:
A1.计算移动终端自身屏幕总像素点个数;
A2.计算长图的总像素点个数;
A3.根据所述移动终端自身屏幕总像素点个数与所述长图的总像素个数计算所述长图的缩放率。
具体的,所述常规图片缩放率计算方法为:
B1.计算图片宽度和移动终端自身屏幕宽度的比率;
B2.计算图片高度和移动终端自身屏幕高度的比率;
B3.取所述宽度的比率和所述高度的比率中较大的作为所述图片的缩放率。
本实施例通过对常规图片和长图片采用不同的算法计算其缩放率和目标图片尺寸,通过计算得到的缩放率进而得到采样率,然后根据采样率压缩图片,可以避免图片在移动终端中显示出现OOM问题,可以有效避免长图片被过度压缩。
实施例二
本实施例提供一种基于移动终端的图片压缩方法,如图3所述,包括步骤:
S21.获取移动终端自身的分辨率和图片的分辨率;
S22.根据所述图片的分辨率判断所述图片是否为长图片;若是,则跳到步骤S23,若否,则跳到步骤S24;
S23.根据长图缩放率计算方法计算所述图片的缩放率,然后跳到步骤S25;
S24.根据常规图片缩放率计算方法计算所述图片的缩放率,然后跳到步骤S25;
S25.根据计算得到的图片的缩放率计算图片的采样率;
S26.判断所述图片是否需要压缩;若是,则跳到步骤S27;
S27.根据所述采样率的大小对图片进行压缩;
S28.判断压缩后的图片的尺寸与目标图片的尺寸是否一致,若否,则跳到步骤S29;
S29.对所述压缩后的图片进行Matrix缩放处理使图片最终尺寸为目标尺寸。
与实施例一不同的是,本实施例还包括步骤S28和步骤S29,其余步骤与实施例一相同,在此不再赘述。
本实施例中在根据采样率对图片进行压缩以后,再判断压缩后的图片的尺寸与目标图片的尺寸是否一致,如果压缩后的图片的尺寸与目标图片的尺寸不一致的话则对压缩后的图片进行Matrix缩放处理,使得图片尺寸与目标图片尺寸一致,使最终的图片在移动终端中显示的效果最好。
具体的,所述目标图片的尺寸计算方法为:
所述目标图片的宽为所述图片的宽除以所述计算得到的图片的缩放率的值;所述目标图片的高为所述图片的高除以所述计算得到的图片的缩放率的值。
下面结合实例对本实施例进行详细的说明:
(1)原图分辨率为4032*3024,则大小2.35M,因为4032/3024小于2,因此该图片为常规图片,假设当前移动终端分辨率为1920*1080,根据常规图片缩放率计算方法可以得到rh=4032/1920=2.1,rw=3024/1080=2.8,缩放率ratio=max(rh,rw)=2.8,目标图片尺寸W2=4032/2.8=1440,H2=3024/2.8=1080。根据“计算采样率的算法”得到采样率inSampleSize=2。经过采样压缩后的图片尺寸为2016*1512与目标尺寸1440*1080不符,然后在通过Matrix缩放使图片最终尺寸为目标尺寸1440*1080,输出压缩后的图片其尺寸为1440*1080,大小140.8K,这里选择3中分辨率不同的移动终端进行执行本实施例的方案,结果如下表所示:
移动终端分辨率 |
1920*1080 |
1280*720 |
540*360 |
目标图片分辨率 |
1440*1080 |
960*720 |
480*360 |
采样压缩后分辨率 |
2016*1512 |
1008*756 |
504*378 |
Matrix缩放后分辨率 |
1440*1080 |
960*720 |
480*360 |
压缩后图片大小 |
140.8k |
60.2k |
21k |
(2)原图分辨率为6750*1346,则大小5.18M,因为6750/1346大于2,因此该图片为长图片,假设当前移动终端分辨率为1920*1080根据上文“计算采样率的算法是”得到P=1920*1080=2073600,P1=6750*1346=9088550,缩放率目标图片尺寸W2=6750/2.1=3214,H2=1346/2.1=640。根据“计算采样率的算法”得到采样率inSampleSize=2。经过采样压缩后的图片尺寸为3375*673与目标尺寸3214*640不符,然后在通过Matrix缩放使图片最终尺寸为目标尺寸3214*640,输出压缩后的图片其尺寸为3214*640,大小140.8K。这里选择3中分辨率不同的移动终端进行执行本实施例的方案,结果如下表所示:
移动终端分辨率 |
1920*1080 |
1280*720 |
540*360 |
目标图片分辨率 |
3214*640 |
2150*482 |
990*197 |
采样压缩后分辨率 |
3375*673 |
1687*336 |
844*168 |
Matrix缩放后分辨率 |
3214*640 |
2150*482 |
990*197 |
压缩后图片大小 |
414.6k |
283.2k |
56.7k |
相应的,本实施例还提供一种基于移动终端的图片压缩***,如图4所示,包括:
获取模块21,用于获取移动终端自身的分辨率和图片的分辨率;
第一判断模块22,用于根据所述图片的分辨率判断所述图片是否为长图片;
第一计算模块23,用于在所述图片为长图片时根据长图缩放率计算方法计算所述图片的缩放率;
第二计算模块24,用于在所述图片为非长图片时根据常规图片缩放率计算方法计算所述图片的缩放率;
第三计算模块25,用于根据计算得到的图片的缩放率计算图片的采样率;
第二判断模块26,用于判断所述图片是否需要压缩;
压缩模块27,用于在所述图片需要压缩时根据所述采样率的大小对图片进行压缩。
第三判断模块28,用于判断压缩后的图片的尺寸与目标图片的尺寸是否一致;
缩放模块29,用于在所述压缩后的图片的尺寸与目标图片的尺寸不一致时对所述压缩后的图片进行Matrix缩放处理使图片最终尺寸为目标尺寸。
具体的,所述目标图片的尺寸计算方法为:
所述目标图片的宽为所述图片的宽除以所述计算得到的图片的缩放率的值;所述目标图片的高为所述图片的高除以所述计算得到的图片的缩放率的值。
本实施例通过对常规图片和长图片采用不同的算法计算其缩放率和目标图片尺寸,通过计算得到的缩放率进而得到采样率,然后根据采样率压缩图片,可以避免图片在移动终端中显示出现OOM问题,可以有效避免长图片被过度压缩,并且在经过压缩后还判断压缩后的图片尺寸与目标尺寸是否一致,如果压缩后的图片尺寸和目标尺寸不一致,再通过Matrix缩放图片,使图片尺寸符合目标尺寸,使最终的图片在移动终端中显示的效果最好。
注意,上述仅为本发明的较佳实施例及所运用技术原理。本领域技术人员会理解,本发明不限于这里所述的特定实施例,对本领域技术人员来说能够进行各种明显的变化、重新调整和替代而不会脱离本发明的保护范围。因此,虽然通过以上实施例对本发明进行了较为详细的说明,但是本发明不仅仅限于以上实施例,在不脱离本发明构思的情况下,还可以包括更多其他等效实施例,而本发明的范围由所附的权利要求范围决定。