QQ空间中的日志在不同用户的主页显示不同QQ号方法

思路:在发表日志的时候插入图片的时候插入一个图片链接,这个链接对应发布了的一个php或者jsp或者asp动态页面(在这个页面中动态生成图片)。在这个页面中,通过request把HTTP头中的referer取出,并且用正则表达式把里面用户的QQ号取出,再把QQ号写在一张自己准备的图片上。这样当QQ用户打开空间的时候,QQ的内部js库就会自动来请求自己写的这个链接,而返回的是我们处理过的图片,原理就这样简单。。。为了看着高端点,把请求链接弄个短网址的形式就OK了。(今天又看到有人转这个东西,遂研究了下。。望高手指教)

补充:QQ号得到了,利用腾讯开放的Api接口就可以得到用户的一些基本信息。(如头像,昵称等)

源码(页面CreateQQImage.jsp):

<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
<%@ page contentType="text/html; charset=UTF-8"  import="java.io.FileInputStream,java.awt.*,java.awt.image.*,java.util.regex.*,java.util.*,javax.imageio.*" %>

<%
//设置页面不缓存
response.setHeader("Pragma","No-cache");
response.setHeader("Cache-Control","no-cache");
response.setDateHeader("Expires", 0);
String FileName = request.getSession().getServletContext().getRealPath("/")+"Image/ok__.jpg";
  //创建一个FileInputStream对象从源图片获取数据流  
  FileInputStream sFile = new FileInputStream(FileName);


  //创建一个Image对象并以源图片数据流填充
 Image src = javax.imageio.ImageIO.read(sFile);  
// 在内存中创建图象
int width = src.getWidth(null); //得到源图宽  
 int height = src.getHeight(null); //得到源图长  
BufferedImage image = new BufferedImage(width, height, BufferedImage.TYPE_INT_RGB);


// 获取图形上下文
Graphics2D g = (Graphics2D) image.createGraphics();
//生成随机类
Random random = new Random();


// 设定背景色
g.fillRect(0, 0, width, height);


g.drawImage(src,0,0,width,height,null); 
//设定字体
g.setFont(new Font("宋体",Font.PLAIN,18));
Pattern p=Pattern.compile("http://user.qzone.qq.com/(\\d+)/infocenter");

String QQ = request.getHeader("Referer").replaceAll("[^\\d]*(\\d)[^\\d]*", "$1");
if(QQ.charAt(0)<='9' && QQ.charAt(0)>='0' && QQ.length()<13&&p.matcher(request.getHeader("Referer")).matches()){
//if(QQ.charAt(0)<='9' && QQ.charAt(0)>='0' && QQ.length()<13){//测试用
String msg="办证加QQ:";


for (int i=0;i<msg.length();i++){
  g.setFont(new Font("宋体", Font.BOLD, 16));
  // 将认证码显示到图象中
  g.setColor(Color.RED);
  
  g.drawString(msg.charAt(i)+"",16*i+6,200);
}
for (int i=0;i<QQ.length();i++){
  g.setFont(new Font("宋体", Font.BOLD, 16));
  // 将认证码显示到图象中
  g.setColor(Color.yellow);//
  
  g.drawString(QQ.charAt(i)+"",10*i+100,200);
}
msg="纯属搞笑";
for (int i=0;i<msg.length();i++){
  g.setFont(new Font("宋体", Font.BOLD, 12));
  // 将认证码显示到图象中
  if(i==0||i==1)
  g.setColor(Color.yellow);//
  else
  g.setColor(Color.blue);
  g.drawString(msg.charAt(i)+"",12*i+140,215);
}


// 图象生效
g.dispose();


// 输出图象到页面
ImageIO.write(image, "JPEG", response.getOutputStream());
out.clear();
out = pageContext.pushBody();


}
%>


  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值