如何在Android中降低相机拍摄的照片质量

时间:2017-02-23 14:29:17

标签: android

问题是......假设我的相机质量非常好。它会返回高分辨率的图片。但我想将该图像上传到服务器。所以如果图像尺寸很大,我想降低图像质量。任何帮助?谢谢你的到来。

4 个答案:

答案 0 :(得分:1)

是的,您可以使用Bitmap.compress()来执行此操作,您只需指定压缩格式,质量和输出格式即可。 请参阅以下链接 “https://developer.android.com/reference/android/graphics/Bitmap.html#compress(android.graphics.Bitmap.CompressFormat,int,java.io.OutputStream)”。

让我知道它是否对你有所帮助!!

答案 1 :(得分:1)

如果要编写Android代码,我建议您设置所需的图像质量并将其存储/转码为JPEG

这是对相反问题的答案 - 它应该能满足你的需求?:How to compress Bitmap as JPEG with least quality loss on Android?

答案 2 :(得分:1)

我认为这是您的可上传图片的图片格式的问题通常* .raw具有最大尺寸。你应该尝试上传jpg / png图像。保存图像时,只需使用 Filename.jpg 作为文件名,图像将保存.ready上传。您可以在上传文件后删除该文件。在 媒体商店 探测 {service} 更新之前,更改不会反映到您的图库中。您可以使用此https://github.com/googlesamples/android-Camera2Basic作为构建应用的参考

答案 3 :(得分:0)

试试这个:以KB格式获取特定尺寸的图像

/**
 * reduces the size of the image
 * param image bitmap received from camera
 * @param maxSize
 * @return
 */
public Bitmap getResizedBitmap(Bitmap image, int maxSize) {
    int width = image.getWidth();
    int height = image.getHeight();

    float bitmapRatio = (float)width / (float) height;
    if (bitmapRatio > 0) {
        width = maxSize;
        height = (int) (width / bitmapRatio);
    } else {
        height = maxSize;
        width = (int) (height * bitmapRatio);
    }
    return Bitmap.createScaledBitmap(image, width, height, true);
}

使用它像:

Bitmap scaledImage = getResizedBitmap(photo, 200); //here 200 is maxsize

来自Wikipedia

对于最高质量的图像(Q = 100),每个颜色像素需要大约8.25位

因此,对于Q=100图片上的200x200,这会导致(200 * 200) px * 8.25 bits/px = 330000 bits = ~ 41 kB肯定小于64KB

你也可以尝试其他维度..只需更改maxSize参数

即可