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 相关文章推荐
Extended CHM PHP 语法手册之 DIY
Oct 09 PHP
PHP OPCode缓存 APC详细介绍
Oct 12 PHP
php随机显示图片的简单示例
Feb 15 PHP
YII路径的用法总结
Jul 09 PHP
phpnow php探针环境检测代码
Nov 04 PHP
php生成唯一的订单函数分享
Feb 02 PHP
Yii2隐藏frontend/web和backend/web的方法
Dec 12 PHP
使用PHP如何实现高效安全的ftp服务器(一)
Dec 20 PHP
配置Nginx+PHP的正确思路与过程
May 10 PHP
PHP表单验证内容是否为空的实现代码
Nov 14 PHP
PHP设计模式概论【概念、分类、原则等】
May 01 PHP
PHP7 list() 函数修改
Mar 09 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上传apk后自动提取apk包信息的使用(示例下载)
2013/04/26 PHP
phpMyAdmin安装并配置允许空密码登录
2015/07/04 PHP
Yii2 GridView实现列表页直接修改数据的方法
2016/05/16 PHP
Laravel框架生命周期与原理分析
2018/06/12 PHP
详解JavaScript中的4种类型识别方法
2015/09/14 Javascript
VUEJS实战之利用laypage插件实现分页(3)
2016/06/13 Javascript
jquery实现垂直和水平菜单导航栏
2020/08/27 Javascript
jQuery中实现prop()函数控制多选框(全选,反选)
2016/08/19 Javascript
JavaScript实现拖拽元素对齐到网格(每次移动固定距离)
2016/11/30 Javascript
bootstrap模态框实现拖拽效果
2016/12/14 Javascript
javascript基于原型链的继承及call和apply函数用法分析
2016/12/15 Javascript
Vue使用mixins实现压缩图片代码
2018/03/14 Javascript
AngularJS使用Filter自定义过滤器控制ng-repeat去除重复功能示例
2018/04/21 Javascript
微信小程序表单验证form提交错误提示效果
2020/06/19 Javascript
自定义Vue组件打包、发布到npm及使用教程
2019/05/22 Javascript
[57:18]DOTA2上海特级锦标赛主赛事日 - 1 败者组第一轮#3VP VS VG
2016/03/03 DOTA
[02:11]2016国际邀请赛中国区预选赛最美TA采访现场玩家
2016/06/28 DOTA
[22:59]VGJ.S vs VG 2018国际邀请赛小组赛BO2 第二场 8.16
2018/08/17 DOTA
pycharm 使用心得(一)安装和首次使用
2014/06/05 Python
简洁的十分钟Python入门教程
2015/04/03 Python
Python MySQLdb 使用utf-8 编码插入中文数据问题
2018/03/13 Python
Python列表推导式与生成器用法分析
2018/08/02 Python
python实现彩票系统
2020/06/28 Python
python初学者,用python实现基本的学生管理系统(python3)代码实例
2019/04/10 Python
Python第三方库face_recognition在windows上的安装过程
2019/05/03 Python
Python依赖包整体迁移方法详解
2019/08/15 Python
python中通过selenium简单操作及元素定位知识点总结
2019/09/10 Python
使用Python paramiko模块利用多线程实现ssh并发执行操作
2019/12/05 Python
购买美国制造的相框和画框架:Picture Frames
2018/08/14 全球购物
置业顾问岗位职责
2014/03/02 职场文书
职业道德模范事迹材料
2014/08/24 职场文书
关于读书的演讲稿800字
2014/08/27 职场文书
运动会400米加油稿(8篇)
2014/09/22 职场文书
Nginx域名转发使用场景代码实例
2021/03/31 Servers
MySQL索引知识的一些小妙招总结
2021/05/10 MySQL
Android在Sqlite3中的应用及多线程使用数据库的建议
2022/04/24 Java/Android