0

我正在尝试将一些图像保存到 Web 服务器。所以我所做的就是将我在 android 中的文件转换为 Base64 字符串,将其发送到我的服务器并将 Base64 字符串保存在我的数据库中。当我需要时,我从该数据库中读取字符串并对其进行解码。但是我的图像有一些问题,因为图像都是灰色的。

这是我将图像转换为 base64 的代码:

BitmapFactory.Options options = new BitmapFactory.Options();
Bitmap myBitmap = BitmapFactory.decodeFile(imgFile.getAbsolutePath(), options);
ByteArrayOutputStream byteArrayOutputStream = new ByteArrayOutputStream();
int imageWidth = options.outWidth;


if (imageWidth > widthPixels) {
    myBitmap.compress(Bitmap.CompressFormat.JPEG, 50, byteArrayOutputStream);
} else {
    myBitmap.compress(Bitmap.CompressFormat.JPEG, 100, byteArrayOutputStream);
                                }

byte[] byteArray = byteArrayOutputStream.toByteArray();
String encoded = Base64.encodeToString(byteArray, Base64.DEFAULT);

然后我将字符串“encoded”发送到服务器并将其保存在数据库中。

这是我保存在服务器中的图像的一部分

/9j/4AAQSkZJRgABAQAAAQABAAD/2wBDABALDA4MChAODQ4SERATGCgaGBYWGDEjJR0oOjM9PDkz ODdASFxOQERXRTc4UG1RV19iZ2hnPk1xeXBkeFxlZ2P/2wBDARESEhgVGC8aGi9jQjhCY2NjY2Nj

出于某种原因,有一些“\ n”,我认为这导致了我的问题。我已经尝试使用 replaceAll 删除它们,但没有奏效。

这是我得到的输出

在此处输入图像描述

这是我的数据库结构:

在此处输入图像描述

我将编码的 64base 图像保存为名为“imagemBase”的列中的字符串。问题可能出在我正在使用的类型或编码中吗?

4

2 回答 2

0

我已经解决了这个问题。当我将图像转换为 base64 时,我收到的字符串 hade some + cahrs 并且由于某种原因,当我将它发送到服务器时,+ 被替换为空格。在将字符串保存在数据库中之前,我需要对 php 文件进行替换,在该文件中,我用 + 字符替换了所有的空格。

于 2019-08-31T14:07:23.800 回答
0

我使用这种方法对我有用:

public static String encodeBitmap(Bitmap bitmap) {
    if (bitmap != null) {
        bitmap = resize(bitmap, 800, 800);

        ByteArrayOutputStream baos = new ByteArrayOutputStream();
        bitmap.compress(Bitmap.CompressFormat.JPEG, 100, baos);
        byte[] byteArrayImage = baos.toByteArray();
        return Base64.encodeToString(byteArrayImage, Base64.DEFAULT);
    }
    return null;
}

public static Bitmap decodeBitmap(String encodedImage) {
    byte[] decodedString = Base64.decode(encodedImage, Base64.DEFAULT);
    return BitmapFactory.decodeByteArray(decodedString, 0, decodedString.length);
}

public static Bitmap resize(Bitmap image, int maxWidth, int maxHeight) {
    if (maxHeight > 0 && maxWidth > 0) {
        int width = image.getWidth();
        int height = image.getHeight();
        float ratioBitmap = (float) width / (float) height;
        float ratioMax = (float) maxWidth / (float) maxHeight;

        int finalWidth = maxWidth;
        int finalHeight = maxHeight;
        if (ratioMax > ratioBitmap) {
            finalWidth = (int) ((float) maxHeight * ratioBitmap);
        } else {
            finalHeight = (int) ((float) maxWidth / ratioBitmap);
        }
        image = Bitmap.createScaledBitmap(image, finalWidth, finalHeight, true);
        return image;
    } else {
        return image;
    }
}
于 2019-08-23T17:08:06.293 回答