import java.awt.Color; import java.awt.Font; import java.awt.Graphics2D; import java.awt.font.FontRenderContext; import java.awt.geom.Rectangle2D; import java.awt.image.BufferedImage; import java.io.File; import java.io.FileInputStream; import java.io.IOException; import java.io.OutputStream; import javax.imageio.ImageIO; import javax.servlet.ServletOutputStream; import javax.servlet.http.HttpServletRequest; import javax.servlet.http.HttpServletResponse; import org.springframework.stereotype.Controller; import org.springframework.web.bind.annotation.PathVariable; import org.springframework.web.bind.annotation.RequestMapping; /** * 前端传入字符生成图片 * @param code 传入字符 * @param request * @param response */ @RequestMapping("/{code}/getImg") public void getImg(@PathVariable String code,HttpServletRequest request, HttpServletResponse response) { try { String projectName = "/images/post_null.png"; //获取文件的路径 String url = request.getSession().getServletContext().getRealPath(projectName); System.out.println(url); /*****************方法1*****************/ //通用util图片处理类 ImageUtil imageUtil = new ImageUtil(); BufferedImage image = imageUtil.createImage(100, 20, "123456789"); //以二进制输出 ServletOutputStream sos = response.getOutputStream(); ImageIO.write(image, "PNG", sos); sos.close(); /*****************方法2*****************/ File file = new File(url); if (!file.exists()) { file.createNewFile(); } if (image != null) ImageIO.write(image, "png", file); /*****************方法3*****************/ // 以byte流的方式打开文件 d:1.gif FileInputStream hFile = new FileInputStream(url); //得到文件大小 int i=hFile.available(); byte data[]=new byte[i]; //读数据 hFile.read(data); //得到向客户端输出二进制数据的对象 OutputStream toClient=response.getOutputStream(); //输出数据 toClient.write(data); toClient.flush(); toClient.close(); hFile.close(); } catch (IOException e) { LOG.error("创建图片发生异常!"+code); e.printStackTrace(); } } /** * 通用传入文字生成图片 * @param width 图片宽度 * @param height 图片高度 * @param s 生成图片的文字 * @return BufferedImage对象 */ public static BufferedImage createImage(int width, int height, String s) { Font font = new Font("Serif", Font.BOLD, 10); BufferedImage bi = new BufferedImage(width, height, BufferedImage.TYPE_INT_RGB); Graphics2D g2 = (Graphics2D)bi.getGraphics(); g2.setBackground(Color.WHITE); g2.clearRect(0, 0, width, height); g2.setPaint(Color.BLACK); FontRenderContext context = g2.getFontRenderContext(); Rectangle2D bounds = font.getStringBounds(s, context); double x = (width - bounds.getWidth()) / 2; double y = (height - bounds.getHeight()) / 2; double ascent = -bounds.getY(); double baseY = y + ascent; g2.drawString(s, (int)x, (int)baseY); return bi; }