php实现图片缩放,超详细注释

用php实现的处理图片大小。

注释都在代码里,直接看代码吧。
此代码也适用于在网页上查看被处理后的图片,只需将
头部添加header(“content-type:image/png”);
把函数体内末尾的返回值去掉,
并把$outType($des_img,$newname);改成$outType($des_img); 即可。

/**
<?php
//header("content-type:image/png");

 * @todo  把一张图片按照用户定义的高宽进行缩放,并把处理后的图片重命名,放在指定文件夹
 * @param string $width:用户定义的需要处理成的目标宽度
 * @param string $height:用户定义的需要处理的目标高度
 * @param string $filename: 图片的名字
 * @param string $path:可选参数,保存的新图片的路径,若不传值,则默认当前目录
 * @return string $newname: 返回的是处理后的图片的新名字
 */

 function deal($width,$height,$filename,$path=''){

     /* getimagesize 获取图像的数据,返回值是一个数组,
      * arr[0]代表图片的宽度 ,arr[1]代表图片的高度,arr[2]代表图像类型,返回的是数字
      * arr[3] 代表包含图片高宽的字符串,如width='200' height='100',可直接用在html标签里面
      * arr[bits]代表图像的每种颜色的位数,用二进制表示
      * arr[mime]图像的mime信息,如image/png
      * arr[channels]:图像的通道值
      * */
     $arr = getimagesize($filename);

     //判断传入的图片的格式,创建、生成相应的图片格式
     switch ($arr['mime']){//mime获取图像的mime值,用于判断创建图片的格式和生成图片的格式
         case "image/png":
             $srcType = 'imagecreatefrompng';
             $outType = 'imagepng';
             break;
         case "image/gif":
             $srcType = 'imagecreatefromgif';
             $outType = 'imagegif';
             break;
         case "image/jpg":
         case "image/jpeg":
             $srcType = 'imagecreatefromjpeg';
             $outType = 'imagejpeg';
             break;
     }

    $src_img = $srcType($filename);
    $src_w = $arr[0];  //获取传入图片的真实宽度
    $src_h = $arr[1];  //获取传入图片的真实高度
    $des_w = $width;   //用户定义的传入的宽度,即目标宽度
    $des_h = $height;  //用户定义的传入的高度,即目标高度
    $scale_w = $src_w/$des_w;   //获取真实宽度与目标宽度的比例
    $scale_h = $src_h/$des_h;   //获取真实高度与目标高度的比例

    if($src_w <= $des_w && $src_h <= $des_h){
        $true_w = $src_w;
        $true_h = $src_h;
        $des_img = imagecreatetruecolor($true_w, $true_h);

        //若scale_w > scale_h ,即原图片的宽大于高,横向图片,依据宽为基准
    }elseif ($scale_w >= $scale_h){
        $true_w = $src_w/$scale_w;
        $true_h = $src_h/$scale_w;
        $des_img = imagecreatetruecolor($true_w,$true_h);

        //否则就是原图片的高大于宽,竖向图片,则依据高为基准来缩放
    }else{
        $true_w = $src_w/$scale_h;
        $true_h = $src_h/$scale_h;
        $des_img = imagecreatetruecolor($true_w,$true_h);
    }

    imagecopyresized($des_img, $src_img, 0, 0, 0, 0, $true_w, $true_h, $src_w, $src_h);

    //下面是重命名操作后的图片
    $temp = explode('/', $filename);  //把路径、文件名拆分成数组,方便操作,例如:img/new/a.png,被拆分成temp['img','new','a.png'];
    $temp = array_pop($temp);  //通过pop删除操作,返回最后一个参数值,此参数值为图片名字,如a.png
    $ext = substr($temp, strrpos($temp, '.'));//获取图片的后缀名,通过字符串截取,从最后一个.出现的位置截取到末尾,如.png
    $name = substr($temp, 0,strrpos($temp, '.'));//获取图片的名字,通过字符串截取,截取最后一个.出现的位置之前的全部字符,如a
    $truePath = !empty($path) ? $path."/" : ''; //将路径名保存在变量truePath里面

    //如果路径存在,且不为路径名,如c.txt,则创建一个名为c.txt的路径(文件夹);如果路径存在,且为路径名,则执行下一句;如果未传入路径名,则执行下一句
    if(!empty($truePath) && !is_dir($truePath)){
        mkdir($truePath,0777,true);
    }

    //给图片新命名,以路径名+原名字+自定义字符+后缀来命名。图片会存放在相应路径下
    $newname = $truePath.$name."_deal".$ext;
    $outType($des_img,$newname);

    //$outType($des_img);

    return $newname;  
 }
 $des_w = 200;
 $des_h = 250;
 $filename = 'img/100-100.png';
 $name = deal($des_w,$des_h,$filename);
 var_dump($name); 


 ?> 
  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 2
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值