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, 至此,我们绘制的图形就可以显示在客户端的浏览器上了。以下是演示程序输出的效果图:
![](http://blog.csdn.net/images/blog_csdn_net/turbochen/27914/r_drawing.jpg)
完整的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相关文章推荐
- 收集Eclipse插件网站
- JAVA開發工具
- JDK.1.4新特性及增强内容概要
- jbpm - java Business process management
- 用Java动态代理类实现记忆功能
- 使用javadoc规范java开发文档
- Some unsure problems about JCreator Pro
- [转载][翻译] 利用JSF、SpringFramework和Hibernate构建Web应用的实例讲述
- jGuru: Exercises: Enterprise JavaBeans Technology Fundamentals
- 这几天的心情不好,感觉没有了目标。公司里面乱的很,一切都在变!
- JAVA学习之路
- 再谈 .NET 和 Java
- JAVA生成JPG缩略图
- 日期格式化类SimpleDateFormat
- j2ee疑难解决实例
- 关于Java编译的问题
- 用javascritp脚本在页面中传递参数和接受参数的方法
- 我想學習java
- 我是菜鸟,不会运行Java编译器。望指点一下
- Struts 与 MVC 模式