我想将我的图像大小减小到64 KiB,以便保存在mySql数据库中

时间:2017-01-14 16:49:44

标签: java php android mysql bitmap

我目前正在开发一款Android应用程序,我必须使用php将我的Image发送到MySql服务器

我正在使用BLOB类型字段,它限制我保存大图像。它只允许64KiB,但不会少,但会导致大图像出现问题。

我不想要任何好的质量,但只是想保存它。我使用Bitmap.compress方法压缩它。我盲目地使用它,不知道它是否运作良好。

这是我的转换方法:

public Bitmap compress(Bitmap bitmap){
    Bitmap original =bitmap;
    ByteArrayOutputStream out = new ByteArrayOutputStream();
    original.compress(Bitmap.CompressFormat.JPEG, 30, out);
    Bitmap decoded = BitmapFactory.decodeStream(new ByteArrayInputStream(out.toByteArray()));

    Log.e("Original   dimensions", original.getWidth() + " " + original.getHeight());
    Log.e("Compressed dimensions", decoded.getWidth() + " " + decoded.getHeight());
    return decoded;


}

先谢谢

2 个答案:

答案 0 :(得分:2)

试试这个:

/**
 * reduces the size of the image
 * @param image
 * @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

你也可以尝试其他方面..

您还可以尝试使用调整大小的位图制作图像,并比较图像的实际尺寸。

这是代码:

//create a file to write bitmap data
File f = new File(context.getCacheDir(), filename);
f.createNewFile();

//Convert bitmap to byte array
Bitmap bitmap = your bitmap;
ByteArrayOutputStream bos = new ByteArrayOutputStream();
bitmap.compress(CompressFormat.PNG, 0 /*ignored for PNG*/, bos);
byte[] bitmapdata = bos.toByteArray();

//write the bytes in file
FileOutputStream fos = new FileOutputStream(f);
fos.write(bitmapdata);
fos.flush();
fos.close();

答案 1 :(得分:0)

或者,您可以使用Compressor library使用更多可配置选项压缩图像。

您可以通过gradle将库添加到您的应用中:

    dependencies {
    compile 'id.zelory:compressor:1.0.4'
}

通过以下方式生成压缩图像:

compressedImage = new Compressor.Builder(this)
        .setMaxWidth(640)
        .setMaxHeight(480)
        .setQuality(75)
        .setCompressFormat(Bitmap.CompressFormat.WEBP)
        .setDestinationDirectoryPath(Environment.getExternalStoragePublicDirectory(
          Environment.DIRECTORY_PICTURES).getAbsolutePath())
        .build()
        .compressToFile(actualImage);