Java学习者论坛

 找回密码
 立即注册

QQ登录

只需一步,快速开始

手机号码,快捷登录

恭喜Java学习者论坛(https://www.javaxxz.com)已经为数万Java学习者服务超过8年了!积累会员资料超过10000G+
成为本站VIP会员,下载本站10000G+会员资源,购买链接:点击进入购买VIP会员
JAVA高级面试进阶视频教程Java架构师系统进阶VIP课程

分布式高可用全栈开发微服务教程

Go语言视频零基础入门到精通

Java架构师3期(课件+源码)

Java开发全终端实战租房项目视频教程

SpringBoot2.X入门到高级使用教程

大数据培训第六期全套视频教程

深度学习(CNN RNN GAN)算法原理

Java亿级流量电商系统视频教程

互联网架构师视频教程

年薪50万Spark2.0从入门到精通

年薪50万!人工智能学习路线教程

年薪50万!大数据从入门到精通学习路线年薪50万!机器学习入门到精通视频教程
仿小米商城类app和小程序视频教程深度学习数据分析基础到实战最新黑马javaEE2.1就业课程从 0到JVM实战高手教程 MySQL入门到精通教程
查看: 286|回复: 0

[图像处理学习]Java服务器端图形编程

[复制链接]
  • TA的每日心情
    开心
    2021-3-12 23:18
  • 签到天数: 2 天

    [LV.1]初来乍到

    发表于 2014-10-31 23:57:11 | 显示全部楼层 |阅读模式
    java服务器端图形编程
    作者:陈先波(turbochen@163.com) 日期:2004/7/24 来源:http://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
    回复

    使用道具 举报

    您需要登录后才可以回帖 登录 | 立即注册

    本版积分规则

    QQ|手机版|Java学习者论坛 ( 声明:本站资料整理自互联网,用于Java学习者交流学习使用,对资料版权不负任何法律责任,若有侵权请及时联系客服屏蔽删除 )

    GMT+8, 2024-5-18 23:03 , Processed in 0.367486 second(s), 50 queries .

    Powered by Discuz! X3.4

    © 2001-2017 Comsenz Inc.

    快速回复 返回顶部 返回列表