本文共 4389 字,大约阅读时间需要 14 分钟。
java之图形绘制:
package login;import java.awt.BasicStroke;import java.awt.Font;import java.awt.Graphics;import java.awt.Graphics2D;import java.awt.Image;import java.awt.Toolkit;import java.awt.image.BufferedImage;import java.awt.image.ImageObserver;import java.io.IOException;import java.io.InputStream;import java.util.Random;import javax.imageio.ImageIO;import javax.servlet.ServletException;import javax.servlet.annotation.WebServlet;import javax.servlet.http.HttpServlet;import javax.servlet.http.HttpServletRequest;import javax.servlet.http.HttpServletResponse;/** * Servlet implementation class CreateImageServlet * 服务器端绘图,输出到浏览器 */@WebServlet("/CreateImageServlet")public class CreateImageServlet extends HttpServlet { private static final long serialVersionUID = 1L; /** * @see HttpServlet#HttpServlet() */ public CreateImageServlet() { super(); // TODO Auto-generated constructor stub } /** * @see HttpServlet#doGet(HttpServletRequest request, HttpServletResponse response) */ /* (non-Javadoc) * @see javax.servlet.http.HttpServlet#doGet(javax.servlet.http.HttpServletRequest, javax.servlet.http.HttpServletResponse) */ /* (non-Javadoc) * @see javax.servlet.http.HttpServlet#doGet(javax.servlet.http.HttpServletRequest, javax.servlet.http.HttpServletResponse) */ /* (non-Javadoc) * @see javax.servlet.http.HttpServlet#doGet(javax.servlet.http.HttpServletRequest, javax.servlet.http.HttpServletResponse) */ /* (non-Javadoc) * @see javax.servlet.http.HttpServlet#doGet(javax.servlet.http.HttpServletRequest, javax.servlet.http.HttpServletResponse) */ protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException { // 图形大小int width=100,height=30;// 建立内存图像BufferedImage image = new BufferedImage(width,height,BufferedImage.TYPE_INT_RGB);// 从图像中取得图形对象,也就是画笔Graphics g = image.getGraphics();//设置画笔粗细BasicStroke stroke = new BasicStroke(3); // 创建宽度是3的笔画对象//从上面的代码可以建立一个内存图像,并从中取得Graphics对象。我们知道,所有的图形都是以Graphics对象来绘制的,//例如,画一个方框的代码如下://设置矩形的边框颜色,要在绘制之前设置//g.setColor(Color.GREEN); 在坐标为(10,10)的位置画一个大小为100*100大小的方框,//g.drawRect(10,10,100,100);Random r = new Random();//随机数设置填充的颜色//g.setColor(new Color(r.nextInt(255),r.nextInt(255),r.nextInt(255))); 绘制填充矩形//g.fillRect(10,10,80,80); 设置文字颜色 ,这个设置在fillRect()之后,对之前的不其作用,只对下面的绘制起作用//g.setColor(new Color(120,50,220)); //设置字体Font font=new Font("宋体",Font.BOLD,16);g.setFont(font);生成随机数String number = String.valueOf(r.nextInt(99999)); //画到图片上g.drawString(number,15, 25);//吧文字绘制到图型上绘制直线g.drawLine(50, 50, 200, 250);/** * // 1. 绘制一条圆弧: 椭圆的外切矩形 左上角坐标为(0, 0), 宽100, 高100, // 弧的开始角度为0度, 需要绘制的角度数为-90度, // 椭圆右边水平线为0度, 逆时针为正角度, 顺时针为负角度 * * * */绘制弧形//g.setColor(Color.RED);//g.drawArc(0, 0, 100, 100, 0, -90);绘制圆形//g.drawArc(120, 20, 100, 100, 0, 360);//g.setColor(Color.BLUE);//绘制椭圆//g.fillOval(120, 100, 100, 150);//绘制图片Image imag = Toolkit.getDefaultToolkit().getImage("48.png");System.out.println(imag);g.drawImage(imag, 5, 5,null);//图形绘制好后,下一步就是将图形输出到web。// 将ContentType设为"image/jpeg", 以让浏览器识别图像格式。 response.setContentType("image/jpeg");//输出方法一: 建立JPEG图像编码器,将BufferedImage编码成jpeg格式输出到response的输出流。//JPEGImageEncoder encoder=JPEGCodec.createJPEGEncoder(response.getOutputStream());//JPEGEncodeParam param = encoder.getDefaultJPEGEncodeParam(image);//param.setQuality(1.0F, true);// encoder.encode(image, param);输出方法二:在jdk1.4开始,引入了一个新的imageio库,提供了一个新的工具类ImageIO来进行图像的输出和输出操作。使用ImageIO进行图像的输出操作,可使代码更加简洁,如下:ImageIO.setUseCache(false);// 将图像以jpg格式写入到输出流。ImageIO.write(image, "jpg", response.getOutputStream()); } /** * @see HttpServlet#doPost(HttpServletRequest request, HttpServletResponse response) */ protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException { // TODO Auto-generated method stub doGet(request, response); } /** * 绘制缩略图 * @param inputstream * @throws Exception * 所谓缩略图就是将原图以一定比例缩小 */ public void drawReduceImage(InputStream inputstream) throws Exception { // 读入原始图的image对象 BufferedImage src = ImageIO.read(inputstream); // 得到原图的宽度和高度 int wideth=src.getWidth(); int height=src.getHeight(); // 生成原图1/2大小的内存图像,你也可以指定固定大小 BufferedImage taget = new BufferedImage(wideth/2,height/2,BufferedImage.TYPE_INT_RGB); // 将原图绘制在缩小后的内存图像上 taget.getGraphics().drawImage(src,0,0,wideth/2,height/2,null); }}
转载地址:http://vmmgi.baihongyu.com/