Image Compression Library for Android
Handy Library to compress and upload images when the files are too large.
https://github.com/zetbaitsu/CompressorStep 1:
Add below line to buid.gradle file
compile 'id.zelory:compressor:1.0.4'
Step 2:
MainActivity.java1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 | package com.pratap.imagecompression;
import android.content.Intent; import android.graphics.Bitmap; import android.graphics.BitmapFactory; import android.os.Bundle; import android.os.Environment; import android.provider.MediaStore; import android.support.v7.app.AppCompatActivity; import android.view.View; import android.widget.Button; import android.widget.ImageView; import android.widget.TextView; import android.widget.Toast;
import java.io.File; import java.io.IOException; import java.text.DecimalFormat;
import id.zelory.compressor.Compressor; import id.zelory.compressor.FileUtil;
public class MainActivity extends AppCompatActivity {
ImageView img_original, img_compressed; TextView txt_filePath; Button btnSelectImage; private File actualImage; private File compressedImage;
private static final int PICK_IMAGE_REQUEST = 1;
@Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_main);
img_original = (ImageView) findViewById(R.id.img_original); img_compressed = (ImageView) findViewById(R.id.img_compressed); txt_filePath = (TextView) findViewById(R.id.txt_filePath); btnSelectImage = (Button) findViewById(R.id.btnSelectImage);
btnSelectImage.setOnClickListener(new View.OnClickListener() { @Override public void onClick(View view) {
chooseImage(view);
} }); }
public void chooseImage(View view) { /*Intent intent = new Intent(Intent.ACTION_GET_CONTENT); intent.setType("image*//*"); startActivityForResult(intent, PICK_IMAGE_REQUEST);*/
Intent i = new Intent( Intent.ACTION_PICK, MediaStore.Images.Media.EXTERNAL_CONTENT_URI);
startActivityForResult(i, PICK_IMAGE_REQUEST);
}
@Override protected void onActivityResult(int requestCode, int resultCode, Intent data) { super.onActivityResult(requestCode, resultCode, data); if (requestCode == PICK_IMAGE_REQUEST && resultCode == RESULT_OK) { if (data == null) { showError("Failed to open picture!"); return; } try { actualImage = FileUtil.from(this, data.getData());
// code to compress image and stores it Pictures folder compressedImage = new Compressor.Builder(this) .setMaxWidth(640) .setMaxHeight(480) .setQuality(90) .setCompressFormat(Bitmap.CompressFormat.PNG) .setDestinationDirectoryPath(Environment.getExternalStoragePublicDirectory( Environment.DIRECTORY_PICTURES).getAbsolutePath()) .build() .compressToFile(actualImage);
txt_filePath.setText( String.format("Actual Size : %s", getReadableFileSize(actualImage.length()) + "" + "\nActual FilePath : "+ actualImage.getAbsolutePath() + String.format("\nCompressed Size : %s", getReadableFileSize(compressedImage.length()))+ "\nCompressed FilePath : "+ compressedImage.getAbsolutePath() ));
img_original.setImageBitmap(BitmapFactory.decodeFile(actualImage.getAbsolutePath())); img_compressed.setImageBitmap(BitmapFactory.decodeFile(compressedImage.getAbsolutePath()));
} catch (IOException e) { showError("Failed to read picture data!"); e.printStackTrace(); } } }
public String getReadableFileSize(long size) { if (size <= 0) { return "0"; } final String[] units = new String[]{"B", "KB", "MB", "GB", "TB"}; int digitGroups = (int) (Math.log10(size) / Math.log10(1024)); return new DecimalFormat("#,##0.#").format(size / Math.pow(1024, digitGroups)) + " " + units[digitGroups]; }
public void showError(String errorMessage) { Toast.makeText(this, errorMessage, Toast.LENGTH_SHORT).show(); } }
|
activity_main.xml
==============
<?xml version="1.0" encoding="utf-8"?>
<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:id="@+id/activity_main"
android:layout_width="match_parent"
android:layout_height="match_parent">
<LinearLayout
android:id="@+id/linearLayout"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:orientation="horizontal">
<ImageView
android:id="@+id/img_original"
android:layout_width="match_parent"
android:layout_height="250dp"
android:layout_weight="1"
android:padding="1dp"
android:scaleType="centerCrop" />
<ImageView
android:id="@+id/img_compressed"
android:layout_width="match_parent"
android:layout_height="250dp"
android:layout_weight="1"
android:padding="1dp"
android:scaleType="centerCrop" />
</LinearLayout>
<TextView
android:id="@+id/txt_filePath"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:layout_below="@+id/linearLayout"
android:layout_centerHorizontal="true"
android:layout_margin="10dp"
android:text="" />
<Button
android:id="@+id/btnSelectImage"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:layout_alignParentBottom="true"
android:layout_alignParentLeft="true"
android:layout_alignParentStart="true"
android:text="Select Image" />
</RelativeLayout>
Code Snippet that do compress the image
==============================
compressedImage = new Compressor.Builder(this)
.setMaxWidth(640)
.setMaxHeight(480)
.setQuality(90)
.setCompressFormat(Bitmap.CompressFormat.PNG)
.setDestinationDirectoryPath(Environment.getExternalStoragePublicDirectory(
Environment.DIRECTORY_PICTURES).getAbsolutePath())
.build()
.compressToFile(actualImage);
References:
https://github.com/zetbaitsu/Compressor
No comments:
Post a Comment