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。
我正在尝试将图像从客户端传输到服务器,服务器将其存入数据库。为此,我将我的图像转换为字节数组(有效)并将其作为 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 myimage 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。