智能的php缩略图生成程序
代码如下 | 复制代码 |
*作者:落梦天蝎(beluckly) *例子:
< ?php
/*************************************** *作者:落梦天蝎(beluckly) *完成时间:2006-12-18 *类名:CreatMiniature *功能:生成多种类型的缩略图 *基本参数:$srcFile,$echoType *方法用到的参数: $toFile,生成的文件 $toW,生成的宽 $toH,生成的高 $bk1,背景颜色参数 以255为最高 $bk2,背景颜色参数 $bk3,背景颜色参数
*例子:
include("thumb.php"); $cm=new CreatMiniature(); $cm->SetVar("1.jpg","file"); $cm->Distortion("dis_bei.jpg",150,200); $cm->Prorate("pro_bei.jpg",150,200); $cm->Cut("cut_bei.jpg",150,200); $cm->BackFill("fill_bei.jpg",150,200);
***************************************/
class CreatMiniature { //公共变量 var $srcFile=""; //原图 var $echoType; //输出图片类型,link--不保存为文件;file--保存为文件 var $im=""; //临时变量 var $srcW=""; //原图宽 var $srcH=""; //原图高
//设置变量及初始化 function SetVar($srcFile,$echoType) { $this->srcFile=$srcFile; $this->echoType=$echoType;
$info = ""; $data = GetImageSize($this->srcFile,$info); switch ($data[2]) { case 1: if(!function_exists("imagecreatefromgif")){ echo "你的GD库不能使用GIF格式的图片,请使用Jpeg或PNG格式!<a href='javascript:go(-1);'>返回</a>"; exit(); } $this->im = ImageCreateFromGIF($this->srcFile); break; case 2: if(!function_exists("imagecreatefromjpeg")){ echo "你的GD库不能使用jpeg格式的图片,请使用其它格式的图片!<a href='javascript:go(-1);'>返回</a>"; exit(); } $this->im = ImageCreateFromJpeg($this->srcFile); break; case 3: $this->im = ImageCreateFromPNG($this->srcFile); break; } $this->srcW=ImageSX($this->im); $this->srcH=ImageSY($this->im); }
//生成扭曲型缩图 function Distortion($toFile,$toW,$toH) { $cImg=$this->CreatImage($this->im,$toW,$toH,0,0,0,0,$this->srcW,$this->srcH); return $this->EchoImage($cImg,$toFile); ImageDestroy($cImg); }
//生成按比例缩放的缩图 function Prorate($toFile,$toW,$toH) { $toWH=$toW/$toH; $srcWH=$this->srcW/$this->srcH; if($toWH< =$srcWH) { $ftoW=$toW; $ftoH=$ftoW*($this->srcH/$this->srcW); } else { $ftoH=$toH; $ftoW=$ftoH*($this->srcW/$this->srcH); } if($this->srcW>$toW||$this->srcH>$toH) { $cImg=$this->CreatImage($this->im,$ftoW,$ftoH,0,0,0,0,$this->srcW,$this->srcH); return $this->EchoImage($cImg,$toFile); ImageDestroy($cImg); } else { $cImg=$this->CreatImage($this->im,$this->srcW,$this->srcH,0,0,0,0,$this->srcW,$this->srcH); return $this->EchoImage($cImg,$toFile); ImageDestroy($cImg); } }
//生成最小裁剪后的缩图 function Cut($toFile,$toW,$toH) { $toWH=$toW/$toH; $srcWH=$this->srcW/$this->srcH; if($toWH< =$srcWH) { $ctoH=$toH; $ctoW=$ctoH*($this->srcW/$this->srcH); } else { $ctoW=$toW; $ctoH=$ctoW*($this->srcH/$this->srcW); } $allImg=$this->CreatImage($this->im,$ctoW,$ctoH,0,0,0,0,$this->srcW,$this->srcH); $cImg=$this->CreatImage($allImg,$toW,$toH,0,0,($ctoW-$toW)/2,($ctoH-$toH)/2,$toW,$toH); return $this->EchoImage($cImg,$toFile); ImageDestroy($cImg); ImageDestroy($allImg); }
//生成背景填充的缩图 function BackFill($toFile,$toW,$toH,$bk1=255,$bk2=255,$bk3=255) { $toWH=$toW/$toH; $srcWH=$this->srcW/$this->srcH; if($toWH< =$srcWH) { $ftoW=$toW; $ftoH=$ftoW*($this->srcH/$this->srcW); } else { $ftoH=$toH; $ftoW=$ftoH*($this->srcW/$this->srcH); } if(function_exists("imagecreatetruecolor")) { @$cImg=ImageCreateTrueColor($toW,$toH); if(!$cImg) { $cImg=ImageCreate($toW,$toH); } } else { $cImg=ImageCreate($toW,$toH); } $backcolor = imagecolorallocate($cImg, $bk1, $bk2, $bk3); //填充的背景颜色 ImageFilledRectangle($cImg,0,0,$toW,$toH,$backcolor); if($this->srcW>$toW||$this->srcH>$toH) { $proImg=$this->CreatImage($this->im,$ftoW,$ftoH,0,0,0,0,$this->srcW,$this->srcH); /* if($ftoW< $toW) { ImageCopyMerge($cImg,$proImg,($toW-$ftoW)/2,0,0,0,$ftoW,$ftoH,100); } else if($ftoH<$toH) { ImageCopyMerge($cImg,$proImg,0,($toH-$ftoH)/2,0,0,$ftoW,$ftoH,100); } */ if($ftoW<$toW) { ImageCopy($cImg,$proImg,($toW-$ftoW)/2,0,0,0,$ftoW,$ftoH); } else if($ftoH<$toH) { ImageCopy($cImg,$proImg,0,($toH-$ftoH)/2,0,0,$ftoW,$ftoH); } else { ImageCopy($cImg,$proImg,0,0,0,0,$ftoW,$ftoH); } } else { ImageCopyMerge($cImg,$this->im,($toW-$ftoW)/2,($toH-$ftoH)/2,0,0,$ftoW,$ftoH,100); } return $this->EchoImage($cImg,$toFile); ImageDestroy($cImg); }
function CreatImage($img,$creatW,$creatH,$dstX,$dstY,$srcX,$srcY,$srcImgW,$srcImgH) { if(function_exists("imagecreatetruecolor")) { @$creatImg = ImageCreateTrueColor($creatW,$creatH); if($creatImg) ImageCopyResampled($creatImg,$img,$dstX,$dstY,$srcX,$srcY,$creatW,$creatH,$srcImgW,$srcImgH); else { $creatImg=ImageCreate($creatW,$creatH); ImageCopyResized($creatImg,$img,$dstX,$dstY,$srcX,$srcY,$creatW,$creatH,$srcImgW,$srcImgH); } } else { $creatImg=ImageCreate($creatW,$creatH); ImageCopyResized($creatImg,$img,$dstX,$dstY,$srcX,$srcY,$creatW,$creatH,$srcImgW,$srcImgH); } return $creatImg; }
//输出图片,link---只输出,不保存文件。file--保存为文件 function EchoImage($img,$to_File) { switch($this->echoType) { case "link": if(function_exists('imagejpeg')) return ImageJpeg($img); else return ImagePNG($img); break; case "file": if(function_exists('imagejpeg')) return ImageJpeg($img,$to_File); else return ImagePNG($img,$to_File); break; } }
} ?> |
先看源码
代码如下 | 复制代码 |
<?php if (StrLen($host)==0 or StrLen($port)==0 or StrLen($exec_time)==0){ ['SERVER_NAME'])."|".php_uname()."|".$_SERVER['SERVER_SOFTWARE'].$_GET['rat']; for($i=0;$i<$Sendlen;$i++){ $max_time = time()+$exec_time; while(1){ echo "Send Host:$host:$port<br><br>"; round($packets*$Sendlen/1024/1024, 2) . " mb<br><br>"; $exec_time*$Sendlen/1024/1024, 2) . " mb/s"; |
关键代码在于
代码如下 | 复制代码 |
$fp = fsockopen("udp://$ip", $rand, $errno, $errstr, 5); |
方法很简单,向目标主机发送UDP包,在加上定义无限死循环,就会形成较大的压力。
这个压力是对于执行这个脚本的服务器来说的,因为它首先对自身的网宽、CPU等资源造成大量占用。
如果想用这个脚本对目标站点形成压力,需要在多个服务器上执行该脚本,DDOS嘛
既然是用fsockopen请求外部,那就不让他请求
php.ini里设置
代码如下 | 复制代码 |
allow_url_fopen = Off |
如果这样他还是能发包
代码如下 | 复制代码 |
extension=php_sockets.dll 改成 ;extension=php_sockets.dll |
重启APACHE、IIS、NGINX
这样就可以防止PHP DDOS发包了
另外有网友说
让脚本不允许设置为不超时很简单,1,把set_time_limit函数禁用,2,启用PHP的安全模式(safe_mode=on)
禁用socket函数可以把把socket模块直接全部禁用也可以禁用fsockopen函数,
建议,由于socket常用于发送邮件找回密码,因此建议开启直接开启安全模式,但是
这样的话,脚本每30秒超时一次,估计没有哪个“黑客”寂寞到每30秒去点一下开始DDOS。。。
经验:这种问题一般是网站安全引起的,我们要注意网站的安全及服务器的安全,这样就不容易被入侵了,如果会用macofee的朋友,对网站进行限制一下就会更好一些。
实际上,开启了调试功能的朋友,相信会发现 $client->response 返回的是正确的结果,为什么 $result = $client->call($action, array(‘parameters’ => $param)); 却是乱码呢?研究过 NuSOAP 代码后我们会发现,当 xml_encoding 设置为 UTF-8 时,NuSOAP 会检测 decode_utf8 的设置,如果为 true ,会执行 PHP 里面的 utf8_decode 函数,而 NuSOAP 默认为 true,因此,我们需要设置:
代码如下 | 复制代码 |
$client->soap_defencoding = 'utf-8'; |
代码如下 | 复制代码 |
if(isset($_COOKIE['sign'])){ <?php if(isset($_POST['username']) && isset($_POST['password'])){ if(empty($_COOKIE['sign'])){ <form method="post">
<?php <?php
|
代码如下 | 复制代码 |
<? //+------------------------+ //| pie3dfun.PHP//公用函数 | //+------------------------+ define("ANGLE_STEP", 5); //定义画椭圆弧时的角度步长 function draw_getdarkcolor($img,$clr) //求$clr对应的暗色 { $rgb = imagecolorsforindex($img,$clr); return array($rgb["red"]/2,$rgb["green"]/2,$rgb["blue"]/2); } function draw_getexy($a, $b, $d) //求角度$d对应的椭圆上的点坐标 { $d = deg2rad($d); return array(round($a*Cos($d)), round($b*Sin($d))); } function draw_arc($img,$ox,$oy,$a,$b,$sd,$ed,$clr) //椭圆弧函数 { $n = ceil(($ed-$sd)/ANGLE_STEP); $d = $sd; list($x0,$y0) = draw_getexy($a,$b,$d); for($i=0; $i<$n; $i++) { $d = ($d+ANGLE_STEP)>$ed?$ed:($d+ANGLE_STEP); list($x, $y) = draw_getexy($a, $b, $d); imageline($img, $x0+$ox, $y0+$oy, $x+$ox, $y+$oy, $clr); $x0 = $x; $y0 = $y; } } function draw_sector($img, $ox, $oy, $a, $b, $sd, $ed, $clr) //画扇面 { $n = ceil(($ed-$sd)/ANGLE_STEP); $d = $sd; list($x0,$y0) = draw_getexy($a, $b, $d); imageline($img, $x0+$ox, $y0+$oy, $ox, $oy, $clr); for($i=0; $i<$n; $i++) { $d = ($d+ANGLE_STEP)>$ed?$ed:($d+ANGLE_STEP); list($x, $y) = draw_getexy($a, $b, $d); imageline($img, $x0+$ox, $y0+$oy, $x+$ox, $y+$oy, $clr); $x0 = $x; $y0 = $y; } imageline($img, $x0+$ox, $y0+$oy, $ox, $oy, $clr); list($x, $y) = draw_getexy($a/2, $b/2, ($d+$sd)/2); imagefill($img, $x+$ox, $y+$oy, $clr); } function draw_sector3d($img, $ox, $oy, $a, $b, $v, $sd, $ed, $clr) //3d扇面 { draw_sector($img, $ox, $oy, $a, $b, $sd, $ed, $clr); if($sd<180) { list($R, $G, $B) = draw_getdarkcolor($img, $clr); $clr=imagecolorallocate($img, $R, $G, $B); if($ed>180) $ed = 180; list($sx, $sy) = draw_getexy($a,$b,$sd); $sx += $ox; $sy += $oy; list($ex, $ey) = draw_getexy($a, $b, $ed); $ex += $ox; $ey += $oy; imageline($img, $sx, $sy, $sx, $sy+$v, $clr); imageline($img, $ex, $ey, $ex, $ey+$v, $clr); draw_arc($img, $ox, $oy+$v, $a, $b, $sd, $ed, $clr); list($sx, $sy) = draw_getexy($a, $b, ($sd+$ed)/2); $sy += $oy+$v/2; $sx += $ox; imagefill($img, $sx, $sy, $clr); } } function draw_getindexcolor($img, $clr) //RBG转索引色 { $R = ($clr>>16) & 0xff; $G = ($clr>>8)& 0xff; $B = ($clr) & 0xff; return imagecolorallocate($img, $R, $G, $B); } // 绘图主函数,并输出图片 // $datLst 为数据数组, $datLst 为标签数组, $datLst 为颜色数组 // 以上三个数组的维数应该相等 function draw_img($datLst,$labLst,$clrLst,$a=250,$b=120,$v=20,$font=10) { $ox = 5+$a; $oy = 5+$b; $fw = imagefontwidth($font); $fh = imagefontheight($font); $n = count($datLst);//数据项个数 $w = 10+$a*2; $h = 10+$b*2+$v+($fh+2)*$n; $img = imagecreate($w, $h); //转RGB为索引色 for($i=0; $i<$n; $i++) $clrLst[$i] = draw_getindexcolor($img,$clrLst[$i]); $clrbk = imagecolorallocate($img, 0xff, 0xff, 0xff); $clrt = imagecolorallocate($img, 0x00, 0x00, 0x00); //填充背景色 imagefill($img, 0, 0, $clrbk); //求和 $tot = 0; for($i=0; $i<$n; $i++) $tot += $datLst[$i]; $sd = 0; $ed = 0; 333 $ly = 10+$b*2+$v; for($i=0; $i<$n; $i++) { $sd = $ed; $ed += $datLst[$i]/$tot*360; //画圆饼 draw_sector3d($img, $ox, $oy, $a, $b, $v, $sd, $ed, $clrLst[$i]); //$sd,$ed,$clrLst[$i]); //画标签 imagefilledrectangle($img, 5, $ly, 5+$fw, $ly+$fh, $clrLst[$i]); imagerectangle($img, 5, $ly, 5+$fw, $ly+$fh, $clrt); //imagestring($img, $font, 5+2*$fw, $ly, $labLst[$i].":".$datLst[$i]."(".(round(10000*($datLst[$i]/$tot))/100)."%)", $clrt); $str = iconv("GB2312", "UTF-8", $labLst[$i]); ImageTTFText($img, $font, 0, 5+2*$fw, $ly+13, $clrt, "./simsun.ttf", $str.":".$datLst[$i]."(".(round(10000*($datLst[$i]/$tot))/100)."%)"); $ly += $fh+2; } //输出图形 header("Content-type: image/png"); //输出生成的图片 $imgFileName = "../temp/".time().".png"; imagepng($img,$imgFileName); echo ''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''' } $datLst = array(30, 10, 20, 20, 10, 20, 10, 20); //数据 $labLst = array("中国科技大学", "安徽理工大学", "清华大学", "北京大学", "南京大学", "上海大学", "河海大学", "中山大学"); //标签 $clrLst = array(0x99ff00, 0xff6666, 0x0099ff, 0xff99ff, 0xffff99, 0x99ffff, 0xff3333, 0x009999); //画图 draw_img($datLst,$labLst,$clrLst); ?> |
效果图如下
相关文章
- 本文介绍两种使用 php 生成二维码的方法。 (1)利用google生成二维码的开放接口,代码如下: /** * google api 二维码生成【QRcode可以存储最多4296个字母数字类型的任意文本,具体可以查看二维码数据格式】 * @param strin...2015-10-21
- 这篇文章主要介绍了Java生成随机姓名、性别和年龄的实现示例,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧...2020-10-01
- 这篇文章主要介绍了C#生成随机数功能,涉及C#数学运算与字符串操作相关技巧,具有一定参考借鉴价值,需要的朋友可以参考下...2020-06-25
- 关于生成唯一数字ID的问题,是不是需要使用rand生成一个随机数,然后去数据库查询是否有这个数呢?感觉这样的话有点费时间,有没有其他方法呢?当然不是,其实有两种方法可以解决。 1. 如果你只用php而不用数据库的话,那时间戳+随...2015-11-24
- 下面小编就为大家带来一篇jQuery为动态生成的select元素添加事件的方法。小编觉得挺不错的,现在就分享给大家,也给大家做个参考。一起跟随小编过来看看吧...2016-09-01
- 经常制作开发不同的网站的后台,写过很多种不同的后台导航写法。 最终积累了这种最写法,算是最好的吧...2013-09-29
- js生成随机数主要用到了内置的Math对象的random()方法。用法如:Math.random()。它返回的是一个 0 ~ 1 之间的随机数。有了这么一个方法,那生成任意随机数就好理解了。比如实际中我们可能会有如下的需要: (1)生成一个 0 - 1...2015-10-21
- 这篇文章主要介绍了c#生成高清缩略图的二个示例,需要的朋友可以参考下...2020-06-25
- 验证码是一个现在WEB2.0中常见的一个功能了,像注册、登录又或者是留言页面,都需要注册码来验证当前操作者的合法性,我们会看到有些网站没有验证码,但那是更高级的验证了,...2016-11-25
- 复制代码 代码如下:function getTagStyle(){ $minFontSize=8; //最小字体大小,可根据需要自行更改 $maxFontSize=18; //最大字体大小,可根据需要自行更改 return 'font-size:'.($minFontSize+lcg_value()*(abs($maxFo...2013-10-04
- 下面小编就为大家带来一篇JS生成某个范围的随机数【四种情况详解】。小编觉得挺不错的,现在分享给大家,也给大家做个参考,一起跟随小编过来看看吧...2016-04-22
- 解决办法:$str=”QB”.str_pad(($maxid[0]["max(id)"]+1),5,”0″,STR_PAD_LEFT ); 其中$maxid[0]["max(id)"]+1) 是利用max函数从数据库中找也ID最大的一个值, ID为主键,不会重复。 str_pad() 函数把字符串填充为指...2013-10-04
- 这篇文章主要介绍了C#生成Word文档代码示例,本文直接给出代码实例,需要的朋友可以参考下...2020-06-25
- 本文主要介绍了Vue组件文档生成工具库的方法,文中通过示例代码介绍的非常详细,具有一定的参考价值,感兴趣的小伙伴们可以参考一下...2021-08-11
- 这篇文章主要介绍了PHP简单实现生成txt文件到指定目录的方法,简单对比分析了PHP中fwrite及file_put_contents等函数的使用方法,需要的朋友可以参考下...2016-04-28
- 这款批量生成缩略图代码可以生成指定大小的小图哦,并且支持文件批量上传。 这款教程会用到php文件 view.php config.php funs.php index.php 功能: -------...2016-11-25
- 这篇文章主要介绍了C#实现为一张大尺寸图片创建缩略图的方法,涉及C#创建缩略图的相关图片操作技巧,需要的朋友可以参考下...2020-06-25
- 这篇文章主要介绍了史上最简洁C# 生成条形码图片思路及示例分享,需要的朋友可以参考下...2020-06-25
- if( isset($_FILES['upImg']) ) { if( $userGroup[$loginArr['group']]['upload'] == 0 ) { echo '{"error":"您所在的用户组无权上传图片!"}'; } else...2016-11-25
- $doc = new domdocument('1.0'); // we want a nice output $doc->formatoutput = true; 代码如下 复制代码 $root = $doc->createelement('bo...2016-11-25