zoukankan      html  css  js  c++  java
  • PHP 图片操作(按照指定尺寸压缩,按照比例裁剪)

    提供二个常用的图片处理方法:

    1、按照指定的尺寸压缩图片

       /**
         * 按照指定的尺寸压缩图片
         * @param $source_path  原图路径
         * @param $target_path  保存路径
         * @param $imgWidth     目标宽度
         * @param $imgHeight    目标高度
         * @return bool|string
         */
        function resize_image($source_path,$target_path,$imgWidth,$imgHeight)
        {
            $source_info = getimagesize($source_path);
            $source_mime = $source_info['mime'];
            switch ($source_mime)
            {
                case 'image/gif':
                    $source_image = imagecreatefromgif($source_path);
                    break;
    
                case 'image/jpeg':
                    $source_image = imagecreatefromjpeg($source_path);
                    break;
    
                case 'image/png':
                    $source_image = imagecreatefrompng($source_path);
                    break;
    
                default:
                    return false;
                    break;
            }
            $target_image     = imagecreatetruecolor($imgWidth, $imgHeight); //创建一个彩色的底图
            imagecopyresampled($target_image, $source_image, 0, 0, 0, 0, $imgWidth, $imgHeight, $source_info[0], $source_info[1]);
            //保存图片到本地
            $dir = '../'.$target_path. '/'. date("Ymd") . '/';
            if (!is_dir($dir)) {
                mkdir($dir, 0777);
            }
    
            $fileName = $dir.date("YmdHis").uniqid().'.jpg';
            if(!imagejpeg($target_image,'./'.$fileName)){
                $fileName = '';
            }
            imagedestroy($target_image);
            return $fileName;
        }

    2、按照比例裁剪图片

    /**
         * 图像裁剪
         * @param $title string 原图路径
         * @param $content string 需要裁剪的宽
         * @param $encode string 需要裁剪的高
         * @param $target_path string 需要保存的路径
         */
        function image_cropper($source_path, $target_width, $target_height, $target_path)
        {
            $source_info     = getimagesize($source_path);
            $source_width     = $source_info[0];
            $source_height     = $source_info[1];
            $source_mime     = $source_info['mime'];
            $source_ratio     = $source_height / $source_width;
            $target_ratio     = $target_height / $target_width;
    
    
            if ($source_ratio > $target_ratio) // 源图过高
            {
                $cropped_width = $source_width;
                $cropped_height = $source_width * $target_ratio;
                $source_x = 0;
                $source_y = ($source_height - $cropped_height) / 2;
    
            }elseif ($source_ratio < $target_ratio){  // 源图过宽
    
                $cropped_width = $source_height / $target_ratio;
                $cropped_height = $source_height;
                $source_x = ($source_width - $cropped_width) / 2;
                $source_y = 0;
            }else{ // 源图适中
    
                $cropped_width = $source_width;
                $cropped_height = $source_height;
                $source_x = 0;
                $source_y = 0;
            }
    
            switch ($source_mime)
            {
                case 'image/gif':
                    $source_image = imagecreatefromgif($source_path);
                    break;
    
                case 'image/jpeg':
                    $source_image = imagecreatefromjpeg($source_path);
                    break;
    
                case 'image/png':
                    $source_image = imagecreatefrompng($source_path);
                    break;
    
                default:
                    return false;
                    break;
            }
    
            $target_image = imagecreatetruecolor($target_width, $target_height);
            $cropped_image = imagecreatetruecolor($cropped_width, $cropped_height);
    
            // 裁剪
            imagecopy($cropped_image, $source_image, 0, 0, $source_x, $source_y, $cropped_width, $cropped_height);
            // 缩放
            imagecopyresampled($target_image, $cropped_image, 0, 0, 0, 0, $target_width, $target_height, $cropped_width, $cropped_height);
    
            //保存图片到本地(两者选一)
            $dir = '../../'.$target_path. '/'. date("Ymd") . '/';
            if (!is_dir($dir)) {
                mkdir($dir, 0777);
            }
    
            $fileName = $dir.date("YmdHis").uniqid().'.jpg';
            if(!imagejpeg($target_image,'./'.$fileName)){
                $fileName = '';
            }
            imagedestroy($target_image);
            return $fileName;
        }
  • 相关阅读:
    js汉字转换为阿拉伯数字支持十到十九
    JS中判断是中文数字的函数
    一个JS正则的字符串替换函数
    thinkphp3.2.3使用formdata的多文件上传
    计算列表中的名字出现的订单中的订单总额
    配置ssl使用了不受支持的协议。 ERR_SSL_VERSION_OR_CIPHER_MISMATCH
    IIS8.5中的强制https直接修改web.config文件和顶级域名跳转www和过滤子目录不强制跳转
    关于wordpress4.8中的Twenty Seventeen主题的主题选项增加章节的实现
    excel中统计COUNTIFS的值为0
    thinkphp3.2.3集成phpexcel1.8导出设置单元格合并
  • 原文地址:https://www.cnblogs.com/whoamme/p/7447364.html
Copyright © 2011-2022 走看看