PHP智能把图片生成缩略图类
代码如下 | 复制代码 |
< ?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 /**
var $BUF = Array ( ); var $ERR = Array ( for ($i = 0, $src_count = count($GIF_src); $i < $src_count; $i++ ) $Locals_str = 13 + 3 * (2 <<(ord($this->BUF[$i]{10}) & 0x07)); $Locals_end = strlen($this->BUF[$i]) - $Locals_str - 1; $Global_len = 2 << (ord( $this->BUF [0]{10} ) & 0x07 ); $Global_rgb = substr($this->BUF[0], 13, 3 * (2 << ( ord ( $this->BUF[0]{10} ) & 0x07))); $Locals_ext = "!xF9x04" . chr(($this->DIS << 2) + 0) . chr(($d >> 0) & 0xFF) . chr(($d >> 8) & 0xFF) . "x0x0"; if ( $this->COL > -1 && ord($this->BUF[$i]{10}) & 0x80) |
创建图像缩略图需要许多时间,此代码将有助于了解缩略图的逻辑。
代码如下 | 复制代码 |
if($ext == "jpg" || $ext == "jpeg") $x = imagesx($im); if($x <= $xmax && $y <= $ymax) if($x >= $y) { $im2 = imagecreatetruecolor($newx, $newy); |
例2
代码如下 | 复制代码 |
function creat_thumbnail($img,$w,$h,$path) //是真彩色图像 |
代码如下 | 复制代码 |
class resizeimage $this->type = strtolower(substr(strrchr($this->srcimg,"."),1)); $name = substr($this->srcimg,0,$name_length-1); //echo $this->dstimg; $resizeimage = new resizeimage("11.jpg", "200", "150", "1","17.jpg"); |
实例二
代码如下 | 复制代码 |
<?php /** $dst_h = $height; /** if(!$width && !$height && !$proportion) $src = $createfun($src_img); if(function_exists('imagecopyresampled')) |
使用方法
代码如下 | 复制代码 |
$src_img = "./ROSI_050_002.JPG"; |
例1
代码如下 | 复制代码 |
<?php $fontfile = "simkai.ttf"; /* $fontfile 字体的路径,视操作系统而定,可以是 simhei.ttf(黑体) , SIMKAI.TTF(楷体) , SIMFANG.TTF(仿宋) ,SIMSUN.TTC(宋体&新宋体) 等 GD 支持的中文字体*/ |
例2
代码如下 | 复制代码 |
<?php $text=iconv("gb2312","UTF-8",$text); //ImageTTFText(int im, int size, int angle, int x, int y, int col, string fontfile, string text): if ($new_img==""): ImageDestroy($im); //结束图形,释放内存空间 |
例3
代码如下 | 复制代码 |
<?php //读取水印文件 switch($water_info[2])//取得水印图片的格式 //读取背景图片 switch($ground_info[2])//取得背景图片的格式 //水印位置 //设定图像的混色模式 if($isWaterImage)//图片水印 //生成水印后的图片 //释放内存 echo $num; if(isset($_FILES) && !emptyempty($_FILES['userfile']) && $_FILES['userfile']['size']>0) //文字水印 //图片水印 echo “<img src=”".$uploadfile.”” border=”0”>”; ?> } |
相关文章
- 这篇文章主要介绍了c#生成高清缩略图的二个示例,需要的朋友可以参考下...2020-06-25
- 这款批量生成缩略图代码可以生成指定大小的小图哦,并且支持文件批量上传。 这款教程会用到php文件 view.php config.php funs.php index.php 功能: -------...2016-11-25
- 这篇文章主要介绍了C#实现为一张大尺寸图片创建缩略图的方法,涉及C#创建缩略图的相关图片操作技巧,需要的朋友可以参考下...2020-06-25
- if( isset($_FILES['upImg']) ) { if( $userGroup[$loginArr['group']]['upload'] == 0 ) { echo '{"error":"您所在的用户组无权上传图片!"}'; } else...2016-11-25
- 这篇文章主要给大家介绍了在CentOS系统下编译安装nginx及配置缩略图插件的方法教程,文中给出了详细的安装步骤,对大家具有一定的参考价值,有需要的朋友们下面来一起看看吧。...2017-07-06
- 今天写了一个上传多张图片并生成缩略图的小程序。当然因为是菜鸟,所以写的一般。但还是学到了不少东西。现在上代码。...2021-09-22
OPPO R9s陌生号码智能识别教程 OPPO R9s如何智能识别陌生号码
本文介绍了OPPO R9s如何识别陌生号码的方法。这样大家在接电话钱就知道打来的号码他是属于诈骗还是什么性质的号码,因为被别人标记过。那么快跟小编一起来看看吧。...2016-12-31- 这篇文章主要介绍了Nginx配合php实现生成实时缩略图功能,这在一些特殊场合可能会要用到,需要的朋友可以参考下...2016-01-27
- 这篇文章主要介绍了C++基于人工智能搜索策略解决农夫过河问题,简单描述了农夫过河问题的概念、实现原理并结合具体实例形式给出了C++使用人工智能搜索策略解决农夫过河问题的相关操作技巧,需要的朋友可以参考下...2020-04-25
- 对于生成缩略图一般做法是通过后端语言php等来生成,但是为了给服务器减压,我们或许可以从前端来着手,先生成好不同尺寸的缩略图,传给后端,而后端只需要将前端传过来的图片进行存储就好了...2020-10-03
- 这款图片上传源代码是一款可以上传图片并且还具有给上传的图片生成缩略图与增加水印功能哦,可以说是一款完美的图片上传类哦。 代码如下 复制代码 ...2016-11-25
- 不久前,百度举行了一年一次的百度世界大会,百度董事长兼首席执行官李彦宏表示,互联网正在进入人工智能时代,人工智能将使全社会迎来变革性的发展,百度大脑通过对十多年来的搜索数据、网页数据的‘学习’,在语音、图像、自然语言处理和用户画像上取得了显著成绩。...2016-09-12
- 生成jpg缩略图字节,本人的小软件中需要用到的功能,所以自己做了一个函数,和大家分享 为什么要生成字节而不是文件,这是为了方便后续处理啦^_^...2020-06-25
- <!doctype html public "-//w3c//dtd xhtml 1.0 transitional//en" "http://www.w3.org/tr/xhtml1/dtd/xhtml1-transitional.dtd"> <html xmlns="http://www.w3.org/1...2016-11-25
- 这篇文章主要介绍了C#获取视频某一帧的缩略图的方法,涉及执行CMD命令及针对视频文件操作的技巧,具有一定的实用价值,需要的朋友可以参考下...2020-06-25
- 今天小编在这里就来给各位photoshop的这一款软件的使用者们来说下利用智能对象制作LOGO展示模板,各位想知道具体制作方法的软件使用们,那么大家就来跟着小编看一看吧。...2016-11-22
- 缩略图如果是图片我们直接使用php gD库就可实现了,本文章要介绍的是Imagick把pdf生成png缩略图方法,这里我们要利用一个插件了,下面我来给大家演示一个实例。 php_im...2016-11-25
- 这款图片上传代码可以把上传的图片增加水印,生成小图片,同时还可以生成文字水印。 代码如下 复制代码 class upimages { var $annexf...2016-11-25
- 这篇文章主要介绍了ASP.NET创建动态缩略图的方法,实例分析了asp.net动态操作图片的相关技巧,需要的朋友可以参考下...2021-09-22
- 代码如下 复制代码 <!doctype html public "-//w3c//dtd xhtml 1.0 transitional//en" "http://www.w3.org/tr/xhtml1/dtd/xhtml1-transitional....2016-11-25