使用GD库实现图片处理工具函数

 

<?php 
 /* img_deal(String $file,String $save,Array $options)参数
    $file 用户上传文件的路径
    $save 保存的路径

    $options参数:
    - type 裁切(clip)或者是缩放(scale) 默认裁切

    - scale参数 (至少写一个参数)
      - scale_w 缩放后的宽度 (如果只设置其中一值则按原图比例缩放)
      - scale_h 缩放后的高度

    - clip参数 (全都得写)
      - clip_w 裁切后的宽度
      - clip_h 裁切后的高度
      - clip_x 裁切起点x坐标(以图片左上顶点为原点,向下y正方向,向右x正方向)
      - clip_y 裁切起点y坐标
 */
function img_deal($file,$save,$options){

    //上传的原图片
    $img_src = imagecreatefromjpeg($file);
    //原图片的宽高
    $src_w = imagesx($img_src);
    $src_h = imagesy($img_src);
    
    switch ($options['type']) {
        case 'scale':
            if(is_numeric($options['scale_w']) && is_numeric($options['scale_h'])){
                $dist_w = $options['scale_w'];
                $dist_h = $options['scale_h'];
            }elseif(is_numeric($options['scale_w'])){
                $dist_w = $options['scale_w'];
                $dist_h = $src_h*$dist_w/$src_w;
            }elseif(is_numeric($options['scale_h'])){
                $dist_h = $options['scale_h'];
                $dist_w = $src_w*$dist_h/$src_h;
            }else{
                echo 'Image deal is Failed<br>';
                return false;
            }
            //设置目标图片大小
            $img_dist = imagecreatetruecolor($dist_w,$dist_h);
            //图片进行处理
            imagecopyresampled($img_dist, $img_src, 0, 0, 0, 0, $dist_w, $dist_h, $src_w, $src_h);

            break;
        
        default:
            //设置目标图片大小
            $img_dist = imagecreatetruecolor($options['clip_w'],$options['clip_h']);
            $keys = array_keys($options);
            $str = implode($keys, ',');
            preg_match_all('/clip_/', $str, $matches);
            if(count($matches[0]) !== 4){
                echo 'Image deal is Failed<br>';
                return false;
            }

            //图片进行处理
            imagecopyresampled($img_dist, $img_src, 0, 0, $options['clip_x'], $options['clip_y'], $options['clip_w'], $options['clip_h'], $options['clip_w'], $options['clip_h']);
            
            break;
            
    }
    //将图片保存
    $status = imagejpeg($img_dist,$save);
    if($status){
        echo 'Image deal is Success<br>';
    }else{
        echo 'Image deal is Failed<br>';
    }
    //释放内存空间
    imagedestroy($img_dist);
    imagedestroy($img_src);

    //返回保存状态结果
    return $status;

}

?>

  

posted @ 2022-09-26 19:07  豆浆不要油条  阅读(31)  评论(0编辑  收藏  举报