我在数据库中以bytearray格式存在图像。我想在浏览器上显示。我不知道如何使用OutputStream编写Image。这是我的代码。
byte[] imageInBytes = (byte[]) obj; // from Database
InputStream in = new ByteArrayInputStream(imageInBytes);
Image img = ImageIO.read(in).getScaledInstance(50, -1, Image.SCALE_SMOOTH);
OutputStream o = resp.getOutputStream(); // HttpServletResponse
o.write(imgByte);
答案 0 :(得分:2)
您可以尝试这样的事情:
File f=new File("image.jpg");
BufferedImage o=ImageIO.read(f);
ByteArrayOutputStream b=new ByteArrayOutputStream();
ImageIO.write(o, "jpg", b);
byte[] img=b.toByteArray();
答案 1 :(得分:1)
您必须将响应的内容类型设置为您要发送的图像类型。 假设您的图像是jpeg时存储的。然后,
OutputStream o = resp.getOutputStream(); // HttpServletResponse
o.setContentType("image/jpeg");
o.write(img.getBytes() /* imgByte */);
会向浏览器发送图像。 (浏览器从标题信息中了解到您刚发送的以下信息是jpeg图像。)
答案 2 :(得分:0)
您可以尝试使用ImageIO.write
...
ImageIO.write(img, "jpg", o);
但这需要您在阅读时使用BufferedImage
BufferedImage img = ImageIO.read(in);
然后,您可以使用AffineTransform
缩放图片...
BufferedImage scaled = new BufferedImage(img.getWidth() / 2, img.getHeight() / 2, img.getType());
Graphics2D g2d = scaled.createGraphics();
g2d.setTransform(AffineTransform.getScaledInstance(0.5, 0.5));
g2d.drawImage(img, 0, 0, null);
g2d.dispose();
img = scaled;
这显然只会将图像缩放50%,因此您需要根据图像的原始尺寸和所需尺寸计算所需的缩放系数...
请查看Java: maintaining aspect ratio of JPanel background image有关缩放图片的一些想法......