《网络编程生成图像.ppt》由会员分享,可在线阅读,更多相关《网络编程生成图像.ppt(16页珍藏版)》请在taowenge.com淘文阁网|工程机械CAD图纸|机械工程制图|CAD装配图下载|SolidWorks_CaTia_CAD_UG_PROE_设计图分享下载上搜索。
1、第第 6 章章生成图像生成图像本章要点 在服务器端产生一个二进制的图像数据,并传给在服务器端产生一个二进制的图像数据,并传给浏览器显示的技术。浏览器显示的技术。HTTP协议中的协议中的MIME类型类型Servlet向客户端返回向客户端返回MIME类型(图像)类型(图像)在服务器端生成统计图形在服务器端生成统计图形将图形转化成将图形转化成JPEG格式格式生成动态图形以及传输图形实例(三种方式)生成动态图形以及传输图形实例(三种方式)见见Word文档文档JavaJava中中面向面向WebWeb的图形的图形 产生图形有两种方式产生图形有两种方式:(1)在)在客户端客户端Applet中产生图形中产生图
2、形。要求客户端支持要求客户端支持Applet。动态改变显示在动态改变显示在客户端的图形。客户端的图形。-地理监控、联网游戏地理监控、联网游戏(2)在)在服务器端服务器端产生图形。产生图形。简单,可传递参数内容,动态地从服务器简单,可传递参数内容,动态地从服务器上产生图形,缺点是图形一经下载不能再被上产生图形,缺点是图形一经下载不能再被改变。改变。-网上报表系统网上报表系统HTTP协议中的MIME类型MIME(Multipurpose Internet Mail Extension)全称为)全称为多用途网际邮件扩展多用途网际邮件扩展。使用使用Internet邮件标准传输多媒体数据邮件标准传输多媒
3、体数据。服务器端向客户端发送每个文件时,在头部服务器端向客户端发送每个文件时,在头部包含了描述包含了描述文件类型文件类型的信息。的信息。MIME的形式:类型的形式:类型/子类型子类型通用文件组类型文件组的一个具体类型 例如:例如:Image/jpeg:客户端程序把收到的数据作为图形显示。客户端程序把收到的数据作为图形显示。Image/gif:作为作为gif格式的图形显示。格式的图形显示。Audio/aiff:作为音频流来播放。作为音频流来播放。Application/msword:作为一个作为一个Word文档来打开。文档来打开。Text/html:表示给浏览器的是一个表示给浏览器的是一个HTM
4、L网页。网页。MIME的类型和子类型是的类型和子类型是在在Content-type头域中描述头域中描述。P36 表表4-1 常用的常用的MIME中有关图形和声音的类型和子中有关图形和声音的类型和子类型类型Servlet向客户端返回MIME类型 通过通过响应对象响应对象的的setContentType(String)方法方法来指定来指定MIME类型:类型:static final private String CONTENT_TYPE=image/jpeg;response.setContentType(CONTENT_TYPE);/指定指定MIME类型类型响应的响应的MIME类型只能指定一次。
5、当指定非文类型只能指定一次。当指定非文本的本的MIME类型后,不能再指定文本类型。类型后,不能再指定文本类型。Servlet向客户端返回二进制数据不能使用针对文本的不能使用针对文本的PrintWrite对象。对象。Servlet API中提供了响应对象的中提供了响应对象的getOutputStream()返回一个返回一个OutputStream对象,利用该对象对象,利用该对象写入写入字节数组字节数组,将图像传给客户端。,将图像传给客户端。操作前先把图像流转化成二进制数组ByteArrayOutputStream byteOut=new ByteArrayOutputStream();Outpu
6、tStream Out=res.getOutputStream();encoder=JPEGCodec.createJPEGEncoder(byteOut);encoder.encode(img);byte buf=byteOut.toByteArray();byteOut.close();res.setContentLength(buf.length);Out.write(buf);Out.close();在服务器端生成统计图形相关类:相关类:设计模式设计模式为标准的为标准的MVC模式。模式。(1)数据类数据类-所有统计图形的数据源;所有统计图形的数据源;(MODEL)(2)绘图类)绘图类-
7、根据数据类生成具体的统计图形;根据数据类生成具体的统计图形;(VIEW)(3)控制类控制类-负责从客户端得到生成统计数据所负责从客户端得到生成统计数据所需的参数,以及将产生的图形需的参数,以及将产生的图形(GIF或或JPEG)传送到传送到客户端。客户端。(Control)该类一般由该类一般由Servlet完成。完成。SunSun公司公司没有没有提供提供ImageImage或或BufferedImageBufferedImage编码成编码成GIFGIF图形的类图形的类。在非标准在非标准Java类库中,提供了将类库中,提供了将BufferedImage编码成编码成JPEG图形的实用类。图形的实用类
8、。例中用例中用Sun公司的公司的com.sun.image.codec.jpeg包产生包产生JPEG图形。图形。GIF编码的工具包:编码的工具包: (1 1)在)在JavaJava中将图形绘制出来中将图形绘制出来。绘图的绘图的API在在Java.awt.*包中。一般图像用包中。一般图像用Image对象表示,对图形进行编码需要对象表示,对图形进行编码需要BufferedImage对象,该对象是对象,该对象是Image的子类。的子类。/建立建立BufferedImage图形形对象对象protected BufferedImage createImage(int w,int h,Color bg)B
9、ufferedImage img=new BufferedImage(w,h,BufferedImage.TYPE_INT_RGB);Graphics g=img.getGraphics();/取得图形环境取得图形环境 g.setColor(bg);g.fillRect(0,0,w,h);return img;静态常量静态常量TYPE_INT_RGB是产生是产生JPEG图形必须的图形必须的。可在该环境上绘图可在该环境上绘图产生条形图产生条形图 主要利用两种绘图方法:主要利用两种绘图方法:void drawRect(int x,int y,int width,int height);void f
10、illRect(int x,int y,int width,int height);void setColor(Color c);void drawString(String s,int x,int y);Java 的图形环境提供了一系列的绘图方法的图形环境提供了一系列的绘图方法。例中绘制条形图,使用例中绘制条形图,使用数组数组DataArray作为数据源作为数据源。int DataArray =120,100,60,200;产生饼形图 使用使用Graphics对象的两种方法:对象的两种方法:void fillArc(int x,int y,int width,int height,int s
11、tartAngle,int angle);/填充扇形区域填充扇形区域void drawLine(int x1,int x2,int y1,int y2);/用来绘制每个扇形区域的边缘用来绘制每个扇形区域的边缘例中绘制条形图,仍使用例中绘制条形图,仍使用数组数组DataArray作作为数据源。为数据源。将绘制的图形转化成JPEG格式 创建了创建了ImageImage或者或者BufferedImageBufferedImage对象,并绘对象,并绘制好图形后,需要将其转化成制好图形后,需要将其转化成GIFGIF、JPEGJPEG或或MIMEMIME规定的其它图形类型,才能在浏览器中规定的其它图形类型,才能在浏览器中显示显示。转换后转换后buf字节数组中存储了字节数组中存储了JPEG格式的图格式的图形信息,可保存成文件,也可发送到浏览器形信息,可保存成文件,也可发送到浏览器显示。显示。转换成JPEG格式的代码 ByteArrayOutputStream byteOut=new ByteArrayOutputStream();encoder=JPEGCodec.createJPEGEncoder(byteOut);/建立编码对象建立编码对象encoder.encode(img);/将将img编码为编码为JPEG格格式式byte buf=byteOut.toByteArray();