在 java servlet 中显示以字节数组形式存储的图像
Show Image stored in byte array form in java servlet
我将图像存储为 byte[]
。现在我想从 Java servlet 中显示它。我正在使用此代码:
response.setContentType("image/gif");
OutputStream out = response.getOutputStream();
out.write(img); // image is of byte[] type.
out.flush();
out.close();
但我收到错误消息 "The image cannot be displayed because it contains an error."
实际上原因完全不同 error.I 我分两步执行我的任务 =>
先把image转成byte[]
存入hbase。
然后从 hbase 获取 byte[]
并通过浏览器显示它。
在问题中我提到了第二部分的代码,但导致错误的实际问题是在第一部分。错误原因是:
最初我使用代码
将图像转换为 byte[]
File imgPath = new File(ImageName);
BufferedImage bufferedImage = ImageIO.read(imgPath);
// get DataBufferBytes from Raster
WritableRaster raster = bufferedImage.getRaster();
DataBufferByte data = (DataBufferByte) raster.getDataBuffer();
return (data.getData());
导致错误的原因
"Exception in thread "main" java.lang.IllegalArgumentException: image == null!
at javax.imageio.ImageTypeSpecifier.createFromRenderedImage(ImageTypeSpecifier.java:925)
at javax.imageio.ImageIO.getWriter(ImageIO.java:1591)
at javax.imageio.ImageIO.write(ImageIO.java:1520)
at com.medianet.hello.HbaseUtil.main(HbaseUtil.java:138)
at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:57)
at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)
at java.lang.reflect.Method.invoke(Method.java:606)
at com.intellij.rt.execution.application.AppMain.main(AppMain.java:134)
"
当我把代码改成
ByteArrayOutputStream baos=new ByteArrayOutputStream();
BufferedImage img=ImageIO.read(new File(ImageName));
ImageIO.write(img, "jpg", baos);
baos.flush();
return baos.toByteArray();
成功了。
我将图像存储为 byte[]
。现在我想从 Java servlet 中显示它。我正在使用此代码:
response.setContentType("image/gif");
OutputStream out = response.getOutputStream();
out.write(img); // image is of byte[] type.
out.flush();
out.close();
但我收到错误消息 "The image cannot be displayed because it contains an error."
实际上原因完全不同 error.I 我分两步执行我的任务 =>
先把image转成byte[]
存入hbase。
然后从 hbase 获取 byte[]
并通过浏览器显示它。
在问题中我提到了第二部分的代码,但导致错误的实际问题是在第一部分。错误原因是:
最初我使用代码
将图像转换为byte[]
File imgPath = new File(ImageName);
BufferedImage bufferedImage = ImageIO.read(imgPath);
// get DataBufferBytes from Raster
WritableRaster raster = bufferedImage.getRaster();
DataBufferByte data = (DataBufferByte) raster.getDataBuffer();
return (data.getData());
导致错误的原因
"Exception in thread "main" java.lang.IllegalArgumentException: image == null!
at javax.imageio.ImageTypeSpecifier.createFromRenderedImage(ImageTypeSpecifier.java:925)
at javax.imageio.ImageIO.getWriter(ImageIO.java:1591)
at javax.imageio.ImageIO.write(ImageIO.java:1520)
at com.medianet.hello.HbaseUtil.main(HbaseUtil.java:138)
at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:57)
at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)
at java.lang.reflect.Method.invoke(Method.java:606)
at com.intellij.rt.execution.application.AppMain.main(AppMain.java:134)
"
当我把代码改成
ByteArrayOutputStream baos=new ByteArrayOutputStream();
BufferedImage img=ImageIO.read(new File(ImageName));
ImageIO.write(img, "jpg", baos);
baos.flush();
return baos.toByteArray();
成功了。