java之图形绘制:https://blog.csdn.net/xietansheng/article/details/55669157
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);
}
}