找回密码
 加入灵隐岛
查看: 869|回复: 10

破解一张集中了上万个MM的图片【转】

[复制链接]
发表于 2009-10-31 22:08:38 | 显示全部楼层 |阅读模式
看了Lucky的帖子(http://bbs.lingyi.org/thread-87506-1-2.html)之后,很想知道这个图片是怎么弄得,于是到网上搜了一下,把原理公布一下。虽然我看不太懂,希望有明白人。以下是转帖部分。

----------------------------------------------------------------------
我想大家在上论坛时可能都遇到过那种据说每回复一次就会更换一副新图片的贴子吧,而事实上你回复后也确实如此,但其实并不象你想象的那样,即使你不回复,每刷新一次页面那副图都会变,那为什么会这样呢?其实用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文件,然后你在页面中使用来调用,每次刷新就会出现不同的图片,当然偶尔也会出现相同的:)。其实这个原理很简单,将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(); }
发表于 2009-10-31 23:39:53 | 显示全部楼层
高手总是寂寞的~虽然咱不懂~但是咱能顶~
回复

使用道具 举报

发表于 2009-11-1 08:28:19 | 显示全部楼层
这是什么,看不明白啊
回复

使用道具 举报

发表于 2009-11-1 09:09:41 | 显示全部楼层
看不懂,凑个热闹
回复

使用道具 举报

发表于 2009-11-1 10:24:20 | 显示全部楼层
我是外行人
回复

使用道具 举报

发表于 2009-11-1 11:35:58 | 显示全部楼层
。。那啥。。到底想让咱们看啥?。。
回复

使用道具 举报

发表于 2009-11-1 14:02:39 | 显示全部楼层
一堆码!不明白!
回复

使用道具 举报

发表于 2009-11-3 23:14:35 | 显示全部楼层
不会玩代码。。。
回复

使用道具 举报

发表于 2009-11-4 03:48:16 | 显示全部楼层
这东西是在什么地方设置的?我不是很在行!LZ果然是高手!
回复

使用道具 举报

发表于 2009-11-4 08:11:22 | 显示全部楼层
楼主为什么不发个图啊,MS这也支持这种代码·
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 加入灵隐岛

本版积分规则

手机版|小黑屋|灵异志

GMT+8, 2024-10-13 18:23

Powered by Discuz! X3.5

© 2001-2023 Discuz! Team.

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