后面讲的一个解释都没有,完全不懂为什么
6. 获取文字上下文对象
FontRenderContext context = graphics.getFontRenderContext();
7. 绘制矩形对象
Rectangle2D bounds = font.getStringBounds(string , context);
9. 设置绘制文字的坐标和间距
double x = (width - bounds.getWidth()) / 2
double y = (height - bounds.getHeight()) / 2;
double ascent = bounds.getY();
double baseY = Y - ascent;
graphics.drawString(code,(int)x , (int)baseY);
10. 输出图片流到浏览器
graphics.dispose();
ImageIO.write(bufferedImage , "jpg" , response.getOutputStream())
response.flushBuffer();
return codeString
正在回答 回答被采纳积分+1
你好!有些内容是和图形学相关的内容,所以这里是根据开发经验进行的应用。
FontRenderContext的作用是正确测量文本所需的信息容器,getStringBounds用于获得文字的显示范围,通过6、7两条语句获取矩形对象,并把文字放进去,然后再去设置bounds的具体属性值。
x和y的坐标也可以不这么算,指定也可以,这里希望从宽高的一半开始设置。
bounds.getWidth是获得窗体矩形的宽度,bounds.getHeight是获得窗体矩形的高度,通过(width - bounds.getWidth())/2和(height - bounds.getHeight())/2计算出矩形在xy轴上的坐标。ascent是窗体矩形左上角的 Y 坐标,通过y-ascent就能算出窗体的准确y坐标,然后通过drawString方法进行绘制。
graphics.dispose();是为了销毁绘图中所用到的资源,就像文件输入输出流中的close()方法一样。
ImageIO的write方法的三个参数,bi可以理解成要输出的内容,也就是验证码,第二个参数是输出的格式,第三个参数是输出到哪里,这里是输出到浏览器中。
刷新buffer的作用,是可以手动刷新发送缓冲区的数据到客户端,也就是将新内容发送到客户端
祝学习愉快!
- 参与学习 人
- 提交作业 1088 份
- 解答问题 10205 个
如果你有Java语言基础,又想以后从事Java Web开发,那么本路径是你的不二选择!本路径从网页搭建开始入手,通过大量案例来学习Java Web基础。定能助你完成Java Web小白的蜕变!
了解课程
恭喜解决一个难题,获得1积分~
来为老师/同学的回答评分吧
0 星