Top

php压缩裁剪图片输出

2021-06-26

有没有做项目的时候发现一些图片需要在封面缩略图展示?

如果说是外链的云储存有图片的处理样式、但是本地上传需要怎么处理呢

接下来贴上代码

创建一个函数

/**
 * @param $srcImage 原图片路径
 * @param $toFile   裁剪后图片路径
 * @param int $maxWidth   裁剪最大的宽度
 * @param int $maxHeight  裁剪后最大的高度
 * @param int $imgQuality 图片的质量
 * @return bool|string|void
 */
function resize($srcImage,$toFile,$maxWidth = 640,$maxHeight = 480,$imgQuality=80)
{
    list($width, $height, $type, $attr) = getimagesize($srcImage);
    if($width < $maxWidth  || $height < $maxHeight) return ;
    switch ($type) {//判断图片类别
        case 1: $img = imagecreatefromgif($srcImage); break;
        case 2: $img = imagecreatefromjpeg($srcImage); break;
        case 3: $img = imagecreatefrompng($srcImage); break;
    }
    $scale = min($maxWidth/$width, $maxHeight/$height);
    if($scale < 1) {
        $newWidth = floor($scale*$width);
        $newHeight = floor($scale*$height);
        $newImg = imagecreatetruecolor($newWidth, $newHeight);
        imagecopyresampled($newImg, $img, 0, 0, 0, 0, $newWidth, $newHeight, $width, $height);
        $newName = "";
        $toFile = preg_replace("/(.gif|.jpg|.jpeg|.png)/i","",$toFile);
        switch($type) {
            case 1: if(imagegif($newImg, "$toFile$newName.gif", $imgQuality))
                return "$toFile$newName.gif"; break;
            case 2: if(imagejpeg($newImg, "$toFile$newName.jpg", $imgQuality))
                return "$toFile$newName.jpg"; break;
            case 3: if(imagepng($newImg, "$toFile$newName.png", $imgQuality))
                return "$toFile$newName.png"; break;
            default: if(imagejpeg($newImg, "$toFile$newName.jpg", $imgQuality))
                return "$toFile$newName.jpg"; break;
        }
        imagedestroy($newImg);
    }
    imagedestroy($img);
    return false;
}

这里用thinkphp的方法为例

public function img()
{
    $url=preg_replace("/(.*)".$_SERVER['HTTP_HOST']."\//i","",input('url'));
    $w=dingyi(input('w'),'640');
    $h=dingyi(input('h'),'480');
    $imgQuality=dingyi(input('img'),'70');
    
    $toFile='uploads/runtime/'.$w.'_'.$h.'_'.preg_replace("/\//i","",$url);//uploads/runtime是路径没有需要创建
    // 判断是否本地
    if (parse_url(input('url'))['host']==$_SERVER['HTTP_HOST']) {
        if(is_file('./'.$toFile)){
            $img = $toFile;
        }else{
            $img = resize($url,$toFile,$w,$h,'100');
            if(!$img){
                $img = $url;
            }
        }
    } else {
        $img = input('url').'?imageView2/2/w/'.$w.'/h/'.$h.'/format/jpg/q/'.$imgQuality.'';
    }
    $info = getimagesize($img);
    $imgExt = image_type_to_extension($info[2], false);  //获取文件后缀
    $fun = "imagecreatefrom{$imgExt}";
    $imgInfo = $fun($img);
    header("Content-type: image/png"); 
    $quality = 100;
    if($imgExt == 'png') $quality = 10;
    $getImgInfo = "image{$imgExt}";
    $getImgInfo($imgInfo, null, $quality);
    imagedestroy($imgInfo);
}

然后调用这个方法

<img src="您的方法地址?url=图片地址&w=宽度&h=高度&img=图片的质量1-100">

这个压缩裁剪图片如果是本地的图片就按照自己设置的大小进行、如果是远程七牛就用七牛的方法进行

这就是php把图片进行压缩裁剪并且输出的全部内容


加入我们

如果您有建站需求需要详谈可以留言给我们,我们将会第一时间给您取得联系,还可以添加QQ 1340828870 或者微信 mixinwangluo 与我们实时交谈