圖像縮略圖生成方法
【技術領域】
[0001]本發(fā)明涉及計算機圖片轉換技術,特別涉及縮略圖生成。
【背景技術】
[0002]在計算機系統(tǒng)快速發(fā)展的當下,操作系統(tǒng)越來越多,在不同系統(tǒng)上開發(fā)的也越來越分散,因此對開發(fā)中跨平臺性要求也越來越高,特別是在手機上,為了讓軟件的界面更加的好看,就需要在短時間加載很多圖片,而這個時候,當圖片的尺寸大于我們顯示的尺寸的時候,就需要將其轉換為縮略圖。而在圖片獲取縮略圖方面,由于目前嵌入式軟件縮略圖生成上,使用的方式是先將原始的圖片加載入內存中,然后再進行變換,最后生成縮略圖,會占用大量內存,而且效率不高。
【發(fā)明內容】
[0003]本發(fā)明所要解決的技術問題,就是提供一種圖像縮略圖生成方法以實現(xiàn)高效提取縮略圖,從而提高軟件的用戶體驗。
[0004]本發(fā)明解決所述技術問題,采用的技術方案是,圖像縮略圖生成方法,包括以下幾個步驟:
[0005]步驟1、系統(tǒng)讀取原圖像頭文件信息,結合縮略圖尺寸,生成縮略圖頭信息并將其存儲至縮略圖文件;
[0006]步驟2、系統(tǒng)獲取原圖像行寬度乘以單個像素點顏色值的寬度得到一個數(shù)值,然后按照這個數(shù)值在系統(tǒng)中申請內存塊;
[0007]步驟3、系統(tǒng)根據原圖像頭文件信息及縮略圖尺寸然后計算出采樣率;
[0008]步驟4、系統(tǒng)根據采樣率計算出原圖像文件中待采樣行數(shù)及列數(shù),逐個將每一行數(shù)據存儲至內存塊,并對其進行像素采樣,并將采樣數(shù)據存儲至縮略圖文件;逐個將每一列數(shù)據存儲至內存塊,并對其進行像素采樣,并將采樣數(shù)據存儲至縮略圖文件;
[0009]步驟5、系統(tǒng)根據縮略圖文件生成縮略圖。
[0010]具體的,所述步驟1中,縮略圖頭信息至少包括縮略圖的寬度,高度、像素的字節(jié)數(shù)、像素寬度及調色板信息。
[0011]具體的,所述步驟1中,系統(tǒng)使用libpng或libjpeg讀取原圖像頭文件信息,其中l(wèi)ibpng處理PNG格式圖片,libjpeg處理jpeg圖片。
[0012]具體的,所述步驟2中,內存塊至少為一個。
[0013]具體的,所述步驟3中,采樣率包括行采樣率,所述行采樣率值為原圖像的行寬度除以縮略圖的行寬度然后取整得到。
[0014]具體的,所述步驟3中,采樣率包括列采樣率,列采樣率值為原圖像的列高度除以縮略圖的列高度然后取整得到。
[0015]具體的,所述步驟4中,系統(tǒng)以行采樣率值的一半取整數(shù)作為第一數(shù)值,并讀取原圖像文件中第一數(shù)值行數(shù)的數(shù)據作為第一行數(shù)據存儲至內存塊,并對其進行像素采樣,并將采樣數(shù)據存儲至縮略圖文件。
[0016]具體的,所述步驟4中,系統(tǒng)以列采樣率值的一半取整數(shù)作為第一數(shù)值,并讀取原圖像文件中第一數(shù)值列數(shù)的數(shù)據作為第一列數(shù)據存儲至內存塊,并對其進行像素采樣,并將采樣數(shù)據存儲至縮略圖文件。
[0017]本發(fā)明的有益效果是:本發(fā)明通過用lib jpeg, libpng解碼結合縮略圖提取方法,直接在打開并解碼圖片的過程中,完成縮略圖的生成,使整個過程無論是在Windows上,Linux上,android上,只需要很小的內存空間,就可以每張縮略圖的生成。這樣就可以適配很多配置不是很好終端設備,例如手機、平板。并且在使用內存很少的狀態(tài)下,可以使用多線程方式并行的讀取圖片,就會具有很高的效率,讓用戶在操作的時候,具有很好的用戶體驗。
[0018]以下結合實施例的【具體實施方式】,對本發(fā)明的上述內容再作進一步的詳細說明。但不應將此理解為本發(fā)明上述主題的范圍僅限于以下的實例。在不脫離本發(fā)明上述技術思想情況下,根據本領域普通技術知識和慣用手段做出的各種替換或變更,均應包括在本發(fā)明的范圍內。
【具體實施方式】
[0019]下面結合實施例詳細描述本發(fā)明的技術方案:
[0020]本發(fā)明針對現(xiàn)有技術中嵌入式軟件縮略圖生成使用的方式是先將原始的圖片加載入內存中,然后再進行變換,最后生成縮略圖,會占用大量內存,而且效率不高的問題,提供一種圖像縮略圖生成方法,首先,系統(tǒng)讀取原圖像頭文件信息,結合縮略圖尺寸,生成縮略圖頭信息并將其存儲至縮略圖文件;其次,系統(tǒng)獲取原圖像行寬度乘以單個像素點顏色值的寬度得到一個數(shù)值,然后按照這個數(shù)值在系統(tǒng)中申請內存塊;然后,系統(tǒng)根據原圖像頭文件信息及縮略圖尺寸然后計算出采樣率;再然后,系統(tǒng)根據采樣率計算出原圖像文件中待采樣行數(shù)及列數(shù),逐個將每一行數(shù)據存儲至內存塊,并對其進行像素采樣,并將采樣數(shù)據存儲至縮略圖文件;逐個將每一列數(shù)據存儲至內存塊,并對其進行像素采樣,并將采樣數(shù)據存儲至縮略圖文件;最后,系統(tǒng)根據縮略圖文件生成縮略圖。通過用lib jpeg,libpng解碼結合縮略圖提取方法,直接在打開并解碼圖片的過程中,完成縮略圖的生成,使整個過程無論是在Windows上,Linux上,android上,只需要很小的內存空間,就可以每張縮略圖的生成。這樣就可以適配很多配置不是很好終端設備,例如手機、平板。并且在使用內存很少的狀態(tài)下,可以使用多線程方式并行的讀取圖片,就會具有很高的效率,讓用戶在操作的時候,具有很好的用戶體驗。
[0021]實施例
[0022]本例的圖像縮略圖生成方法,包括以下幾個步驟:
[0023]步驟1、系統(tǒng)使用libpng或libjpeg讀取原圖像頭文件信息(其中l(wèi)ibpng處理PNG格式圖片,lib jpeg處理jpeg圖片),結合縮略圖尺寸,生成縮略圖頭信息并將其存儲至縮略圖文件;其中,根據縮略圖尺寸,在頭信息中保存寬度,高度,像素的字節(jié)數(shù)。其他信息例如像素寬度,調色板等信息,直接拷貝保存。
[0024]步驟2、系統(tǒng)獲取原圖像行寬度乘以單個像素點顏色值的寬度得到一個數(shù)值,然后按照這個數(shù)值在系統(tǒng)中申請內存塊;其中,內存塊可以為一個也可以為多個。用于存儲從原圖上按行讀取的像素信息。然后使用Iibpng或Iibjpeg在這塊內存上存儲,從原圖上按行讀取的圖片像素信息,作為生成縮略圖的采樣的原始數(shù)據。從而實現(xiàn),多線程方式并行的讀取圖片,就會具有很高的效率,讓用戶在操作的時候,具有很好的用戶體驗。
[0025]步驟3、系統(tǒng)根據原圖像頭文件信息及縮略圖尺寸然后計算出采樣率;采樣率包括行采樣率,所述行采樣率值為原圖像的行寬度除以縮略圖的行寬度然后取整得到。采樣率包括列采樣率,列采樣率值為原圖像的列高度除以縮略圖的列高度然后取整得到。
[0026]步驟4、系統(tǒng)根據采樣率計算出原圖像文件中待采樣行數(shù)及列數(shù),逐個將每一行數(shù)據存儲至內存塊,并對其進行像素采樣,并將采樣數(shù)據存儲至縮略圖文件;逐個將每一列數(shù)據存儲至內存塊,并對其進行像素采樣,并將采樣數(shù)據存儲至縮略圖文件;具體的,系統(tǒng)以行采樣率值的一半取整數(shù)作為第一數(shù)值,并讀取原圖像文件中第一數(shù)值行數(shù)的數(shù)據作為第一行數(shù)據存儲至內存塊,并對其進行像素采樣,并將采樣數(shù)據存儲至縮略圖文件。以列采樣率值的一半取整數(shù)作為第一數(shù)值,并讀取原圖像文件中第一數(shù)值列數(shù)的數(shù)據作為第一列數(shù)據存儲至內存塊,并對其進行像素采樣,并將采樣數(shù)據存儲至縮略圖文件。
[0027]步驟5、系統(tǒng)根據縮略圖文件生成縮略圖。
[0028]在具體實現(xiàn)過程中,首先系統(tǒng)搭建android平臺,創(chuàng)建一個應用,該應用使用imageloader加載圖片,修改原始加載圖片的函數(shù),讓這個函數(shù)通過jni調用底層Freeimage庫。然后,寫一個