PHP生成同比例的缩略图实现程序
创建图像缩略图需要许多时间,此代码将有助于了解缩略图的逻辑。
代码如下 | 复制代码 |
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) //是真彩色图像 |
代码如下 | 复制代码 |
< ?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; } } } ?> |
代码如下 | 复制代码 |
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”>”; ?> } |
生成PNG缩略图的时候,背景是黑色,今天又写了一个函数来弥补一下。代码很简单,就是imagealphablending($thumb,false);与imagesavealpha($thumb,true);很重要.主要就是把PNG的alpha值保存,不要丢失而已。
代码如下 | 复制代码 |
<?PHP /* *$sourePic:原图路径 * $smallFileName:小图名称 * $width:小图宽 * $heigh:小图高 * 转载注明 www.111cn.net */ function pngthumb($sourePic,$smallFileName,$width,$heigh){ $image=imagecreatefrompng($sourePic);//PNG imagesavealpha($image,true);//这里很重要 意思是不要丢了$sourePic图像的透明色; $BigWidth=imagesx($image);//大图宽度 $BigHeigh=imagesy($image);//大图高度 $thumb = imagecreatetruecolor($width,$heigh); imagealphablending($thumb,false);//这里很重要,意思是不合并颜色,直接用$img图像颜色替换,包括透明色; imagesavealpha($thumb,true);//这里很重要,意思是不要丢了$thumb图像的透明色; if(imagecopyresampled($thumb,$image,0,0,0,0,$width,$heigh,$BigWidth,$BigHeigh)){ imagepng($thumb,$smallFileName);} return $smallFileName;//返回小图路径 } pngthumb("a.png", "c.png", 300, 300);//调用 ?> |
上面我们全部使用的是php自带的函数,没使用任何第三方程序了,有需要的朋友可以看看哦。
相关文章
- 这篇文章主要介绍了C#开发Windows窗体应用程序的简单操作步骤,具有很好的参考价值,希望对大家有所帮助。一起跟随小编过来看看吧...2021-04-12
- 本文通过例子,讲述了C++调用C#的DLL程序的方法,作出了以下总结,下面就让我们一起来学习吧。...2020-06-25
- 这篇文章主要介绍了微信小程序 页面传值详解的相关资料,需要的朋友可以参考下...2017-03-13
- 本文通过两个示例讲解了一下Process类调用外部应用程序的基本用法,并简单讲解了StartInfo属性,有需要的朋友可以参考一下。...2020-06-25
- 大概有如下步骤 新建项目Bejs 新建文件package.json 新建文件Gruntfile.js 命令行执行grunt任务 一、新建项目Bejs源码放在src下,该目录有两个js文件,selector.js和ajax.js。编译后代码放在dest,这个grunt会...2014-06-07
- 这篇文章主要介绍了微信小程序 二维码生成工具 weapp-qrcode详解,教大家如何在项目中引入weapp-qrcode.js文件,通过实例代码给大家介绍的非常详细,需要的朋友可以参考下...2021-10-23
- 这篇文章主要介绍了uniapp微信小程序:key失效的解决方法,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧...2021-01-20
将c#编写的程序打包成应用程序的实现步骤分享(安装,卸载) 图文
时常会写用c#一些程序,但如何将他们和photoshop一样的大型软件打成一个压缩包,以便于发布....2020-06-25- 本文介绍两种使用 php 生成二维码的方法。 (1)利用google生成二维码的开放接口,代码如下: /** * google api 二维码生成【QRcode可以存储最多4296个字母数字类型的任意文本,具体可以查看二维码数据格式】 * @param strin...2015-10-21
- 这篇文章主要介绍了Java生成随机姓名、性别和年龄的实现示例,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧...2020-10-01
- 本文实例讲述了PHP常用的小程序代码段。分享给大家供大家参考,具体如下:1.计算两个时间的相差几天$startdate=strtotime("2009-12-09");$enddate=strtotime("2009-12-05");上面的php时间日期函数strtotime已经把字符串...2015-11-24
- 这篇文章主要介绍了微信小程序 网络请求(GET请求)详解的相关资料,需要的朋友可以参考下...2016-11-22
- 这篇文章主要为大家详细介绍了微信小程序自定义tabbar组件,文中示例代码介绍的非常详细,具有一定的参考价值,感兴趣的小伙伴们可以参考一下...2021-03-14
- 这篇文章主要介绍了C#生成随机数功能,涉及C#数学运算与字符串操作相关技巧,具有一定参考借鉴价值,需要的朋友可以参考下...2020-06-25
- 这篇文章主要给大家介绍了关于微信小程序如何获取图片宽度与高度的相关资料,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧...2021-03-10
- 关于生成唯一数字ID的问题,是不是需要使用rand生成一个随机数,然后去数据库查询是否有这个数呢?感觉这样的话有点费时间,有没有其他方法呢?当然不是,其实有两种方法可以解决。 1. 如果你只用php而不用数据库的话,那时间戳+随...2015-11-24
- 这篇文章主要为大家详细介绍了微信小程序实现点击导航条切换页面,文中示例代码介绍的非常详细,具有一定的参考价值,感兴趣的小伙伴们可以参考一下...2020-11-19
- 这篇文章主要介绍了微信小程序手势操作之单触摸点与多触摸点的相关资料,需要的朋友可以参考下...2017-03-13
- 下面小编就为大家带来一篇jQuery为动态生成的select元素添加事件的方法。小编觉得挺不错的,现在就分享给大家,也给大家做个参考。一起跟随小编过来看看吧...2016-09-01
- 这篇文章主要介绍了微信小程序(应用号)开发新闻客户端实例的相关资料,需要的朋友可以参考下...2016-10-25