Android学習の圧縮画像から指定サイズへ
画像圧縮については、サーバーをアップロードする際にサイズ制限があるところがあるので、ここでは2つの方法をまとめましたが、個人的な感覚方法はどちらかというと正確です.
方法1:
方法2:
方法1:
*
*
* bitmap , 64kb,
*
* @param bitmap
* @return
*/
private Bitmap ImageCompressL(Bitmap bitmap) {
double targetwidth = Math.sqrt(64.00 * 1000);
if (bitmap.getWidth() > targetwidth || bitmap.getHeight() > targetwidth) {
// matrix
Matrix matrix = new Matrix();
//
double x = Math.max(targetwidth / bitmap.getWidth(), targetwidth
/ bitmap.getHeight());
//
matrix.postScale((float) x, (float) x);
bitmap = Bitmap.createBitmap(bitmap, 0, 0, bitmap.getWidth(),
bitmap.getHeight(), matrix, true);
}
return bitmap;
}
方法2:
* ( )
*
* bitmap , 64kb,
*
* @param bitmap
*/
private Bitmap ImageCompress(Bitmap bitmap) {
// :KB
double maxSize = 64.00;
// bitmap , bitmap ( )
ByteArrayOutputStream baos = new ByteArrayOutputStream();
bitmap.compress(Bitmap.CompressFormat.JPEG, 100, baos);
byte[] b = baos.toByteArray();
// KB
double mid = b.length / 1024;
// bitmap
if (mid > maxSize) {
// bitmap
double i = mid / maxSize;
//
bitmap = zoomImage(bitmap, bitmap.getWidth() / Math.sqrt(i),
bitmap.getHeight() / Math.sqrt(i));
}
return bitmap;
}
/***
*
*
* @param bgimage
* :
* @param newWidth
* :
* @param newHeight
* :
* @return
*/
public Bitmap zoomImage(Bitmap bgimage, double newWidth, double newHeight) {
//
float width = bgimage.getWidth();
float height = bgimage.getHeight();
// matrix
Matrix matrix = new Matrix();
//
float scaleWidth = ((float) newWidth) / width;
float scaleHeight = ((float) newHeight) / height;
//
matrix.postScale(scaleWidth, scaleHeight);
Bitmap bitmap = Bitmap.createBitmap(bgimage, 0, 0, (int) width,
(int) height, matrix, true);
return bitmap;
}