您好,登錄后才能下訂單哦!
這篇文章將為大家詳細講解有關Android中有哪些圖片壓縮方式,文章內容質量較高,因此小編分享給大家做個參考,希望大家閱讀完這篇文章后對相關知識有一定的了解。
1、Bitmap的Compress方法(質量壓縮):
public boolean compress(CompressFormat format, int quality, OutputStream stream)
參數format:表示圖像的壓縮格式,目前有CompressFormat.JPEG、CompressFormat.PNG、CompressFormat.WEBP。
參數quality: 圖像壓縮率,0-100。 0 壓縮100%,100意味著不壓縮。
參數stream: 寫入壓縮數據的輸出流。
常用的用法:
public static Bitmap compress(Bitmap bitmap){ ByteArrayOutputStream baos = new ByteArrayOutputStream(); bitmap.compress(Bitmap.CompressFormat.JPEG, 90, baos); byte[] bytes = baos.toByteArray(); return BitmapFactory.decodeByteArray(bytes, 0, bytes.length); }
上面方法中通過bitmap的compress方法對bitmap進行質量壓縮,10%壓縮,90%不壓縮。
圖片的大小是沒有變的,因為質量壓縮不會減少圖片的像素,它是在保持像素的前提下改變圖片的位深及透明度等,來達到壓縮圖片的目的,這也是為什么該方法叫質量壓縮方法。圖片的長,寬,像素都不變,那么bitmap所占內存大小是不會變的。
quality值越小壓縮后的baos越小(使用場景:在微信分享時,需要對圖片的字節數組大小進行限制,這時可以使用bitmap的compress方法對圖片進行質量壓縮)。
2、BitmapFactory.Options的inJustDecodeBounds和inSampleSize參數(采樣壓縮率):
inJustDecodeBounds:當inJustDecodeBounds設置為true的時候,BitmapFactory通過decodeXXXX解碼圖片時,將會返回空(null)的Bitmap對象,這樣可以避免Bitmap的內存分配,但是它可以返回Bitmap的寬度、高度以及MimeType。
inSampleSize: 當它小于1的時候,將會被當做1處理,如果大于1,那么就會按照比例(1 / inSampleSize)縮小bitmap的寬和高、降低分辨率,大于1時這個值將會被處置為2的倍數。例如,width=100,height=100,inSampleSize=2,那么就會將bitmap處理為,width=50,height=50,寬高降為1 / 2,像素數降為1 / 4。
常用用法:
public static Bitmap inSampleSize(Bitmap bitmap,int reqWidth,int reqHeight){ final BitmapFactory.Options options = new BitmapFactory.Options(); options.inJustDecodeBounds = true; BitmapFactory.decodeByteArray(data, 0, data.length, options); options.inSampleSize = calculateInSampleSize(options, reqWidth, reqHeight); options.inJustDecodeBounds = false; return BitmapFactory.decodeByteArray(data, 0, data.length, options); } public static int calculateInSampleSize(BitmapFactory.Options options, int reqWidth, int reqHeight) { final int picheight = options.outHeight; final int picwidth = options.outWidth; int targetheight = picheight; int targetwidth = picwidth; int inSampleSize = 1; if (targetheight > reqHeight || targetwidth > reqWidth) { while (targetheight >= reqHeight && targetwidth >= reqWidth) { inSampleSize += 1; targetheight = picheight / inSampleSize; targetwidth = picwidth / inSampleSize; } } return inSampleSize; } }
inSampleSize方法中先將inJustDecodeBounds設置為false,在通過BitmapFactory的decodeXXXX方法解碼圖片,返回空(null)的Bitmap對象,同時獲取了bitmap的寬高,再通過calculateInSampleSize方法根據原bitmap的 寬高和目標寬高計算出合適的inSampleSize,最后將inJustDecodeBounds設置為true,通過BitmapFactory的decodeXXXX方法解碼圖片(使用場景:比如讀取本地圖片時,防止Bitmap過大導致內存溢出)。
3、通過Matrix壓縮圖片
Matrix matrix = new Matrix(); matrix.setScale(0.5f, 0.5f); bm = Bitmap.createBitmap(bit, 0, 0, bit.getWidth(),bit.getHeight(), matrix, true); }
使用場景:自定義View時,對圖片進行縮放、旋轉、位移以及傾斜等操作,常見的就是對圖片進行縮放處理,以及圓角圖片等。
關于Android中有哪些圖片壓縮方式就分享到這里了,希望以上內容可以對大家有一定的幫助,可以學到更多知識。如果覺得文章不錯,可以把它分享出去讓更多的人看到。
免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。