【发布时间】:2014-11-26 03:39:15
【问题描述】:
这是我第一个生成图像并向客户端显示图像的 servlet,
但是commect提到的部分有编译时错误。
public class DynamicImage extends HttpServlet {
@Override
public void doGet(HttpServletRequest request, HttpServletResponse response) throws IOException, ServletException {
response.setContentType("image/jpeg");
//create image
int width = 200;
int height = 30;
BufferedImage image = new BufferedImage(width, height, BufferedImage.TYPE_INT_RGB);
//get drawing context
Graphics2D g = (Graphics2D) image.getGraphics();
g.setColor(Color.GRAY);
g.fillRect(0, 0, width, height);
//draw a string
g.setColor(Color.WHITE);
g.setFont(new Font("Dialog", Font.PLAIN, 14));
g.drawString("My String!", 10, height / 2 + 4);
//draw a border
g.setColor(Color.BLACK);
g.drawRect(0, 0, width - 1, height - 1);
//dispose context
g.dispose();
//send back image to the client
ServletOutputStream sos = response.getOutputStream();
com.sun.image.codec.jpeg.JPEGImageEncoder encoder = JPEGCodec // Compile Time Error, cant find JPEGCodec
}
}
我的 IDE (Netbeans) 找不到并导入 JPEGCodec ,如何解决?
【问题讨论】:
-
com.sun 包中的类没有记录,也不应该被使用。使用可以以 JPEG 格式写入图像的公共 API,例如 ImageIO。
-
强烈建议不要在 servlet 中生成图像。图像应该已经存在于文件系统或数据库中;在 servlet 中这样做不仅效率低下,而且有些服务器没有显卡或 GraphicsEnvironment,因此您的图形操作可能会失败。
-
@ControlAltDel 我可以想到很多用于在服务器端生成图像的用例。在服务器端生成图像一点也不稀奇。要处理没有图形系统,只需将属性设置为无头模式:-Djava.awt.headless=true