《开四贴》求此图片原理,牛人来看看 (Asp, asp.net, jsp, php各一贴) 这个是php,搞错了,不好意思 解决方案 » 免费领取超大流量手机卡,每月29元包185G流量+100分钟通话, 中国电信官方发货 老话题了。用php实现的话,事先预备一个模板图片,每次访问php的时候,php都读取模板图片,把IP地址等输入到上面。返回的时候php设定恰当的返回头信息。 这个很简单的,点击时,客户端发送了HTTP头标,正好POST数据就是在头标中发送的,所以就可以获取得到了 可我post的数据是发给http://tieba.baidu.com/f 这个URL的,为什么图片的URL也能收到呢 lz看看官方手册吧http://jp.php.net/manual/en/function.imagegif.php 这个有什么奇怪的吗?图片都是可以在服务器端生成的呀。那个图片的地址已经告诉了你:www.flashswf.com.cn/ws/tp.aspx。图片上加字是很简单的功能。根据你输入的东西进行图片替换也不麻烦啊。 晕啊,你们看清楚啊,我不是不明白图片怎么加字,是我回复给百度贴吧的数据这个图片 URL 为什么能得到 ?? http://tieba.baidu.com/f?kz=509664804你们来这里回复看看就明白楼主的意思了 我测试了 回复 超人和蜘蛛侠 都会显示相关的图片 http://topic.csdn.net/u/20081204/12/e85a7172-acbe-453a-8f8e-b3f56d8f86ba.html?seed=97641226找到原因了,有兴趣的来这看看吧 这个问题的确没楼上几位说的那么简单,问题的关键不在于怎样将文字制作成图片,而是那个aspx的图片文件是如何获取用户post的数据的,按理说post的地址应该是baidu的一个文件。那个图片的文件是怎样得到用户post数据的?我用sniffer嗅探了一下,发现http的header中并没有用户post的内容 至于用户的ip,这个很好获得,只要你访问了那个图片,他就能得到你的ip。但是用户post的数据,他是如何得到的,我没想明白 代码我写出来了,不过很奇怪,baidu不让我贴后缀为php的图片...不知那哥们怎么贴的。如果想在本地看效果,将//获取相关帖子源代码$codes = file_get_contents($referer);的$referer替换成百度贴吧一个帖子的url地址就可以了。<?php/** * @author shadowsniper([email protected]) * @package ImageContext.class.php * @var object mImages 图片相关的数据 * @descript 支持中文文字,但必须保证你的php环境支持iconv函数 */ class drawImg{ var $mImages; /** * 设定本页面类型为图片类型 */ function __construct(){ header("content-type:image/gif"); } /** * 设置图片源 * * @param string $filename * @example 'c://mypic/mypic.gif' or 'mypic.gif' */ function setImage( $filename ){ $this->mImages->filename = imagecreatefromgif( $filename ); } /** * 设置写入文字的字体 * * @param string $font * @example simhei.ttf */ function setFont( $font ){ $this->mImages->font = $font; } /** * 设置写入的文字 * * @param string $context * @example test */ function setContext( $context ){ $this->mImages->context = $context; } /** * 设置文字编码 * * @param string $from_charset * @param string $to_charset */ function setCharset( $from_charset,$to_charset ){ $this->mImages->context = iconv( $from_charset, $to_charset , $this->mImages->context ); } /** * 设置写入黑白的具体数值 * * @param string $white * @example 255,255,255 * @param string $black * @example 0,0,0 */ function setColor( $white,$black ){ $this->mImages->white = imagecolorallocate( $this->mImages->filename,$white ); $this->mImages->black = imagecolorallocate( $this->mImages->filename,$black ); } /** * 根据参数类型获取mImages对象属性或对象的信息 * * @param enum 参数列表:filename,font,context,all * @return 一个mImages的一个属性或mImages这个对象 */ function getImageInfo( $type="all" ){ if( $type != "all") return $this->mImages->$type; else return $this->mImages; } /** * 将文字写入图片 * * @param int $size 字体大小 * @param int $angle 起始角度 * @param int $x 第一个字符的基本点(大概是字符的左下角) * @param int $y Y坐标。它设定了字体基线的位置,不是字符的最底端 * @param enum $ 值为white或black */ function draw( $size,$angle,$x,$y,$color ){ imagettftext( $this->mImages->filename,$size,$angle,$x,$y,$this->mImages->$color,$this->mImages->font,$this->mImages->context ); imagegif( $this->mImages->filename ); } /** * 释放图片源 */ function unsetImage(){ imagedestroy( $this->mImages->filename ); } /** * 释放本对象 */ function __destruct(){ unset( $this ); }}//获取用户referer$referer = $_SERVER['HTTP_RERERER'];//获取相关帖子源代码$codes = file_get_contents($referer);//获取帖子最页最大值preg_match_all('/<a href=\/f\?z=(\d+)&ct=(\d+)&lm=(\d)&sc=(\d)&rn=(\d+)&tn=baiduPostBrowser&word=(.+?)&pn=\d+>\[(\d+)\]/is',$codes,$matchs);$z=$matchs[1][0];$ct=$matchs[2][0];$lm=$matchs[3][0];$sc=$matchs[4][0];//获取一页显示多少帖子数$rn = $matchs[5][0];$tn='baiduPostBrowser';$word=urlencode($matchs[6][0]);//获取最大页数组key$num = count($matchs[7])/2-1;$maxThreadsPages = $matchs[7][$num]*$rn-$rn;unset($codes,$matchs);//组合最大页url$url = 'http://tieba.baidu.com/f?z='.$z.'&ct='.$ct.'&lm='.$lm.'&sc='.$sc.'&rn='.$rn.'&tn='.$tn.'&word='.$word.'&pn='.$maxThreadsPages;//获取最后一个页面的源代码$codes = file_get_contents($url);//获取最后一个回帖的内容preg_match_all('/<cc>([^<]+)/is',$codes,$matchs);$maxkey = count($matchs[1])-1;$str = $matchs[1][$maxkey];/* 将最后一楼的内容画到图片上 */$image = new drawImg();$image->setImage( './Bluehills.gif' );$image->setFont( 'simhei.ttf' );$image->setContext( $str );$image->setCharset('gb2312','UTF-8');@$image->setColor('255,255,255','0,0,0,');$image->draw( 20,0,0,20,'black' );?> 关于$image->setImage( './Bluehills.gif' );$image->setFont( 'simhei.ttf' );在你的程序同目录放一个图片,并且放一个字体文件,去c:/windows目录下搜一个ttf文件放在程序同目录就可以。百度不让我贴后缀为php的图片,看来要url欺骗下了 只要你的php用 .jpg结尾就行了, 好了,知道怎么弄了,后面加入一个伪参数就可以骗过baidu的验证了。测试贴吧地址:http://tieba.baidu.com/f?kz=509742606重新修改了下源代码:<?php/** * @author shadowsniper([email protected]) * @package ImageContext.class.php * @var object mImages 图片相关的数据 * @descript 支持中文文字,但必须保证你的php环境支持iconv函数 */ class drawImg{ var $mImages; /** * 设定本页面类型为图片类型 */ function __construct(){ header("content-type:image/gif"); } /** * 设置图片源 * * @param string $filename * @example 'c://mypic/mypic.gif' or 'mypic.gif' */ function setImage( $filename ){ $this->mImages->filename = imagecreatefromgif( $filename ); } /** * 设置写入文字的字体 * * @param string $font * @example simhei.ttf */ function setFont( $font ){ $this->mImages->font = $font; } /** * 设置写入的文字 * * @param string $context * @example test */ function setContext( $context ){ $this->mImages->context = $context; } /** * 设置文字编码 * * @param string $from_charset * @param string $to_charset */ function setCharset( $from_charset,$to_charset ){ $this->mImages->context = iconv( $from_charset, $to_charset , $this->mImages->context ); } /** * 设置写入黑白的具体数值 * * @param string $white * @example 255,255,255 * @param string $black * @example 0,0,0 */ function setColor( $white,$black ){ $this->mImages->white = imagecolorallocate( $this->mImages->filename,$white ); $this->mImages->black = imagecolorallocate( $this->mImages->filename,$black ); } /** * 根据参数类型获取mImages对象属性或对象的信息 * * @param enum 参数列表:filename,font,context,all * @return 一个mImages的一个属性或mImages这个对象 */ function getImageInfo( $type="all" ){ if( $type != "all") return $this->mImages->$type; else return $this->mImages; } /** * 将文字写入图片 * * @param int $size 字体大小 * @param int $angle 起始角度 * @param int $x 第一个字符的基本点(大概是字符的左下角) * @param int $y Y坐标。它设定了字体基线的位置,不是字符的最底端 * @param enum $ 值为white或black */ function draw( $size,$angle,$x,$y,$color ){ imagettftext( $this->mImages->filename,$size,$angle,$x,$y,$this->mImages->$color,$this->mImages->font,$this->mImages->context ); imagegif( $this->mImages->filename ); } /** * 释放图片源 */ function unsetImage(){ imagedestroy( $this->mImages->filename ); } /** * 释放本对象 */ function __destruct(){ unset( $this ); }}//获取用户referer$referer = $_SERVER['HTTP_REFERER'];//获取相关帖子源代码$codes = file_get_contents($referer);//获取帖子最页最大值$result = preg_match_all('/<a href=\/f\?z=(\d+)&ct=(\d+)&lm=(\d)&sc=(\d)&rn=(\d+)&tn=baiduPostBrowser&word=(.+?)&pn=\d+>\[(\d+)\]/is',$codes,$matchs);//如果只有第一页if(!$result){ //获取最后一个页面的源代码 $codes = file_get_contents($referer);}//否则获取最大页else{ $z=$matchs[1][0]; $ct=$matchs[2][0]; $lm=$matchs[3][0]; $sc=$matchs[4][0]; //获取一页显示多少帖子数 $rn = $matchs[5][0]; $tn='baiduPostBrowser'; $word=urlencode($matchs[6][0]); //获取最大页数组key $num = count($matchs[7])/2-1; $maxThreadsPages = $matchs[7][$num]*$rn-$rn; unset($codes,$matchs); //组合最大页url $url = 'http://tieba.baidu.com/f?z='.$z.'&ct='.$ct.'&lm='.$lm.'&sc='.$sc.'&rn='.$rn.'&tn='.$tn.'&word='.$word.'&pn='.$maxThreadsPages; //获取最后一个页面的源代码 $codes = file_get_contents($url);}//获取最后一个回帖的内容preg_match_all('/<cc>([^<]+)/is',$codes,$matchs);$maxkey = count($matchs[1])-1;$str = $matchs[1][$maxkey];/* 将最后一楼的内容画到图片上 */$image = new drawImg();$image->setImage( './Bluehills.gif' );$image->setFont( 'simhei.ttf' );$image->setContext( $str );$image->setCharset('gb2312','UTF-8');@$image->setColor('255,255,255','0,0,0,');$image->draw( 20,0,0,20,'black' );?> ShadowSniper 好强大啊,这个帖子的分给你了 ShadowSniper 思路很清晰,赞一个。http://www.chenfangyi.com/image-hack.html 这里还有其他讨论 求助PHP网站文件结构 求解 php5.3支持mssql吗 淘寶技術問題 安装一个blog时的问题(提示无法连接数据库,config.php中dbpasswd="") 关于GD库的安装失败,高手指点! 新手问题,请解决!“当前安全设置不允许下载该文件” 在Javascript中嵌入PHP代码 新手请教,用户注册信息判断 为什么我的php中一些网络io函数不能运行 <textarea>换行的问题 php项目运行的问题
用php实现的话,事先预备一个模板图片,
每次访问php的时候,php都读取模板图片,把IP地址等输入到上面。
返回的时候php设定恰当的返回头信息。
http://jp.php.net/manual/en/function.imagegif.php
找到原因了,有兴趣的来这看看吧
$codes = file_get_contents($referer);的$referer替换成百度贴吧一个帖子的url地址就可以了。<?php
/**
* @author shadowsniper([email protected])
* @package ImageContext.class.php
* @var object mImages 图片相关的数据
* @descript 支持中文文字,但必须保证你的php环境支持iconv函数
*/
class drawImg{
var $mImages; /**
* 设定本页面类型为图片类型
*/
function __construct(){
header("content-type:image/gif");
}
/**
* 设置图片源
*
* @param string $filename
* @example 'c://mypic/mypic.gif' or 'mypic.gif'
*/
function setImage( $filename ){
$this->mImages->filename = imagecreatefromgif( $filename );
} /**
* 设置写入文字的字体
*
* @param string $font
* @example simhei.ttf
*/
function setFont( $font ){
$this->mImages->font = $font;
}
/**
* 设置写入的文字
*
* @param string $context
* @example test
*/
function setContext( $context ){
$this->mImages->context = $context;
}
/**
* 设置文字编码
*
* @param string $from_charset
* @param string $to_charset
*/
function setCharset( $from_charset,$to_charset ){
$this->mImages->context = iconv( $from_charset, $to_charset , $this->mImages->context );
} /**
* 设置写入黑白的具体数值
*
* @param string $white
* @example 255,255,255
* @param string $black
* @example 0,0,0
*/
function setColor( $white,$black ){
$this->mImages->white = imagecolorallocate( $this->mImages->filename,$white );
$this->mImages->black = imagecolorallocate( $this->mImages->filename,$black );
}
/**
* 根据参数类型获取mImages对象属性或对象的信息
*
* @param enum 参数列表:filename,font,context,all
* @return 一个mImages的一个属性或mImages这个对象
*/
function getImageInfo( $type="all" ){
if( $type != "all")
return $this->mImages->$type;
else
return $this->mImages;
}
/**
* 将文字写入图片
*
* @param int $size 字体大小
* @param int $angle 起始角度
* @param int $x 第一个字符的基本点(大概是字符的左下角)
* @param int $y Y坐标。它设定了字体基线的位置,不是字符的最底端
* @param enum $ 值为white或black
*/
function draw( $size,$angle,$x,$y,$color ){
imagettftext( $this->mImages->filename,$size,$angle,$x,$y,$this->mImages->$color,$this->mImages->font,$this->mImages->context );
imagegif( $this->mImages->filename );
} /**
* 释放图片源
*/
function unsetImage(){
imagedestroy( $this->mImages->filename );
} /**
* 释放本对象
*/
function __destruct(){
unset( $this );
}
}//获取用户referer
$referer = $_SERVER['HTTP_RERERER'];//获取相关帖子源代码
$codes = file_get_contents($referer);//获取帖子最页最大值
preg_match_all('/<a href=\/f\?z=(\d+)&ct=(\d+)&lm=(\d)&sc=(\d)&rn=(\d+)&tn=baiduPostBrowser&word=(.+?)&pn=\d+>\[(\d+)\]/is',$codes,$matchs);$z=$matchs[1][0];
$ct=$matchs[2][0];
$lm=$matchs[3][0];
$sc=$matchs[4][0];
//获取一页显示多少帖子数
$rn = $matchs[5][0];
$tn='baiduPostBrowser';
$word=urlencode($matchs[6][0]);//获取最大页数组key
$num = count($matchs[7])/2-1;
$maxThreadsPages = $matchs[7][$num]*$rn-$rn;unset($codes,$matchs);//组合最大页url
$url = 'http://tieba.baidu.com/f?z='.$z.'&ct='.$ct.'&lm='.$lm.'&sc='.$sc.'&rn='.$rn.'&tn='.$tn.'&word='.$word.'&pn='.$maxThreadsPages;//获取最后一个页面的源代码
$codes = file_get_contents($url);//获取最后一个回帖的内容
preg_match_all('/<cc>([^<]+)/is',$codes,$matchs);
$maxkey = count($matchs[1])-1;
$str = $matchs[1][$maxkey];/* 将最后一楼的内容画到图片上 */
$image = new drawImg();
$image->setImage( './Bluehills.gif' );
$image->setFont( 'simhei.ttf' );
$image->setContext( $str );
$image->setCharset('gb2312','UTF-8');
@$image->setColor('255,255,255','0,0,0,');
$image->draw( 20,0,0,20,'black' );
?>
$image->setImage( './Bluehills.gif' );
$image->setFont( 'simhei.ttf' );在你的程序同目录放一个图片,并且放一个字体文件,去c:/windows目录下搜一个ttf文件放在程序同目录就可以。百度不让我贴后缀为php的图片,看来要url欺骗下了
<?php
/**
* @author shadowsniper([email protected])
* @package ImageContext.class.php
* @var object mImages 图片相关的数据
* @descript 支持中文文字,但必须保证你的php环境支持iconv函数
*/
class drawImg{
var $mImages; /**
* 设定本页面类型为图片类型
*/
function __construct(){
header("content-type:image/gif");
}
/**
* 设置图片源
*
* @param string $filename
* @example 'c://mypic/mypic.gif' or 'mypic.gif'
*/
function setImage( $filename ){
$this->mImages->filename = imagecreatefromgif( $filename );
} /**
* 设置写入文字的字体
*
* @param string $font
* @example simhei.ttf
*/
function setFont( $font ){
$this->mImages->font = $font;
}
/**
* 设置写入的文字
*
* @param string $context
* @example test
*/
function setContext( $context ){
$this->mImages->context = $context;
}
/**
* 设置文字编码
*
* @param string $from_charset
* @param string $to_charset
*/
function setCharset( $from_charset,$to_charset ){
$this->mImages->context = iconv( $from_charset, $to_charset , $this->mImages->context );
} /**
* 设置写入黑白的具体数值
*
* @param string $white
* @example 255,255,255
* @param string $black
* @example 0,0,0
*/
function setColor( $white,$black ){
$this->mImages->white = imagecolorallocate( $this->mImages->filename,$white );
$this->mImages->black = imagecolorallocate( $this->mImages->filename,$black );
}
/**
* 根据参数类型获取mImages对象属性或对象的信息
*
* @param enum 参数列表:filename,font,context,all
* @return 一个mImages的一个属性或mImages这个对象
*/
function getImageInfo( $type="all" ){
if( $type != "all")
return $this->mImages->$type;
else
return $this->mImages;
}
/**
* 将文字写入图片
*
* @param int $size 字体大小
* @param int $angle 起始角度
* @param int $x 第一个字符的基本点(大概是字符的左下角)
* @param int $y Y坐标。它设定了字体基线的位置,不是字符的最底端
* @param enum $ 值为white或black
*/
function draw( $size,$angle,$x,$y,$color ){
imagettftext( $this->mImages->filename,$size,$angle,$x,$y,$this->mImages->$color,$this->mImages->font,$this->mImages->context );
imagegif( $this->mImages->filename );
} /**
* 释放图片源
*/
function unsetImage(){
imagedestroy( $this->mImages->filename );
} /**
* 释放本对象
*/
function __destruct(){
unset( $this );
}
}//获取用户referer
$referer = $_SERVER['HTTP_REFERER'];//获取相关帖子源代码
$codes = file_get_contents($referer);//获取帖子最页最大值
$result = preg_match_all('/<a href=\/f\?z=(\d+)&ct=(\d+)&lm=(\d)&sc=(\d)&rn=(\d+)&tn=baiduPostBrowser&word=(.+?)&pn=\d+>\[(\d+)\]/is',$codes,$matchs);//如果只有第一页
if(!$result){
//获取最后一个页面的源代码
$codes = file_get_contents($referer);
}
//否则获取最大页
else{
$z=$matchs[1][0];
$ct=$matchs[2][0];
$lm=$matchs[3][0];
$sc=$matchs[4][0];
//获取一页显示多少帖子数
$rn = $matchs[5][0];
$tn='baiduPostBrowser';
$word=urlencode($matchs[6][0]); //获取最大页数组key
$num = count($matchs[7])/2-1;
$maxThreadsPages = $matchs[7][$num]*$rn-$rn; unset($codes,$matchs); //组合最大页url
$url = 'http://tieba.baidu.com/f?z='.$z.'&ct='.$ct.'&lm='.$lm.'&sc='.$sc.'&rn='.$rn.'&tn='.$tn.'&word='.$word.'&pn='.$maxThreadsPages; //获取最后一个页面的源代码
$codes = file_get_contents($url);
}//获取最后一个回帖的内容
preg_match_all('/<cc>([^<]+)/is',$codes,$matchs);
$maxkey = count($matchs[1])-1;
$str = $matchs[1][$maxkey];/* 将最后一楼的内容画到图片上 */
$image = new drawImg();
$image->setImage( './Bluehills.gif' );
$image->setFont( 'simhei.ttf' );
$image->setContext( $str );
$image->setCharset('gb2312','UTF-8');
@$image->setColor('255,255,255','0,0,0,');
$image->draw( 20,0,0,20,'black' );
?>