生活随笔
收集整理的這篇文章主要介紹了
图片的质量压缩和二次采样
小編覺得挺不錯的,現在分享給大家,幫大家做個參考.
二者的不同點
質量壓縮:只會減少圖片在sdcard中占的內存大小而不會改變運行內存不改變圖片本身像素二次采樣:改變圖片本身像素,減少加載圖片的本身運行內存
上代碼:
代碼中注釋都比較詳細
package com.example.administrator.zhiliangyasuoandbendihuancun;
import android.graphics.Bitmap;
import android.graphics.BitmapFactory;
import android.os.Bundle;
import android.support.v7.app.AppCompatActivity;
import android.util.Log;
import android.widget.ImageView;
import java.io.FileOutputStream;
import static android.graphics.BitmapFactory.decodeFile;
public class MainActivity extends AppCompatActivity {private ImageView image1,image2;
private Bitmap bitmap;
@Overrideprotected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);setContentView(R.layout.activity_main);image1= (ImageView) findViewById(R.id.img1);image2= (ImageView) findViewById(R.id.img2);getData();getDtata02();}
public void getData(){String url=
"/mnt/sdcard/aa.jpg";
bitmap= BitmapFactory.decodeFile(url);
int width= bitmap.getWidth();
int height= bitmap.getHeight();
int count=bitmap.getRowBytes()*bitmap.getHeight();
int count1= bitmap.getByteCount();Log.e(
"image",
"onCreate: "+width+
"---"+height+
"---"+count+
"---"+count1);image1.setImageBitmap(bitmap);
try {FileOutputStream str =
new FileOutputStream(
"/mnt/sdcard/aa_60.jpg");bitmap.compress(Bitmap.CompressFormat.JPEG,
60,str);width= bitmap.getWidth();height= bitmap.getHeight();count=bitmap.getRowBytes()*bitmap.getHeight();count1= bitmap.getByteCount();Log.e(
"壓縮后的比較",
"onCreate: "+width+
"---"+height+
"---"+count+
"---"+count1);
bitmap= decodeFile(
"/mnt/sdcard/aa_60.jpg");image2.setImageBitmap(bitmap);}
catch (Exception e) {e.printStackTrace();}}
public void getDtata02(){
BitmapFactory.Options options=
new BitmapFactory.Options();
options.inJustDecodeBounds=
true;bitmap= BitmapFactory.decodeFile(
"/mnt/sdcard/aa.jpg",options);image1.setImageBitmap(bitmap);
int h= options.outHeight;
int w=options.outWidth;
int Size=
1;
while (h/Size>
200||w/Size>
300){Size*=
2;}
/*** 二次采樣*/
options.inJustDecodeBounds=
false;
options.inSampleSize=Size;
options.inPreferredConfig=Bitmap.Config.ARGB_8888;bitmap= BitmapFactory.decodeFile(
"/mnt/sdcard/aa.jpg",options);image2.setImageBitmap(bitmap);}
}
布局里面
<?xml version="1.0" encoding="utf-8"?>
<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"xmlns:tools="http://schemas.android.com/tools"android:id="@+id/activity_main"android:layout_width="match_parent"android:layout_height="match_parent"android:paddingBottom="@dimen/activity_vertical_margin"android:paddingLeft="@dimen/activity_horizontal_margin"android:paddingRight="@dimen/activity_horizontal_margin"android:paddingTop="@dimen/activity_vertical_margin"tools:context="com.example.administrator.zhiliangyasuoandbendihuancun.MainActivity">
<LinearLayout
android:layout_width="300dp"android:layout_height="200dp"android:orientation="vertical"><ImageView
android:layout_width="match_parent"android:layout_height="0dp"android:layout_weight="1"android:id="@+id/img1"/><ImageView
android:layout_width="match_parent"android:layout_height="0dp"android:layout_weight="1"android:id="@+id/img2"/></LinearLayout></RelativeLayout>
質量布局和二次采樣的布局是復用的所以直接覆蓋了
最后配置讀取sdcard的權限
<uses-permission android:name="android.permission.INTERNET"/>
以上是對質量壓縮后圖片像素的比較發現值是相同的,并且一般壓縮不低于30不會影響視覺效果。
總結
以上是生活随笔為你收集整理的图片的质量压缩和二次采样的全部內容,希望文章能夠幫你解決所遇到的問題。
如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。