【问题标题】:How to reduce picture quality of picture taken by camera in Android如何在Android中降低相机拍摄的图片质量
【发布时间】:2017-07-14 02:23:33
【问题描述】:

问题是......假设我有质量非常好的相机。它返回高分辨率图片。但我想将该图像上传到服务器。因此,如果图像尺寸很大,我想降低图像质量。有帮助吗?提前谢谢。

【问题讨论】:

标签: android


【解决方案1】:

试试这个:以 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 位

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

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

【讨论】:

    【解决方案2】:

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

    【讨论】:

      【解决方案3】:

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

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

      【讨论】:

      • 谢谢,但我想要安卓代码。不是应用程序。实际上我已经为相机和上传图像编写了代码,但我想在上传之前减小图像大小(以 kb 为单位)。
      • @ArnabKundu 我已经改变了我的答案 - 并建议这可能是另一个问题的重复......你如何在 Android 中存储质量为 x% 的 JPEG。 HTH
      • 感谢您的帮助。我会检查的。
      • 虽然此链接可能会回答问题,但最好在此处包含答案的基本部分并提供链接以供参考。如果链接页面发生更改,仅链接答案可能会失效。 - From Review
      • @MaksimSimkin 当然 - 但我认为它实际上是那个问题的重复,或者我将其标记为重复的那个......我认为最好接受这个重复。
      【解决方案4】:

      是的,你可以使用Bitmap.compress()来做,你需要做的就是指定压缩格式、质量和输出格式。 参考以下链接 “https://developer.android.com/reference/android/graphics/Bitmap.html#compress(android.graphics.Bitmap.CompressFormat, int, java.io.OutputStream)”。

      如果对你有帮助,请告诉我!!

      【讨论】:

      • 这很好。但我认为这需要一些时间应用程序会变慢。有没有办法切实地改变相机设置,这会给我小尺寸(以 Kb 为单位)的图像输出?
      • 如果您发现保存位图很慢,请尝试以下操作: 尝试使用 JPEG 格式,仅在绝对必要时使用 PNG。使用 bitmap.compress(Bitmap.CompressFormat.JPEG, 100, out); 如果您正在创建位图并且不关心透明度,请使用 Bitmap.Config.RGB_565 而不是 Bitmap.Config.ARGB_8888。使用Bitmap bitmap = Bitmap.createBitmap(width, height, Bitmap.Config.RGB_565);
      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2019-10-06
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多