PHP 切图程序修订

<?php
/**
 * 将大图片自动切割成一定比例的小图片
 * 并按照一定规则给小图片命名
 * 
 * 使用方法:
 * 先拷贝大图片到init文件夹下 命名为 1.jpg , 2.jpg .....
 * 浏览器输入地址 img.php
 * 生成小图片于文件夹 temp/zoom1,temp/zoom2.... 下面
 * 
 * 注:需要GD2支持
 * 作者:阿义
 
*/

header("Cache-Control:no-cache,must-revalidate"); //不使用缓存
//要切割的图片

if (isset($_GET['flag'])) {
    
$flag=$_GET['flag'];
}
else {
    
$flag=1;
}
$filename="init/".$flag.".jpg";//大图文件
$tempdir="temp/zoom".$flag;//小图存放目录

//判断文件是否存在 不存在就切割完毕

if(!file_exists($filename)){
    
if($flag==1){
        
exit('<p align=center>请确认大图是否位于map/init 下并命名为 1.jpg,2.jpg.......</p>');
    }
else{
        
exit('<p align=center>图片切割完毕</p>');
    }
}
else{
    
if(!file_exists($tempdir)) mkdir($tempdir);
    
echo "<p align=center>正在切割第".$flag."张大图</p>";
}

/********************************************************************/
$picW=256;                                    //切割小图的宽
$picH=256;                                    //切割小图的高
ini_set'memory_limit', '220M' );            //为支持大图片增加内存限制
/*
*******************************************************************/

//获取大图片的属性
list($width, $height, $type, $attr= getimagesize($filename);
//从$filename创建一新图像
$image = imagecreatefromjpeg($filename);

//循环截取大图中的每一部分,生成小图
for ($i=0;$i<ceil($width/$picW);$i++){
    
for ($j=0;$j<ceil($height/$picH);$j++){
        
$im = @imagecreatetruecolor($picW, $picH) or die("Cannot Initialize new GD image stream");//创建小图像
        $colBG = imagecolorallocate($im, 255, 255, 255);//白色背景
        imagefill( $im, 0, 0, $colBG );//加白色背景
        $picX=($picW*($i+1))<$width?$picW:($picW+$width-$picW*($i+1));//获取截取图片的宽度
        $picY=($picH*($j+1))<$height?$picH:($picH+$height-$picH*($j+1));//获取截取图片的高度
        imagecopy ( $im, $image, 0, 0, ($picW*$i), ($picH*$j), $picX, $picY );//拷贝大图片的一部分到小图片
        imagejpeg($im,$tempdir."/".$j.",".$i.".jpg",75);//创建小图片到磁盘,输出质量为75(0~100)
    }
}
imagedestroy(
$im);//释放与 $im 关联的内存
imagedestroy($image);//释放与 $image 关联的内存
//跳转到下一张大图

echo "<script language='JavaScript'>window.location.href='img.php?flag=".($flag+1)."'</script>";
?>
 
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值