PHP批量生成图片缩略图

$image=new image();
echo $image->reImg("images/zht.jpg",75,75,80);
echo "<br/>";
echo $image->reImg("images/m8920.jpg",75,75,80);
echo "<br/>";
echo $image->getimg("./images/s/zht.jpg");

function mkdirs($dirname,$mode=0777)	//创建目录(目录, [模式])
{
	if(!is_dir($dirname))
	{
		mkdirs($dirname,$mode);	//如果目录不存在,递归建立
		return mkdir($dirname,$mode);
	}
	return true;
}

function savefile($filename,$content='')		//保存文件(文件, [内容])
{
	if(function_exists(file_put_contents))
	{
		file_put_contents($filename,$content);
	}
	else
	{
		$fp=fopen($filename,"wb");
		fwrite($fp,$content);
		fclose($fp);
	}
}

function getsuffix($filename)		//获取文件名后缀
{
	return end(explode(".",$filename));
}

function checksuffix($filename,$arr)		//是否为允许类型(当前, 允许)
{
	if(!is_array($arr))
	{
		$arr=explode(",",str_replace(" ","",$arr));
	}
	return in_array($filename,$arr) ? 1 : 0;
}

class image
{
	var $src;			//源地址
	var $newsrc;		//新图路径(本地化后)
	var $allowtype=array(".gif",".jpg",".png",".jpeg");		//允许的图片类型
	var $regif=0;		//是否缩略GIF, 为0不处理
	var $keep=0;		//是否保留源文件(1为保留, 0为MD5)
	var $over=0;		//是否可以覆盖已存在的图片,为0则不可覆盖
	var $dir;			//图片源目录
	var $newdir;		//处理后的目录

	function __construct($olddir=null,$newdir=null)
	{
		$this->dir=$olddir ? $olddir : "./images/temp";
		$this->newdir=$newdir ? $newdir : "./images/s";
	}

	function reNames($src)
	{
		$md5file=substr(md5($src),10,10).strrchr($src,".");	//MD5文件名后(例如:3293okoe.gif)
		$md5file=$this->w."_".$this->h."_".$md5file;	    //处理后文件名
		return $this->newdir."/".$md5file;	//将源图片,MD5文件名后保存到新的目录里
	}

	function Mini($src,$w,$h,$q=80)	//生成缩略图 Mini(图片地址, 宽度, 高度, 质量)
	{
		$this->src=$src;
		$this->w=$w;
		$this->h=$h;
		if(strrchr($src,".")==".gif" && $this->regif==0)	//是否处理GIF图
		{
			return $this->src;
		}
		if($this->keep==0)		//是否保留源文件,默认不保留
		{
			$newsrc=$this->reNames($src);	//改名后的文件地址
		}
		else		//保持原名
		{
			$src=str_replace("\\","/",$src);
			$newsrc=$this->newdir.strrchr($src,"/");
		}
		if(file_exists($newsrc) && $this->over==0)		//如果已存在,直接返回地址
		{
			return $newsrc;
		}
                //如果是网络文件,先保存
		if(strstr($src,"http://") && !strstr($src,$_SERVER['HTTP_HOST'])){
			$src=$this->getimg($src);
		}
		$arr=getimagesize($src);	//获取图片属性
		$width=$arr[0];
		$height=$arr[1];
		$type=$arr[2];
		switch($type){
			case 1:		//1 = GIF,
				$im=imagecreatefromgif($src);
				break;
			case 2:		//2 = JPG
				$im=imagecreatefromjpeg($src);
				break;
			case 3:		//3 = PNG
				$im=imagecreatefrompng($src);
				break;
			default:
				return 0;
		}

		//处理缩略图
		$nim=imagecreatetruecolor($w,$h);
		$k1=round($h/$w,2);
		$k2=round($height/$width,2);
		if($k1<$k2){
			$width_a=$width;
			$height_a=round($width*$k1);
			$sw=0;
			$sh=($height-$height_a)/2;
		}else{
			$width_a=$height/$k1;
			$height_a=$height;
			$sw=($width-$width_a)/2;
                        $sh = 0;
		}

		//生成图片
		if(function_exists(imagecopyresampled))
		{
			imagecopyresampled($nim,$im,0,0,$sw,$sh,$w,$h,$width_a,$height_a);
		}
		else
		{
			imagecopyresized($nim,$im,0,0,$sw,$sh,$w,$h,$width_a,$height_a);
		}
		if(!is_dir($this->newdir))
		{
			mkdir($this->newdir);
		}

		switch($type)		//保存图片
		{
			case 1:
				$rs=imagegif($nim,$newsrc);
				break;
			case 2:
				$rs=imagejpeg($nim,$newsrc,$q);
				break;
			case 3:
				$rs=imagepng($nim,$newsrc);
				break;
			default:
				return 0;
		}
		return $newsrc;		//返回处理后路径
	}

	function getimg($filename)
	{
		$md5file=$this->dir."/".substr(md5($filename),10,10).strrchr($filename,".");
		if(file_exists($md5file))
		{
			return $md5file;
		}
		//开始获取文件,并返回新路径
		$img=file_get_contents($filename);
		if($img)
		{
			if(!is_dir($this->dir))
			{
				mkdir($this->dir);
			}
			savefile($md5file,$img);
			return $md5file;
		}
	}

	function reImg($src,$w,$h,$q)	//转换缩略图(文件名和结构不变)
	{
		$this->keep=1;
		return $this->Mini($src,$w,$h,$q);		//return 生成的地址
	}

}





转载于:https://my.oschina.net/PepDiIYNVCkD/blog/616874

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
完整版:https://download.csdn.net/download/qq_27595745/89522468 【课程大纲】 1-1 什么是java 1-2 认识java语言 1-3 java平台的体系结构 1-4 java SE环境安装和配置 2-1 java程序简介 2-2 计算机中的程序 2-3 java程序 2-4 java类库组织结构和文档 2-5 java虚拟机简介 2-6 java的垃圾回收器 2-7 java上机练习 3-1 java语言基础入门 3-2 数据的分类 3-3 标识符、关键字和常量 3-4 运算符 3-5 表达式 3-6 顺序结构和选择结构 3-7 循环语句 3-8 跳转语句 3-9 MyEclipse工具介绍 3-10 java基础知识章节练习 4-1 一维数组 4-2 数组应用 4-3 多维数组 4-4 排序算法 4-5 增强for循环 4-6 数组和排序算法章节练习 5-0 抽象和封装 5-1 面向过程的设计思想 5-2 面向对象的设计思想 5-3 抽象 5-4 封装 5-5 属性 5-6 方法的定义 5-7 this关键字 5-8 javaBean 5-9 包 package 5-10 抽象和封装章节练习 6-0 继承和多态 6-1 继承 6-2 object类 6-3 多态 6-4 访问修饰符 6-5 static修饰符 6-6 final修饰符 6-7 abstract修饰符 6-8 接口 6-9 继承和多态 章节练习 7-1 面向对象的分析与设计简介 7-2 对象模型建立 7-3 类之间的关系 7-4 软件的可维护与复用设计原则 7-5 面向对象的设计与分析 章节练习 8-1 内部类与包装器 8-2 对象包装器 8-3 装箱和拆箱 8-4 练习题 9-1 常用类介绍 9-2 StringBuffer和String Builder类 9-3 Rintime类的使用 9-4 日期类简介 9-5 java程序国际化的实现 9-6 Random类和Math类 9-7 枚举 9-8 练习题 10-1 java异常处理 10-2 认识异常 10-3 使用try和catch捕获异常 10-4 使用throw和throws引发异常 10-5 finally关键字 10-6 getMessage和printStackTrace方法 10-7 异常分类 10-8 自定义异常类 10-9 练习题 11-1 Java集合框架和泛型机制 11-2 Collection接口 11-3 Set接口实现类 11-4 List接口实现类 11-5 Map接口 11-6 Collections类 11-7 泛型概述 11-8 练习题 12-1 多线程 12-2 线程的生命周期 12-3 线程的调度和优先级 12-4 线程的同步 12-5 集合类的同步问题 12-6 用Timer类调度任务 12-7 练习题 13-1 Java IO 13-2 Java IO原理 13-3 流类的结构 13-4 文件流 13-5 缓冲流 13-6 转换流 13-7 数据流 13-8 打印流 13-9 对象流 13-10 随机存取文件流 13-11 zip文件流 13-12 练习题 14-1 图形用户界面设计 14-2 事件处理机制 14-3 AWT常用组件 14-4 swing简介 14-5 可视化开发swing组件 14-6 声音的播放和处理 14-7 2D图形的绘制 14-8 练习题 15-1 反射 15-2 使用Java反射机制 15-3 反射与动态代理 15-4 练习题 16-1 Java标注 16-2 JDK内置的基本标注类型 16-3 自定义标注类型 16-4 对标注进行标注 16-5 利用反射获取标注信息 16-6 练习题 17-1 顶目实战1-单机版五子棋游戏 17-2 总体设计 17-3 代码实现 17-4 程序的运行与发布 17-5 手动生成可执行JAR文件 17-6 练习题 18-1 Java数据库编程 18-2 JDBC类和接口 18-3 JDBC操作SQL 18-4 JDBC基本示例 18-5 JDBC应用示例 18-6 练习题 19-1 。。。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值