• 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;
        }
  • 相关阅读:
    UINavigationController的简单使用
    UIApplication
    NSOperation开启线程情况分析
    NSOperation & NSOperationQueue
    GCD 多线程 Ios 补充
    GCD中不同队列 配合 不同函数的 情况分析
    GCD详解
    is,as,sizeof,typeof,GetType
    人人必知的10个jQuery小技巧
    移动设备wap手机网页html5通过特殊链接:打电话,发短信,发邮件详细教程
  • 原文地址:https://www.cnblogs.com/whoamme/p/7447364.html
Copyright © 2020-2023  润新知