Arran Arran - 14 days ago 5
Android Question

Android, Compressing an image

I am sending an image over the network via wifi or the mobile network to be stored in a server and retrieved again. I've done that but due to the size of images taken by the camera it's making my app slow, just to point out I'm opening the gallery and taking the pictures from there and not taking the picture directly from the app. I have noticed that images from whatsapp that have been taken from the camera and gallery have been compressed to approx. 100kb.

At the moment my code takes a file and converts it to bytes and then sends it. Here is the method for taking a file and converting it to bytes.

private void toBytes(String filePath){
try{
File file = new File(filePath);
InputStream is = new BufferedInputStream(new FileInputStream(file));
ByteArrayOutputStream buffer = new ByteArrayOutputStream();
bytes = new byte[(int) filePath.length()];
int bytes_read;
while((bytes_read = is.read(bytes, 0, bytes.length)) != -1){
buffer.write(bytes, 0, bytes_read);
}
is.close();
bytes = buffer.toByteArray();
}catch(Exception err){
Toast.makeText(getApplicationContext(), err.toString(), Toast.LENGTH_SHORT).show();
}
}


So my question is how would I go about compressing my image before sending? Also I don't need the image to retain a high pixel count as when the app uses the image it will only take up half of the devices screen.

Thank you for any help given.

Answer

The BitMap http://developer.android.com/reference/android/graphics/Bitmap.html class have a compress method. But you might need to scale the image createScaledBitmap, also available in the same class.