Android在上传到服务器之前减小图像大小

时间:2016-06-18 04:59:11

标签: android image-processing bit-manipulation

我必须将从相机/图库中捕获的图像上传到服务器。在许多应用程序中,我看到的图像的分辨率为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。我面临的问题是如何确定图像的最小宽度和最小高度。

1 个答案:

答案 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;

            }
        }