我必须将从相机/图库中捕获的图像上传到服务器。在许多应用程序中,我看到的图像的分辨率为1000X560,大小为35 KB。在我的情况下,图像大小高达380 KB。我的手机的相机捕获大小<2368X4224的分辨率的图像。 2 MB。如何在保持尺寸较小的同时以高分辨率获得图像?这是我到目前为止所尝试的内容:
BitmapFactory.Options bmOptions = new BitmapFactory.Options();
bmOptions.inJustDecodeBounds = true;
BitmapFactory.decodeFile(realPath, bmOptions);
bmOptions.inSampleSize = 1;
bmOptions.inPreferredConfig = Bitmap.Config.ARGB_8888;
bmOptions.inJustDecodeBounds = false;
Bitmap bitmap = BitmapFactory.decodeFile(realPath, bmOptions);
ByteArrayOutputStream bytes = new ByteArrayOutputStream();
bitmap.compress(Bitmap.CompressFormat.JPEG, 100, bytes);
我读过这个documentation。我面临的问题是如何确定图像的最小宽度和最小高度。
答案 0 :(得分:3)
嘿,您可以查看http://voidcanvas.com/whatsapp-like-image-compression-in-android/ 此链接
我认为这是最好的图像压缩教程
另请查看以下答案:https://stackoverflow.com/a/26928768/5275436
我希望它有所帮助。
编辑:这是图像调整大小。
// max Height and width values of the compressed image is taken as 816x612
float maxHeight = 816.0f;
float maxWidth = 612.0f;
float imgRatio = actualWidth / actualHeight;
float maxRatio = maxWidth / maxHeight;
// width and height values are set maintaining the aspect ratio of the image
if (actualHeight > maxHeight || actualWidth > maxWidth) {
if (imgRatio < maxRatio) { imgRatio = maxHeight / actualHeight; actualWidth = (int) (imgRatio * actualWidth); actualHeight = (int) maxHeight; } else if (imgRatio > maxRatio) {
imgRatio = maxWidth / actualWidth;
actualHeight = (int) (imgRatio * actualHeight);
actualWidth = (int) maxWidth;
} else {
actualHeight = (int) maxHeight;
actualWidth = (int) maxWidth;
}
}