如何在android中将图像转换为base64字符串时保持图像宽高比和质量

时间:2016-06-22 12:05:04

标签: android bitmap android-bitmap

我的代码有效但不是我想要的方式。我想要的是获得更好的解决方案的一些改进。将图像从文件上载到远程服务器会使图像质量较差,尺寸较小。我尝试了不同的解决方案,包括Stack Overflow建议,但这些解决方案都没有帮助我。所以我想要的是将大图像上传到远程服务器,保持宽高比而不用OOM。

使用此代码:

public String resizeBase64Image(String base64image){
        byte [] encodeByte=Base64.decode(base64image.getBytes(),Base64.DEFAULT);
        BitmapFactory.Options options=new BitmapFactory.Options();
        options.inPurgeable = true;
        Bitmap image = BitmapFactory.decodeByteArray(encodeByte, 0, encodeByte.length,options);


        if(image.getHeight() <= 400 && image.getWidth() <= 400){
            return base64image;
        }
        image = Bitmap.createScaledBitmap(image, 200, 200, false);

        ByteArrayOutputStream baos=new  ByteArrayOutputStream();
        image.compress(Bitmap.CompressFormat.PNG,100, baos);

        byte [] b=baos.toByteArray();
        System.gc();
        return Base64.encodeToString(b, Base64.NO_WRAP);

    }

和;

private String getStringImage(Bitmap bmp) {
        ByteArrayOutputStream baos = new ByteArrayOutputStream();
        bmp.compress(Bitmap.CompressFormat.JPEG, 100, baos);

        byte[] imageBytes = baos.toByteArray();
        return resizeBase64Image(Base64.encodeToString(imageBytes, Base64.DEFAULT));
    }

这会导致图像质量不佳。当我尝试将此行image = Bitmap.createScaledBitmap(image, 200, 200, false);更改为image = Bitmap.createScaledBitmap(image, 300, 300, false);时,会发出错误。 任何拥有更好解决方案的人都可以帮助我在没有OOM的情况下更好地处理base64 String方法,或者可以改进我的代码。

0 个答案:

没有答案