【www.gdgbn.com--元旦图片】
这款教程会用到php文件
view.php
config.php
funs.php
index.php
功能:
-----------------------
1.为文件夹里的图片生成指定大小缩略图
2.列出子文件夹, 可以指定生生某文件夹生成
3.为方便不同大小的缩图生成,图片保存到新的目录,而目录结构不变
实现:
-----------------------
1.图片原文件夹 $image
2.处理后保存在 $newimage
保持目录结构和文件名不变(方便调用)
3.如果在新的文件夹里图片已经存在,直接跳过
操作界面:
-----------------------
1.$image 输入框
2.$newimage 输入框(若没填写,刚为当前目录平级的以缩略大小为文件名的目录)
3.按扭"搜索",列出所有文件夹,生成缓存,写到文件.
4.生成. 生成子目录
*/
?>
//index.php代码
/* +-------------------------------------------------------------+
* | copyright (c) 2008-2009 yese.in all rights reserved.
* +-------------------------------------------------------------+
* | author: wbsifan
* +-------------------------------------------------------------+
* | filename : index.php v0.1
* | update : 2008-07-01
* | content : 生成缩略图
* +-------------------------------------------------------------+
*/
//只处理文件名中含有small的文件,如果处理所有文件,请设置为 "."
$only = ".";
//如果不希望覆盖已经存在的图片 将此行设为0;
$over = 1;
//是否处理gif图,0为不处理
$regif = 1;
$c = require("config.php");
require("funs.php");
if($_get["do"]=="start"){
$file = array();
$dir = $_post["dir"];
$newdir = $_post["newdir"];
$w = intval($_post["w"]);
$h = intval($_post["h"]);
$d = @dir($dir) or die("目录不存在!");
$config = """.$dir."","newdir"=>"".$newdir."","w"=>"".$w."","h"=>"".$h.""); ?>";
savefile("config.php", $config);
while ($a=$d->read()){
$type = substr(strrchr($a,"."),1);
if($a!=="." && $a!==".."){
if(is_dir($dir."/".$a)){
$zdir[]=$a;
} elseif($type=="jpg" || $type=="gif" || $type=="bmp" || $type=="png") {
if(strstr($a, $only)){
$file[]=$dir."/".$a;
}
}
}
}
$rand = rand(100,999);
$img = new image($dir, $newdir);
$img->over = $over;
$img->regif= $regif;
echo "";
foreach ($file as $key){
$src = $img->reimg($key, $w, $h);
echo "";
}
echo "";
die("
");
}
?>
©2008 wbsifan
//funs.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);
}
}
//config.php代码
return array("dir"=>"./images","newdir"=>"./thumb","w"=>"200","h"=>"200");
//view.php代码
?>
©2008 http://www.111cn.net/phper/php.html" target=_blank>php教程