PHP图片裁剪与缩放示例(无损裁剪图片)


Posted in PHP onFebruary 08, 2017

本文介绍了PHP图片裁剪与缩放示例,废话不多少,具体代码如下:

/*

 *exif_imagetype -- 判断一个图像的类型

 *功能说明:函数功能是把一个图像裁剪为任意大小的图像,并保持图像不变形

 *参数说明:输入 需要处理图片的 文件名,生成新图片的保存文件名,生成新图片的宽,生成新图片的高

 */

 

// 获得任意大小图像,不足地方拉伸,不产生变形,不留下空白

function image_resize($src_file, $dst_file, $new_width, $new_height)

{

  $new_width = intval($new_width);

   

  $new_height = intval($new_width);

   

  if ($new_width < 1 || $new_height < 1)

  {

    echo "params width or height error !";

    exit();

  }

   

  if (!file_exists($src_file))

  {

    echo $src_file . " is not exists !";

    exit();

  }

   

  // 图像类型

  $type = exif_imagetype($src_file);

   

  $support_type = array(IMAGETYPE_JPEG, IMAGETYPE_PNG, IMAGETYPE_GIF);

   

  if (!in_array($type, $support_type, true))

  {

     

    echo "this type of image does not support! only support jpg , gif or png";

    exit();

  }

   

  //Load image

   

  switch($type)

  {

    case IMAGETYPE_JPEG :

       

      $src_img = imagecreatefromjpeg($src_file);

       

      break;

       

    case IMAGETYPE_PNG :

       

      $src_img = imagecreatefrompng($src_file);

       

      break;

       

    case IMAGETYPE_GIF :

       

      $src_img = imagecreatefromgif($src_file);

       

      break;

       

    default :

      echo "Load image error!";

       

      exit();

  }

   

  $w = imagesx($src_img);

   

  $h = imagesy($src_img);

   

  $ratio_w = 1.0 * $new_width / $w;

   

  $ratio_h = 1.0 * $new_height / $h;

   

  $ratio = 1.0;

   

  // 生成的图像的高宽比原来的都小,或都大 ,原则是 取大比例放大,取大比例缩小(缩小的比例就比较小了)

   

  if (($ratio_w < 1 && $ratio_h < 1) || ($ratio_w > 1 && $ratio_h > 1))

  {

     

    if ($ratio_w < $ratio_h) {

       

      $ratio = $ratio_h;

       

      // 情况一,宽度的比例比高度方向的小,按照高度的比例标准来裁剪或放大

       

    } else {

       

      $ratio = $ratio_w;

       

    }

     

    // 定义一个中间的临时图像,该图像的宽高比 正好满足目标要求

     

    $inter_w = (int)($new_width / $ratio);

     

    $inter_h = (int)($new_height / $ratio);

     

    $inter_img = imagecreatetruecolor($inter_w, $inter_h);

     

    //var_dump($inter_img);

     

    imagecopy($inter_img, $src_img, 0, 0, 0, 0, $inter_w, $inter_h);

     

    // 生成一个以最大边长度为大小的是目标图像$ratio比例的临时图像

    // 定义一个新的图像

     

    $new_img = imagecreatetruecolor($new_width, $new_height);

     

    //var_dump($new_img);exit();

    imagecopyresampled($new_img, $inter_img, 0, 0, 0, 0, $new_width, $new_height, $inter_w, $inter_h);

     

    switch($type)

    {

      case IMAGETYPE_JPEG :

         

        // 存储图像

        imagejpeg($new_img, $dst_file, 100);

         

        break;

         

      case IMAGETYPE_PNG :

         

        imagepng($new_img, $dst_file, 100);

         

        break;

         

      case IMAGETYPE_GIF :

         

        imagegif($new_img, $dst_file, 100);

         

        break;

         

      default :

         

        break;

    }

     

  }// end if 1

   

  // 2 目标图像 的一个边大于原图,一个边小于原图 ,先放大平普图像,然后裁剪

   

  // =if( ($ratio_w < 1 && $ratio_h > 1) || ($ratio_w >1 && $ratio_h <1) )

   

  else {

     

    $ratio = $ratio_h > $ratio_w ? $ratio_h : $ratio_w;

     

    //取比例大的那个值

     

    // 定义一个中间的大图像,该图像的高或宽和目标图像相等,然后对原图放大

     

    $inter_w = (int)($w * $ratio);

     

    $inter_h = (int)($h * $ratio);

     

    $inter_img = imagecreatetruecolor($inter_w, $inter_h);

     

    //将原图缩放比例后裁剪

     

    imagecopyresampled($inter_img, $src_img, 0, 0, 0, 0, $inter_w, $inter_h, $w, $h);

     

    // 定义一个新的图像

     

    $new_img = imagecreatetruecolor($new_width, $new_height);

     

    imagecopy($new_img, $inter_img, 0, 0, 0, 0, $new_width, $new_height);

     

    switch($type)

    {

      case IMAGETYPE_JPEG :

         

        // 存储图像

        imagejpeg($new_img, $dst_file, 100);

         

        break;

         

      case IMAGETYPE_PNG :

         

        imagepng($new_img, $dst_file, 100);

        break;

         

      case IMAGETYPE_GIF :

         

        imagegif($new_img, $dst_file, 100);

         

        break;

         

      default :

         

        break;

    }

     

  }// if3

   

}// end function

//输出新图片

image_resize('test.jpg', 'demo.jpg', '1200px', '1200px');

以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持三水点靠木。

PHP 相关文章推荐
libmysql.dll与php.ini是否真的要拷贝到c:\windows目录下呢
Mar 15 PHP
PHP 面向对象 final类与final方法
May 05 PHP
php设计模式 Chain Of Responsibility (职责链模式)
Jun 26 PHP
使用PHP静态变量当缓存的方法
Nov 13 PHP
PHP多线程之内部多线程实例分析
Mar 09 PHP
php提交表单发送邮件的方法
Mar 20 PHP
PHP 7.0.2 正式版发布
Jan 08 PHP
PHP strip_tags() 去字符串中的 HTML、XML 以及 PHP 标签的函数
May 22 PHP
php 判断过去离现在几年的函数(实例代码)
Nov 15 PHP
PHP调试及性能分析工具Xdebug详解
Feb 09 PHP
深入解析Laravel5.5中的包自动发现Package Auto Discovery
Sep 13 PHP
thinkPHP5实现数据库添加内容的方法
Oct 25 PHP
php实现XML和数组的相互转化功能示例
Feb 08 #PHP
PHP 获取指定地区的天气实例代码
Feb 08 #PHP
PHP使用DOM和simplexml读取xml文档的方法示例
Feb 08 #PHP
PHP判断数组是否为空的常用方法(五种方法)
Feb 08 #PHP
PHP基于DOM创建xml文档的方法示例
Feb 08 #PHP
PHP输出XML格式数据的方法总结
Feb 08 #PHP
PHP中大括号'{}'用法实例总结
Feb 08 #PHP
You might like
PHP $_FILES中error返回值详解
2014/01/30 PHP
php正则匹配文章中的远程图片地址并下载图片至本地
2015/09/29 PHP
php添加数据到xml文件的简单例子
2016/09/08 PHP
详解Yii2 rules 的验证规则
2016/12/02 PHP
PHP登录(ajax提交数据和后台校验)实例分享
2016/12/29 PHP
php封装的pdo数据库操作工具类与用法示例
2019/05/08 PHP
js限制文本框输入长度两种限制方式(长度、字节数)
2012/12/19 Javascript
js使浏览器窗口最大化实现代码(适用于IE)
2013/08/07 Javascript
jquery设置元素的readonly和disabled的写法
2013/09/22 Javascript
js中一个函数获取另一个函数返回值问题探讨
2013/11/21 Javascript
javascript检测浏览器的缩放状态实现代码
2014/09/28 Javascript
JS实时弹出新消息提示框并有提示音响起的实现代码
2016/04/20 Javascript
微信小程序实战之运维小项目
2017/01/17 Javascript
js解决软键盘遮挡输入框的问题分享
2017/12/19 Javascript
mac上配置Android环境变量的方法
2018/07/08 Javascript
vue做移动端适配最佳解决方案(亲测有效)
2018/09/04 Javascript
如何检查一个对象是否为空
2019/04/11 Javascript
解决layui-table单元格设置为百分比在ie8下不能自适应的问题
2019/09/28 Javascript
[07:57]DOTA2热力大趴狂欢夜 广州站活动回顾
2013/11/27 DOTA
Python中使用wxPython开发的一个简易笔记本程序实例
2015/02/08 Python
Java与Python两大幸存者谁更胜一筹呢
2018/04/12 Python
总结python中pass的作用
2019/02/27 Python
Python Image模块基本图像处理操作小结
2019/04/13 Python
python列表,字典,元组简单用法示例
2019/07/11 Python
python中seaborn包常用图形使用详解
2019/11/25 Python
解决Keras 自定义层时遇到版本的问题
2020/06/16 Python
css3发光搜索表单分享
2014/04/11 HTML / CSS
电气自动化自荐信
2013/10/10 职场文书
英语感恩演讲稿
2014/01/14 职场文书
心理咨询专业自荐信
2014/07/07 职场文书
教师节感恩老师演讲稿
2014/08/28 职场文书
镇政府副镇长群众路线专题民主生活会对照检查材料
2014/09/19 职场文书
保证金退回承诺函格式
2015/01/21 职场文书
2015年新教师工作总结
2015/04/28 职场文书
离婚答辩状怎么写
2015/05/22 职场文书
春风化雨观后感
2015/06/11 职场文书