php 批量生成缩略图代码
<?php
//创建目录(目录, [模式])
function mkdirs($l1, $l2 = 0777) {
if (!is_dir($l1)) {
//如果目录不存在,递归建立
mkdirs(dirname($l1) , $l2);
return @mkdir($l1, $l2);
}
return true;
}
//保存文件(文件, [内容])
function savefile($l1, $l2 = '') {
if (function_exists(file_put_contents)) {
file_put_contents($l1, $l2);
} else {
$fp = @fopen($l1, 'wb');
@fwrite($fp, $l2);
fclose($fp);
}
}
//获取文件后缀(文件)
function getfix($l1) {
return end(explode('.', $l1));
}
//是否为允许类型(当前, 允许)
function checkfix($l1, $l2) {
if (!is_array($l2)) {
$l2 = explode(',', str_replace(' ', '', $l2));
}
return in_array($l1, $l2) ? 1 : 0;
}
class image {
//源地址
var $src;
//新图路径(本地化后)
var $newsrc;
//允许的图类型
var $allowtype = array(
'.jpg',
'.gif',
'.png',
'.jpeg'
);
//是否缩略GIF, 为0不处理
var $regif = 0;
//是否保留源文件(1为保留, 0为MD5)
var $keep = 0;
//是否可以覆盖已存在的图片,为0则不可覆盖
var $over = 0;
//图片源目录
var $dir;
//处理后的目录
var $newdir;
function __construct($l1 = null, $l2 = null) {
$this->dir = $l1 ? $l1 : "./images/temp";
$this->newdir = $l2 ? $l2 : "./images/s";
}
function image($l1 = null, $l2 = null) {
$this->__construct($l1, $l2);
}
/**
* 处理后的文件路径
* 将源图片,MD5文件名后保存到新的目录里
*
* @ param rename()
* @ return 处理后的文件名
*/
function reName($src) {
//MD5后文件名(例如:3293okoe.gif)
$l1 = substr(md5($src) , 10, 10) . strrchr($src, ".");
//处理后文件名
$l1 = $this->w . '_' . $this->h . '_' . $l1;
//返回处理后的地址
return $this->newdir . '/' . $l1;
}
/**
* 生成缩略图
*
* @ param Mini(图片地址, 宽度, 高度, 质量)
* 如果要保留原来的文件名,请设置 $o->keep = 1;
* @ return 处理后的图片地址
*/
function Mini($src, $w, $h, $q = 80) {
$this->src = $src;
$this->w = $w;
$this->h = $h;
//是否处理GIF图
if (strrchr($src, ".") == ".gif" && $this->regif == 0) {
return $this->src;
}
//是否保留原文件名,默认不保留
if (!$this->keep) {
//改名后的文件地址
$newsrc = $this->reName($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);
$ow = $arr[0];
$oh = $arr[1];
$ot = $arr[2];
switch ($ot) {
case 1:
$im = imagecreatefromgif($src);
break;
case 2:
$im = imagecreatefromjpeg($src);
break;
case 3:
$im = imagecreatefrompng($src);
break;
default:
return 0;
}
//处理缩略图
$nim = imagecreatetruecolor($w, $h);
$k1 = round($h / $w, 2);
$k2 = round($oh / $ow, 2);
if ($k1 < $k2) {
$oow = $ow;
$ooh = round($ow * $k1);
$sw = 0;
$sh = ($oh - $ooh) / 2;
} else {
$oow = $oh / $k1;
$ooh = $oh;
$sw = ($ow - $oow) / 2;
$sh = 0;
}
//生成图片
if (function_exists(imagecopyresampled)) {
imagecopyresampled($nim, $im, 0, 0, $sw, $sh, $w, $h, $oow, $ooh);
} else {
imagecopyresized($nim, $im, 0, 0, $sw, $sh, $w, $h, $oow, $ooh);
}
//处理后的目录是否存在
if (!is_dir($this->newdir)) {
@mkdir($this->newdir);
}
//保存图片
switch ($ot) {
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;
}
/**
* 保存网络图片
*
* @ param getImg(源图)
* @ return 保存后的本地址址(本地目录的MD5文件名)
*/
function getimg($l1) {
$l2 = $this->dir . '/' . substr(md5($l1) , 10, 10) . strrchr($l1, ".");
//文件存在,直接返回地址
if (file_exists($l2)) {
//echo "exits...";
return $l2;
}
//开始获取文件,并返回新路径
$img = file_get_contents($l1);
if ($img) {
if (!is_dir($this->dir)) {
@mkdir($this->dir);
}
savefile($l2, $img);
//echo "file_get..";
return $l2;
}
}
/**
* 转换缩略图(文件名和结构不变)
*
* @ param mini(源地址, 宽度, 高度, 质量 )
* @ return 生成的地址
*/
function reImg($src, $w, $h, $q = 80) {
$this->keep = 1;
return $this->Mini($src, $w, $h, $q);
}
}永久链接:http://www.phprm.com/code/4067e2765d7105d3190d1c29f26ef33e.html
转载随意!带上文章地址吧。