画饼图

<%@ page language="java" contentType="image/png;charset=GB2312"
    import="java.awt.*"
    import="javax.imageio.*"
    import="java.awt.geom.*"
    import="java.awt.image.*"
    import="java.text.*"
%>
<%!
    
// 绘制饼图的说明

    public void drawTips(String tips, Color color, Arc2D.Double arc2d, Graphics2D g2d)
    {    
         Arc2D.Double position = arc2d;

         position.setAngleExtent(arc2d.getAngleExtent()/2);
         position.x = arc2d.x - 15;
         position.y = arc2d.y - 15;
         position.width = arc2d.getWidth() + 30 ;
         position.height = arc2d.getHeight() + 30;
         Point2D.Double startPoint =
             (Point2D.Double)position.getStartPoint();
         Point2D.Double endPoint = (Point2D.Double)position.getEndPoint();

         g2d.setPaint(color);
        
         int stringLength = g2d.getFontMetrics().stringWidth(tips);
        
         if (endPoint.x <= arc2d.getCenterX())
            g2d.drawString(tips, (float)endPoint.x - stringLength, (float)endPoint.y);
         else
            g2d.drawString(tips, (float)endPoint.x , (float)endPoint.y );
    }
%>

<%
// 清空缓冲区

response.reset();

// 注意这里的MIME类型

response.setContentType("image/png");

// 创建一个 500X375 的图像

int width = 500, height = 375;

BufferedImage image = new BufferedImage(width, height,
  BufferedImage.TYPE_INT_RGB);

// 创建Java2D对象

Graphics2D g2d = image.createGraphics();

// 填充整个背景

g2d.setPaint(Color.WHITE);
g2d.fillRect(0, 0, width, height);

// 绘制阴影,由灰色渐进圆角矩形组成

GradientPaint grayGP = new GradientPaint(0, 0, Color.GRAY,
    width, height, new Color(218, 214, 212), false);
g2d.setPaint(grayGP);
RoundRectangle2D.Float bgRR =
    new RoundRectangle2D.Float(5, 5, width-5, height-5 , 50, 50);
g2d.fill(bgRR);

// 绘制渐进蓝色圆角矩形背景

GradientPaint blueGP = new GradientPaint(0, 0, new Color(25, 67, 117),
    width/2, height/2, new Color(12, 104, 151), true);
g2d.setPaint(blueGP);
g2d.fillRoundRect(0, 0, width - 5, height - 5, 50, 50);

// 绘制深蓝色圆角矩形轮廓

BasicStroke bs = new BasicStroke(1.2f);
g2d.setStroke(bs);
g2d.setPaint(new Color(55,71, 105));
g2d.drawRoundRect(0, 0, width -5, height -5, 50, 50);

// 绘制图表标题

String chartTitle = "编程类图书销售量统计饼图";
g2d.setColor(Color.ORANGE);
g2d.setFont(new Font("汉鼎繁淡古", Font.PLAIN, 30));
int stringLength = g2d.getFontMetrics().stringWidth(chartTitle);
g2d.drawString(chartTitle, (width - stringLength) / 2, 25 );

// 定义圆弧

Arc2D.Double arc2d = new Arc2D.Double();

double startAngle = 30.0, arcAngle = 0.0;
double rectWidth = 320.0, rectHeight = 280.0;
Point2D.Double p2d = new Point2D.Double((width - rectWidth)/2, 70.0);
int arcType = Arc2D.PIE;

// 声明绘制数据

String bookTitle[] = {"Python", "JAVA", "C#", "Perl", "PHP"};
Color color[] = new Color[5];
color[0] = new Color(99,99,0);
color[1] = new Color(255,169,66);
color[2] = new Color(33,255, 66);
color[3] = new Color(33,0,255);
color[4] = new Color(255,0,66);

double bookSales[] = new double[5];
double totalSales = 0.0 ;
double proportion = 0.0;

for (int i=0; i< bookSales.length; i++)
{
    bookSales[i] = 1 + Math.random() * 99;
    totalSales += bookSales[i];
}

for(int i = 0 ; i < bookTitle.length; i++)
{
    arcAngle = bookSales[i]*360 / totalSales;
    proportion = bookSales[i]/totalSales * 100 ;

       g2d.setColor( color[i] );
    arc2d = new Arc2D.Double(p2d.x, p2d.y, rectWidth,
        rectHeight, startAngle, arcAngle, arcType);
      
    
// 填充圆弧

    g2d.fill( arc2d) ;

    
// 描绘圆弧轮廓

    g2d.setStroke(new BasicStroke(1.2f));
    g2d.setPaint(Color.GRAY);
    g2d.draw(arc2d);

    
// 更新圆弧的起始角度

    startAngle += arcAngle;
   
    
// 格式化浮点数的输出格式

    DecimalFormat twoDigits = new DecimalFormat("0.00");
    g2d.setFont(new Font("Courier New", Font.PLAIN, 12));

    
// 绘制说明文字

    drawTips(bookTitle[i] + " "+twoDigits.format(proportion) + "%",
        Color.WHITE, arc2d, g2d);
}

// 部署图形

g2d.dispose();

// 利用ImageIO类的write方法对图像进行编码

ServletOutputStream sos = response.getOutputStream();
ImageIO.write(image, "PNG", sos);
sos.close();
%>

你可能感兴趣的:(编程,PHP,python,perl,360)