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

Android在上传到服务器之前减小图像大小,android,image-processing,bit-manipulation,Android,Image Processing,Bit Manipulation,我必须将从相机/画廊拍摄的图像上传到服务器。在许多应用程序中,我看到分辨率为1000X560、大小为35KB的图像。而在我的例子中,图像大小高达380 KB。我的手机摄像头拍摄的图像分辨率为2368X4224,大小最大高度| |实际宽度>最大宽度){ if(imgRatiomaxRatio){ imgRatio=最大宽度/实际宽度; 实际高度=(int)(imgRatio*实际高度); 实际宽度=(int)最大宽度; }否则{ 实际高度=(int)最大高度; 实际宽度=(int)最大宽度; }

我必须将从相机/画廊拍摄的图像上传到服务器。在许多应用程序中,我看到分辨率为1000X560、大小为35KB的图像。而在我的例子中,图像大小高达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);
我读过这个。我面临的问题是如何确定图像的最小宽度和最小高度。

嘿,你能检查一下这个链接吗

我认为这是最好的图像压缩教程。
同时检查以下答案:
我希望它能有所帮助

编辑:这里是图像调整

//      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;

            }
        }
//压缩图像的最大高度和宽度值为816x612
浮动最大高度=816.0f;
浮动最大宽度=612.0f;
浮动高度=实际宽度/实际高度;
浮点最大比值=最大宽度/最大高度;
//设置宽度和高度值以保持图像的纵横比
如果(实际高度>最大高度| |实际宽度>最大宽度){
if(imgRatiomaxRatio){
imgRatio=最大宽度/实际宽度;
实际高度=(int)(imgRatio*实际高度);
实际宽度=(int)最大宽度;
}否则{
实际高度=(int)最大高度;
实际宽度=(int)最大宽度;
}
}

通过应用scaleFactor@MD我不明白你的意思。你能详细说明一下吗?我已经读过这个教程了。它们使用的最大宽度和高度分别为816和612。这是我没有得到的。我应该使用硬编码值,还是应该进行一些计算,或者这些值是由哪些因素决定的?实际上,我将在电子商务应用程序中使用这一点,但这取决于您对图像大小的要求。我的电子商务应用程序的开场白是:确定最大w和h,如果图像大于此尺寸,则可以调整大小。请检查已编辑的答案(调整大小功能)。已尝试,但分辨率降至457X816,文件大小仍为276KB。我必须在保持低文件大小的同时保持高分辨率。尝试将压缩80减少到60,即scaledBitmap.compress(Bitmap.CompressFormat.JPEG,60,out);