您的位置:首页 > 编程语言 > Java开发

Java服务器端图形编程

2004-07-26 10:41 429 查看

Java服务器端图形编程

作者:陈先波(turbochen@163.com)

日期:2004/7/24

来源:www.JavaGarden.net

本文将就如何输出图形到web,包括将数据库中的图形输出到web、如何***缩略图、自绘图形等方面来介绍服务器端的图形编程。

在Web上绘图

我们先从最简单的开始. 在服务器端画图不像在客户端程序里,可以提供JFrame或JPane来作为画布作图。对于服务器端,访问者是通过浏览器来访问服务器,服务器上显示的JFrame用户是看不到的。

好在Java为我们提供了BufferedImage类,可以让我们在内存中画图。画完图将其送到web端显示就行了。

// 图形大小
int width=400,height=400;
// 建立内存图像
BufferedImage image = new BufferedImage(width,height,BufferedImage.TYPE_INT_RGB);
// 从图像中取得图形对象
Graphics g = image.getGraphics();

从上面的代码可以建立一个内存图像,并从中取得Graphics对象。我们知道,所有的图形都是以Graphics对象来绘制的。例如,画一个方框的代码如下:

// 在坐标为(10,10)的位置画一个大小为100*20大小的方框,
g.drawRect(10,10,100,20);

具体Graphics类的用法,请参考相关书籍。在此不作介绍了。

图形绘制好后,下一步就是将图形输出到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进行图像的输出操作,可使代码更加简洁,如下:

// 关闭缓存(缺省情况下是开启的)。在实际应用中我们发现,
// 如果不关闭缓存,在IE5.5上可能无法正常运行本程序。
// 而IE5.0和IE6.0则不会有问题。
ImageIO.setUseCache(false);
// 将图像以jps格式写入到输出流。
ImageIO.write(image, "jpg", response.getOutputStream());

OK, 至此,我们绘制的图形就可以显示在客户端的浏览器上了。以下是演示程序输出的效果图:



完整的jsp演示程序,请点击下载

从数据库取得图片并在上面写字

一般我们将图片以二进制格式存在数据库中。借助ImageIO的read方法,我们可以直接将数据库中的图片生成BufferedImage.

// 这里我们假设在数据库表tabimage中有一个myimage字段存放有图片。
PreparedStatement ps = conn.prepareStatement("SELECT myimage FROM tblimage WHERE id=119");
ResultSet rs = ps.executeQuery();
InputStream data = null;
if (rs.next())
{
// 取得图片的输入流
data = rs.getBinaryStream("signet");
}
rs.close();
ps.close();
if (data == null) {
conn.close();
return null;
}

ImageIO.setUseCache(false);
// 将图片读入到BufferedImage对象中。
BufferedImage image = ImageIO.read(data);
conn.close();
// 取得图像的graphics对象,
Graphics graphics = image.createGraphics()
// 通过graphics对象在图片上写上文字
graphics.drawString("Hello World!",10,10);

余下的代码就是将图像输出,请参考前面的例子。由于这个例子涉及到数据库的操作,无法给出完整的例子。

***缩略图

在很多在线购物的网站,通常将商品的介绍图片以缩略图的形式显示在商品目录清单中,用户点击缩略图后再弹出商品的详细内容及原始图片。

所谓缩略图就是将原图以一定比例缩小。同样,借助ImageIO, 我们先从数据库(或文件)读入一个图片(参考上面的例子),

// 读入原始图的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);

剩下的工作就是输出缩略图了,在此不再累述。

参考资源

更多相关内容,请访问JavaGarden.net
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: