Java:图像 <-> 字节转换 return 空

Java: image <-> bytes conversion return null

我正在尝试将图像从客户端传输到服务器,服务器将其存入数据库。为此,我将我的图像转换为字节数组(有效)并将其作为 blob 存储到数据库中(有效)。

public static byte[] imageToBytes(String path) {
    byte[] imageByte = null;
    File img = new File(path);
    try {
        BufferedImage image = ImageIO.read(img);
        ByteArrayOutputStream baos = new ByteArrayOutputStream();
        ImageIO.write(image, "jpg", baos);
        baos.flush();
        imageByte = baos.toByteArray();
        baos.close();
    } catch (IOException ex) {
        ex.printStackTrace();
    }
    return imageByte;
}

当我尝试使用客户端读取数据库时,我的问题来了。

public static Image bytesToImage(byte[] bytes) {
    BufferedImage image = null;
    try {
        image = ImageIO.read(new ByteArrayInputStream(bytes));
    } catch (IOException ex) {
        ex.printStackTrace();
    }
    return image;
}

此时图像为空...我搜索了一下,我的代码似乎是正确的。

我不仅从服务器得到了一张图片,而且还得到了 GSon 的整个帐户,当我搜索我的 json 字符串时,我得到了:

{"username":"Filou","picture":[91,45,49,44,32,45,52,48,44,32,45,49,44,32,45,51,55,44,32,48,44,32,54,55,44,32,48,44,32,56,44,32,54,44,32,54...

为了从服务器获取 json 字符串,我使用了 BufferedReader,然后用它创建了一个用户(bean):

String strRetour = reader.readLine();
User userReturn = gson.fromJson(strRetour, User.class);

在 bean User 中有一个 getter/setter 的图片,当我搜索它时,它看起来不错:

System.out.println(Arrays.toString(userReturn.getPicture()));
[91, 45, 49, 44, 32, 45, 52, 48, 44, 32, 45, 49, 44, 32, 45, 51, 55, 44, 32, 48, 44, 32, 54, 55, 44, 32, 48, 44, 32, 56, ...

所以我猜字节数组没问题?

我的问题是:问题出在哪里?为什么我的图片是空的?

非常感谢!

In the bean User there is a getter/setter for the picture and when I sout it, it looks fine:

System.out.println(Arrays.toString(userReturn.getPicture()));

[91, 45, 49, 44, 32, 45, 52, 48, 44, 32, 45, 49, 44, 32, 45, 51, 55, 44, 32, 48, 44, 32, 54, 55, 44, 32, 48, 44, 32, 56, ...

So I guess the bytes array is fine?

My question is: where is the problem? Why is my image null?

您显示的字节不是 JPEG 格式。真正的 JPEG 数据以字节 FF D8.

开头
91 45 49 44 32 45 52 48 44 32 45 49 44 32 45 51         ‘EID2ERHD2EID2EQ
55 44 32 48 44 32 54 55 44 32 48 44 32 56               UD2HD2TUD2HD2V

我不知道你的 database/server 将 jpeg 字节转换成什么格式,但以上不是已知的图像格式(例如:不是 .jpg,或 .png格式等)。

检查imageByte[0]imageByte[1]的值(应该[0]=-1[1]= -40),你的 JSON 的图像数据应该匹配才能成功解码为 jpeg。