每回必变,绝不骗人!

34
回复
1982
查看
[复制链接]
发表于 2005-6-26 22:20:00 | 显示全部楼层 |阅读模式
 

我想大家在上论坛时可能都遇到过那种据说每回复一次就会更换一副新图片的贴子吧,而事实上你回复后也确实如此,但其实并不象你想象的那样,即使你不回复,每刷新一次页面那副图都会变,那为什么会这样呢?其实用Servlet来实现这种效果是非常简单的。下面大家看看下面的代码:

import java.awt.Color;import java.awt.Graphics;import java.awt.image.BufferedImage;import java.io.File;import java.io.FileInputStream;import java.io.IOException;import java.io.InputStream; import javax.servlet.Servlet;import javax.servlet.ServletException;import javax.servlet.ServletOutputStream;import javax.servlet.http.HttpServlet;import javax.servlet.http.HttpServletRequest;import javax.servlet.http.HttpServletResponse;import com.sun.image.codec.jpeg.JPEGCodec;import com.sun.image.codec.jpeg.JPEGImageDecoder;import com.sun.image.codec.jpeg.JPEGImageEncoder;

public class CreateImage extends HttpServlet implements Servlet { public void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException { response.setHeader("Cache-Control","no-store"); response.setContentType("image/jpeg"); ServletOutputStream out=response.getOutputStream(); String imagePath=request.getSession().getServletContext().getRealPath("images")+"\\"+getRandom()+".jpg"; InputStream imageIn = new FileInputStream(new File(imagePath)); JPEGImageDecoder decoder = JPEGCodec.createJPEGDecoder(imageIn); BufferedImage image = decoder.decodeAsBufferedImage(); JPEGImageEncoder encoder = JPEGCodec.createJPEGEncoder(out); encoder.encode(image); out.close(); } public String getRandom(){ int i1 = (int)(java.lang.Math.random()*10); int i2 = (int)(java.lang.Math.random()*10); return String.valueOf(i1)+String.valueOf(i2); }}

在Images目录下放入100个从00-99命名的jpg文件,然后你在页面中使用<image src="CreateImage">来调用,每次刷新就会出现不同的图片,当然偶尔也会出现相同的:)。其实这个原理很简单,将Servlet的类型设为图片型,然后每次随机以流的形式取出一副jpg文件,然后再输出出去。一般论坛上面使用的也都是这种类型的,不信你把把这副图片的网络地址以插入图片的形式加到你的贴子里试试。
当然有时我们可能会想在图片上动态加入一些文字,那应该怎么,其实也很简单,就是利用Graphics这个类来对图片内容进行修改,如下:
import java.awt.Color;import java.awt.Graphics;import java.awt.image.BufferedImage;import java.io.File;import java.io.FileInputStream;import java.io.IOException;import java.io.InputStream;
import javax.servlet.Servlet;import javax.servlet.ServletException;import javax.servlet.ServletOutputStream;import javax.servlet.http.HttpServlet;import javax.servlet.http.HttpServletRequest;import javax.servlet.http.HttpServletResponse;import com.sun.image.codec.jpeg.JPEGCodec;import com.sun.image.codec.jpeg.JPEGImageDecoder;import com.sun.image.codec.jpeg.JPEGImageEncoder;public class CreateImage extends HttpServlet implements Servlet { public void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException { response.setHeader("Cache-Control","no-store"); response.setContentType("image/jpeg"); ServletOutputStream out=response.getOutputStream(); String imagePath=request.getSession().getServletContext().getRealPath("images")+"\\01.jpg"; InputStream imageIn = new FileInputStream(new File(imagePath)); JPEGImageDecoder decoder = JPEGCodec.createJPEGDecoder(imageIn); BufferedImage image = decoder.decodeAsBufferedImage(); Graphics g = image.getGraphics(); g.setColor(new Color(255,0,0)); //更改输出字体的颜色 g.setFont(new Font("Default",Font.BOLD,30)); //更改字体大小 g.drawString("Hello",30,100); //在图片上坐标0,13的位置上输出"Hello everyone!" JPEGImageEncoder encoder = JPEGCodec.createJPEGEncoder(out); encoder.encode(image); out.close(); }

[此贴子已经被作者于2005-8-14 0:14:20编辑过]
 
发表于 2005-6-26 22:27:00 | 显示全部楼层
 
怎么回事?真有意思。
 
发表于 2005-6-27 09:01:00 | 显示全部楼层
 
让我瞧瞧??
 
发表于 2005-6-27 09:05:00 | 显示全部楼层
 
哈哈,真奇妙!我看到好多张呢,你看到几张呢?有窍门哦!!
 
发表于 2005-6-27 09:33:00 | 显示全部楼层
 
奇怪[em06]
 
发表于 2005-6-27 09:36:00 | 显示全部楼层
 
看看
 
发表于 2005-6-27 09:36:00 | 显示全部楼层
 
厉害
 
发表于 2005-6-27 09:36:00 | 显示全部楼层
 
高招
 
发表于 2005-6-27 10:18:00 | 显示全部楼层
 
??
 
发表于 2005-6-27 11:56:00 | 显示全部楼层
 
漂亮!
 
发表于 2005-6-27 12:28:00 | 显示全部楼层
 
看看
 
发表于 2005-6-27 12:28:00 | 显示全部楼层
 
再看看
 
发表于 2005-6-27 12:41:00 | 显示全部楼层
 

瞅瞅

 
发表于 2005-6-27 12:42:00 | 显示全部楼层
 
再来瞅
 
发表于 2005-6-27 12:42:00 | 显示全部楼层
 
啊。我得看下有几张?
 
发表于 2005-6-27 18:33:00 | 显示全部楼层
 

瞅瞅!

 
发表于 2005-6-27 18:35:00 | 显示全部楼层
 

看第二张,不是应该是第三张!

 
发表于 2005-6-27 18:42:00 | 显示全部楼层
 
哈哈哈哈哈哈哈哈哈原来如此,先还数到102就把数数错了,法师啊厉害!
 
发表于 2005-6-27 21:55:00 | 显示全部楼层
 

老法师这种办法是让大家必须回帖,还得多回才行。这样帖子的人气就旺了。

哈哈,我给老法师破了这招。大家不用回帖,只不断刷新就行了。

不过我试了,看了几张美女,突然看到了一张人头部的医学解剖图,真是大煞风景。

 
发表于 2005-6-27 23:10:00 | 显示全部楼层
 
以下是引用许启虎在2005-6-27 21:55:00的发言:老法师这种办法是让大家必须回帖,还得多回才行。这样帖子的人气就旺了。哈哈,我给老法师破了这招。大家不用回帖,只不断刷新就行了。不过我试了,看了几张美女,突然看到了一张人头部的医学解剖图,真是大煞风景。

好哇,竟然破我法术!

 
 楼主| 发表于 2005-7-4 22:12:00 | 显示全部楼层
 
不错!不错![em01][em01][em01]
 
发表于 2005-7-22 22:14:00 | 显示全部楼层
 
看不见
 
发表于 2005-7-23 22:18:00 | 显示全部楼层
 
[em16][em16][em16]
 
发表于 2005-7-27 08:59:00 | 显示全部楼层
 
我看看
 
发表于 2005-8-6 21:20:00 | 显示全部楼层
 
[em09]也看看去[em09]这是你吗?不相啊!
 
您需要登录后才可以回帖 登录 | 免费注册

本版积分规则

产品推荐

关注

关注我们可获取更多免费资讯,获得更多学习资料
公众号
公众号
咨询热线:027-88881234
CopyRight © www.hongxiao.com. 武汉火笛文化发展有限公司鄂ICP备2022013670号-1
Powered by Discuz! X3.4