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、付费专栏及课程。

余额充值