java graphics绘制图形并在jsp页面以<img>显示出来

7 篇文章 0 订阅

很开心,在不怎么熟悉java、Graphics等情况下,折腾了好几天的绘图,终于实现了所希望的绘图效果,期间研究了一下JFreeChart、Servlet好像都比较复杂或者不容易实现,其中(1)JFreeChart感觉是在Graphics或其他类的基础上的再开发,如果所涉及的图形刚好同这个类图中的图形是同一类,使用起来非常方便,但是如果在该类库中找不到同类型的图,那么就无法用这个类库了;(2)Servlet好像比较灵活,但是对它不是太熟悉,数据传入和图形网页显示不是太理想。(3)最后还是Graphics好用啊,刚开始用Graphics生成BufferedImage后,就是无法将这个BufferedImage显示在网页上,即使使用ImageIO.write方法显示在网页上,网页上只能显示这一个图片,而不能显示其他的文本和对象,而通常一个网页上总是有很多文字或数据后再显示一个图片;最后在网上查找了一个帖子,将BufferedImage转换为64位的字节字符串(不知表述是否准确了,参考的帖子在后来的众多浏览网页中被淹没了),然后在jsp页面将这个字符串再转为图像,显示在<img>标识符内,测试一番,完美解决我的问题。

      可能还有更好的实现方案,就以后再说了。

主要步骤如下:

Step1. 设计绘图类并获得图形结果(图形结果为字符串的表现形式)

(1)设计java类和绘图方法,该方法中首先定义一个BufferedImage对象,然后利用Graphics类绘制图像;

(2)将图像写到64进制的输出流;

(3)将输出流形成字符串,保存或返回给调用函数;

Step2. 在jsp页面中调用上述图形的字符串,并转换为图形

示例代码如下:

1.类文件MyGraphic

public class MyGraphic(){
  public String createGant3() throws IOException{
      BufferedImage image=new BufferedImage(500,200,BufferedImage.TYPE_INT_RGB);     
      Graphics2D g=image.createGraphics();      
      g.setColor(Color.white); 
      g.fillRect(0, 0, 500,200);
      g.setColor(Color.GREEN);
      for(int i=0;i<10;i++){
        g.fillRect((int)(5+90*Math.random()), (int)(15*i), (int)(50+300*Math.random()), 10);
      }
      g.setRenderingHint(RenderingHints.KEY_TEXT_ANTIALIASING, RenderingHints.VALUE_TEXT_ANTIALIAS_LCD_HRGB);  //抗文字锯齿
      g.setColor(Color.red);
      
      g.setFont(new Font("黑体",Font.BOLD,14));
      g.drawString("I and my country 中文", 300, 170);
      //下面三行是将缓存图片转换为64进制的字符串,这样可以在jsp页面中调用这个字符串
      //重新生成图片
      ByteArrayOutputStream bo=new ByteArrayOutputStream();
      ImageIO.write(image,"jpeg",bo);
      String base64Str=Base64.getEncoder().encodeToString(bo.toByteArray());
      g.dispose();  
      return base64Str;
  }


}

2. testImg.jsp页面

<%@page import="org.freeie.common.MyGraphic"%>
<%@page contentType="text/html" pageEncoding="GB2312"%>
<!DOCTYPE html>
<html>
  <head>
    <meta http-equiv="Content-Type" content="text/html; charset=GB2312">
    <title>JSP Page</title>
  </head>
  <body>
    <h1>画个图看看</h1>   
    <%
      MyGraphic jg=new MyGraphic();    
      String str64=jg.createGant3();  
    %>
    <img src="https://img-blog.csdnimg.cn/2022010704190243124.jpeg">
    <p><font color="#FF0000">图后面显示点文字</font></p>
  </body>
</html>

执行jsp页面的结果如下:

 

  • 0
    点赞
  • 6
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

jiannywang

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值