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;
    }
时间: 2024-10-31 09:12:54

PHP 图片操作(按照指定尺寸压缩,按照比例裁剪)的相关文章

压缩图片操作和生成圆形图片

1.对本地相册库或相机拍摄下来的图片进行压缩处理,传进来的参数分别有:要压缩的图片和压缩后的大小. //压缩图片 + (UIImage*)imageWithImageSimple:(UIImage*)image scaledToSize:(CGSize)newSize { // Create a graphics image context UIGraphicsBeginImageContext(newSize); // Tell the old image to draw in this ne

根据尺寸压缩图片

#pragma mark - 获取按尺寸压缩过的新图片 + (UIImage *)getNewImageWithImage:(UIImage *)image size:(CGFloat)tempSize { //获取图片的宽高 CGSize imageSize = image.size; CGFloat imgH = imageSize.height; CGFloat imgW = imageSize.width; if (imgH == imgW) {//如果是正方形 imgW = tempS

Android图片压缩(质量压缩和尺寸压缩)

在网上调查了图片压缩的方法并实装后,大致上可以认为有两类压缩:质量压缩(不改变图片的尺寸)和尺寸压缩(相当于是像素上的压缩):质量压缩一般可用于上传大图前的处理,这样就可以节省一定的流量,毕竟现在的手机拍照都能达到3M左右了,尺寸压缩一般可用于生成缩略图.两种方法都实装在了我的项目中,结果却发现在质量压缩的模块中,本来1.9M的图片压缩后反而变成3M多了,很是奇怪,再做了进一步调查终于知道原因了.下面这个博客说的比较清晰: android图片压缩总结 总结来看,图片有三种存在形式:硬盘上时是fi

Java - MultipartFile图片上传服务器,并且指定大小压缩

1 /*** 2 * 上传图片到服务器 并压缩 3 * 4 * @param myFile 文件 5 * @param request 6 * @return 7 */ 8 private Boolean UploadFile(MultipartFile myFile, int width, int height, HttpServletRequest request) { 9 Boolean sta = false; 10 InputStream is = null; 11 FileOutpu

将图片显示在指定窗口-OpenCV应用系列教程一

1.OpenCV模块划分 OpenCV其实就是一堆用C和C++语言来实现计算机视觉算法的源代码文件:例如C接口函数cvCany()实现了Canny边缘提取算法,我们可以直接将这些源代码添加到自己的软件项目中,而不需要自己去写代码实现Canny算法.同时由于源文件居多,所以根据算法的功能将源文件分到多个模块中(如下),将每个模块中的源文件编译成一个库文件(如opencv_core.lib.opencv_highgui.lib),用户调用时仅将所需的库文件添加到自己的项目中,与自己的源文件一起连接成

一个图片生成多个尺寸的图片

/** * 图片显示处理 * * */ public function handleProductsImg(){ //视频列表 $model_video = new VideoModel(); $where = array(); $where[] = array('video_name','neq',''); $where[] = array('video_id','gt',79); $data1 = $model_video->getVideoAll($where); $pro_ids = a

PHP图片操作

<?php $filename="http://pic.nipic.com/2007-12-06/2007126102233577_2.jpg";//图片地址//获取图片信息$info=getimagesize($filename);//获取图片类型$type=image_type_to_extension($info[2],false);//在内存中建立一个和图片类型一样的图像$fun="imagecreatefrom{$type}";//把图片复制到内存$

C# 中使用 ThoughtWorks.QRCode.dll 生成指定尺寸和边框宽度的二维码

本文介绍在 C# 中使用 ThoughtWorks.QRCode.dll 生成指定尺寸和边框宽度的二维码.网上文章大多只是简单介绍内置参数的设置,根据我的使用目的,增加了自定义目标二维码图片尺寸和白边边框.有需要的朋友们可以试一下,如有bug欢迎指正. 首先,将 ThoughtWorks.QRCode.dll 放在 bin 目录后,在页面中引用: using ThoughtWorks.QRCode.Codec; 生成二维码图片: 1 2 3 4 5 6 7 8 9 10 11 12 13 14

C#图片操作公共库

存一下,以后找起来方便 包括图片加载.压缩.base64等 public static class ImageFun { #region 图片 public static EncoderParameters GetEncoderParas(long picquality) { EncoderParameters eps = new EncoderParameters(1); Encoder ec = Encoder.Quality; EncoderParameter ep = new Encod