Java:图像字节转换返回null

问题描述 投票:0回答:1

我正在尝试将图像从客户端传输到将其存入数据库的服务器。为此,我将我的图像转换为字节数组(它可以工作),然后将其作为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 String,我使用BufferedReader,然后用它创建一个User(bean):

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

在bean用户中有一个getter / setter用于图片,当我sout它时,它看起来很好:

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, ...

所以我猜字节数组很好吗?

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

非常感谢!

java image byte blob javax.imageio
1个回答
0
投票

在bean用户中有一个getter / setter用于图片,当我sout它时,它看起来很好:

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, ...

所以我猜字节数组很好吗?

我的问题是:where is the problem?为什么我的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

我不知道你的数据库/服务器将jpeg字节转换成什么格式,但上面不是已知的图像格式(例如:不是.jpg,或.png格式等)。

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

© www.soinside.com 2019 - 2024. All rights reserved.