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;
        }
  • 相关阅读:
    洛谷P1622 释放囚犯(dp好题)
    精灵魔法(vector逆序对,离散化数状数组)
    十大排序方法
    线段树总结(萌新必看)
    【BZOJ4145】[AMPPZ2014]The Prices 状压dp
    TJOI2013 奖学金—大根堆实现(洛谷P3963)
    APIO强掠计划(spfa+tarjan缩点)
    火车运输(最大生成树+lca) 洛谷P1967
    计算机网络基础知识总结(二)
    测试用例--“好的”测试用例
  • 原文地址:https://www.cnblogs.com/whoamme/p/7447364.html
Copyright © 2011-2022 走看看