找回密码
 立即注册
搜索
热搜: 活动 交友 discuz
查看: 3906|回复: 3

教你制作回贴就变的图片

[复制链接]
发表于 2006-6-27 22:54:30 | 显示全部楼层 |阅读模式
回贴就变的图,现在在论坛里很吃香的。其实并不象你想象的那样,回贴就变。即使你不回复,每刷新一次页面那副图都会变,那为什么会这样呢?其实用Servlet来实现这种效果是非常简单的。看看下面的代码: <br /><br />import java&#46;awt&#46;Color;import java&#46;awt&#46;Graphics;import java&#46;awt&#46;image&#46;BufferedImage;import java&#46;io&#46;File;import java&#46;io&#46;FileInputStream;import java&#46;io&#46;IOException;import java&#46;io&#46;InputStream; import javax&#46;servlet&#46;Servlet;import javax&#46;servlet&#46;ServletException;import javax&#46;servlet&#46;ServletOutputStream;import javax&#46;servlet&#46;http&#46;HttpServlet;import javax&#46;servlet&#46;http&#46;HttpServletRequest;import javax&#46;servlet&#46;http&#46;HttpServletResponse;import com&#46;sun&#46;image&#46;codec&#46;jpeg&#46;JPEGCodec;import com&#46;sun&#46;image&#46;codec&#46;jpeg&#46;JPEGImageDecoder;import com&#46;sun&#46;image&#46;codec&#46;jpeg&#46;JPEGImageEncoder; <br /><br />public class CreateImage extends HttpServlet implements Servlet { public void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException { response&#46;setHeader(&quot;Cache-Control&quot;,&quot;no-store&quot;); response&#46;setContentType(&quot;image/jpeg&quot;); ServletOutputStream out=response&#46;getOutputStream(); String imagePath=request&#46;getSession()&#46;getServletContext()&#46;getRealPath(&quot;images&quot;)+&quot;\\&quot;+getRandom()+&quot;&#46;jpg&quot;; InputStream imageIn = new FileInputStream(new File(imagePath)); JPEGImageDecoder decoder = JPEGCodec&#46;createJPEGDecoder(imageIn); BufferedImage image = decoder&#46;decodeAsBufferedImage(); JPEGImageEncoder encoder = JPEGCodec&#46;createJPEGEncoder(out); encoder&#46;encode(image); out&#46;close(); } public String getRandom(){ int i1 = (int)(java&#46;lang&#46;Math&#46;random()*10); int i2 = (int)(java&#46;lang&#46;Math&#46;random()*10); return String&#46;valueOf(i1)+String&#46;valueOf(i2); }} <br /><br />在Images目录下放入100个从00-99命名的jpg文件,然后你在页面中使用&lt;image src=&quot;CreateImage&quot;&gt;来调用,每次刷新就会出现不同的图片,当然偶尔也会出现相同的:)。其实这个原理很简单,将Servlet的类型设为图片型,然后每次随机以流的形式取出一副jpg文件,然后再输出出去。一般论坛上面使用的也都是这种类型的,不信你把把这副图片的网络地址以插入图片的形式加到你的贴子里试试。 <br />当然有时我们可能会想在图片上动态加入一些文字,那应该怎么,其实也很简单,就是利用Graphics这个类来对图片内容进行修改,如下: <br />import java&#46;awt&#46;Color;import java&#46;awt&#46;Graphics;import java&#46;awt&#46;image&#46;BufferedImage;import java&#46;io&#46;File;import java&#46;io&#46;FileInputStream;import java&#46;io&#46;IOException;import java&#46;io&#46;InputStream; <br />import javax&#46;servlet&#46;Servlet;import javax&#46;servlet&#46;ServletException;import javax&#46;servlet&#46;ServletOutputStream;import javax&#46;servlet&#46;http&#46;HttpServlet;import javax&#46;servlet&#46;http&#46;HttpServletRequest;import javax&#46;servlet&#46;http&#46;HttpServletResponse;import com&#46;sun&#46;image&#46;codec&#46;jpeg&#46;JPEGCodec;import com&#46;sun&#46;image&#46;codec&#46;jpeg&#46;JPEGImageDecoder;import com&#46;sun&#46;image&#46;codec&#46;jpeg&#46;JPEGImageEncoder;public class CreateImage extends HttpServlet implements Servlet { public void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException { response&#46;setHeader(&quot;Cache-Control&quot;,&quot;no-store&quot;); response&#46;setContentType(&quot;image/jpeg&quot;); ServletOutputStream out=response&#46;getOutputStream(); String imagePath=request&#46;getSession()&#46;getServletContext()&#46;getRealPath(&quot;images&quot;)+&quot;\\01&#46;jpg&quot;; InputStream imageIn = new FileInputStream(new File(imagePath)); JPEGImageDecoder decoder = JPEGCodec&#46;createJPEGDecoder(imageIn); BufferedImage image = decoder&#46;decodeAsBufferedImage(); Graphics g = image&#46;getGraphics(); g&#46;setColor(new Color(255,0,0)); //更改输出字体的颜色 g&#46;setFont(new Font(&quot;Default&quot;,Font&#46;BOLD,30)); //更改字体大小 g&#46;drawString(&quot;Hello&quot;,30,100); //在图片上坐标0,13的位置上输出&quot;Hello everyone!&quot; JPEGImageEncoder encoder = JPEGCodec&#46;createJPEGEncoder(out); encoder&#46;encode(image); out&#46;close(); } <br /><br /><br />明白了吗?
回复

使用道具 举报

发表于 2006-7-6 12:08:16 | 显示全部楼层
有意思,强
回复

使用道具 举报

发表于 2007-9-28 13:26:39 | 显示全部楼层
经常看到别人用,我有机会也自己可以做一个了,谢谢楼主,
回复

使用道具 举报

发表于 2007-10-29 13:47:27 | 显示全部楼层
谢谢楼主
回复

使用道具 举报

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

本版积分规则

QQ|Archiver|手机版|小黑屋|腾飞在线 ( 冀ICP备05002530号 )

GMT+8, 2026-2-13 23:49 , Processed in 0.051535 second(s), 16 queries .

Powered by Discuz! X3.5

© 2001-2026 Discuz! Team.

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