php生成缩略图的类代码


Posted in PHP onOctober 02, 2008

<?php

/**
* 功能:生成缩略图
* 作者:phpox
* 日期:Thu May 17 09:57:05 CST 2007
*/

class CreatMiniature
{
//公共变量
var $srcFile=""; //原图
var $echoType; //输出图片类型,link--不保存为文件;file--保存为文件
var $im=""; //临时变量
var $srcW=""; //原图宽
var $srcH=""; //原图高

//设置变量及初始化
function SetVar($srcFile,$echoType)
{
if (!file_exists($srcFile)){
echo '源图片文件不存在!';
exit();
}
$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)
{
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 相关文章推荐
PHP分页显示制作详细讲解
Dec 05 PHP
PHP实现定时生成HTML网站首页实例代码
Nov 20 PHP
PHP IF ELSE简化/三元一次式的使用
Aug 22 PHP
关于UEditor编辑器远程图片上传失败的解决办法
Aug 31 PHP
PHP 下载文件时自动添加bom头的方法实例
Jan 10 PHP
thinkphp3查询mssql数据库乱码解决方法分享
Feb 11 PHP
php将textarea数据提交到mysql出现很多空格的解决方法
Dec 19 PHP
php实现XSS安全过滤的方法
Jul 29 PHP
php自定义类fsocket模拟post或get请求的方法
Jul 31 PHP
PHP批量去除BOM头内容信息代码
Mar 11 PHP
PHP使用glob方法遍历文件夹下所有文件的实例
Oct 17 PHP
在Laravel 中实现是否关注的示例
Oct 22 PHP
PHP实时显示输出
Oct 02 #PHP
PHP在字符串中查找指定字符串并删除的代码
Oct 02 #PHP
php之对抗Web扫描器的脚本技巧
Oct 01 #PHP
利用PHP制作简单的内容采集器的原理分析
Oct 01 #PHP
php数组总结篇(一)
Sep 30 #PHP
PHP EOT定界符的使用详解
Sep 30 #PHP
40个迹象表明你还是PHP菜鸟
Sep 29 #PHP
You might like
php快速url重写 更新版[需php 5.30以上]
2010/04/20 PHP
php微信公众平台示例代码分析(二)
2016/12/06 PHP
PHP利用Socket获取网站的SSL证书与公钥
2017/06/18 PHP
php写入txt乱码的解决方法
2019/09/17 PHP
tp5 sum某个字段相加得到总数的例子
2019/10/18 PHP
jQuery选择没有colspan属性的td的代码
2010/07/06 Javascript
JS动态获取当前时间,并写到特定的区域
2013/05/03 Javascript
JavaScript地图拖动功能SpryMap的简单实现
2013/07/17 Javascript
JS限制Textarea文本域字符个数的具体实现
2013/08/02 Javascript
js 将json字符串转换为json对象的方法解析
2013/11/13 Javascript
使用Node.js实现一个简单的FastCGI服务器实例
2014/06/09 Javascript
JS实现网页右侧带动画效果的伸缩窗口代码
2015/10/29 Javascript
jQuery使用$.each遍历json数组的简单实现方法
2016/04/18 Javascript
基于Bootstrap实现图片轮播效果
2016/05/22 Javascript
JQuery异步提交表单与文件上传功能示例
2017/01/12 Javascript
Jil,高效的json序列化和反序列化库
2017/02/15 Javascript
微信小程序实现点击返回顶层的方法
2017/07/12 Javascript
react 父组件与子组件之间的值传递的方法
2017/09/14 Javascript
vue轮播图插件vue-concise-slider的使用
2018/03/13 Javascript
vue tab滚动到一定高度,固定在顶部,点击tab切换不同的内容操作
2020/07/22 Javascript
浅谈Python基础之I/O模型
2017/05/11 Python
Python一键安装全部依赖包的方法
2019/08/12 Python
python读取excel进行遍历/xlrd模块操作
2020/07/12 Python
Python3.7安装pyaudio教程解析
2020/07/24 Python
Lookfantastic台湾:英国彩妆美发保养购物网
2018/03/26 全球购物
DataReader和DataSet的异同
2014/12/31 面试题
介绍一下MD5加密算法
2016/11/12 面试题
机械设计及其自动化专业推荐信
2013/10/31 职场文书
厨师岗位职责
2013/11/12 职场文书
行政人员工作职责
2013/12/05 职场文书
美德好少年主要事迹
2014/01/29 职场文书
酒店节能减排方案
2014/05/26 职场文书
员工试用期自我评价
2014/09/18 职场文书
2016年寒假政治学习心得体会
2015/10/09 职场文书
《我是什么》教学反思
2016/02/16 职场文书
教你怎么用Python监控愉客行车程
2021/04/29 Python