全网整合营销服务商

电脑端+手机端+微信端=数据同步管理

免费咨询热线:400-708-3566

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

本文介绍了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  # 图片缩放  # 裁剪图片  # php调整图片大小  # php使用imagick模块实现图片缩放、裁剪、压缩示例  # php图片的裁剪与缩放生成符合需求的缩略图  # php初学者教程之图片缩放和裁剪  # 的是  # 大比例  # 则是  # 较小  # 就比  # 大家多多  # 大平  # 不变形  # 高宽比  # exists  # exit  # file_exists  # gif  # array  # support  # jpg  # IMAGETYPE_PNG  # IMAGETYPE_JPEG  # in_array  # IMAGETYPE_GIF 


相关文章: 如何自定义建站之星网站的导航菜单样式?  整人网站在线制作软件,整蛊网站退不出去必须要打我是白痴才能出去?  如何在宝塔面板创建新站点?  建站之星CMS建站配置指南:模板选择与SEO优化技巧  存储型VPS适合搭建中小型网站吗?  制作证书网站有哪些,全国城建培训中心证书查询官网?  建站之星如何取消后台验证码生成?  php json中文编码为null的解决办法  ,南京靠谱的征婚网站?  网站建设设计制作营销公司南阳,如何策划设计和建设网站?  无锡营销型网站制作公司,无锡网选车牌流程?  css网站制作参考文献有哪些,易聊怎么注册?  Python多线程使用规范_线程安全解析【教程】  电商平台网站制作流程,电商网站如何制作?  如何基于PHP生成高效IDC网络公司建站源码?  网站制作企业,网站的banner和导航栏是指什么?  如何快速生成凡客建站的专业级图册?  宁波免费建站如何选择可靠模板与平台?  如何设计高效校园网站?  建站主机空间推荐 高性价比配置与快速部署方案解析  齐河建站公司:营销型网站建设与SEO优化双核驱动策略  建站主机是否等同于虚拟主机?  网站建设制作需要多少钱费用,自己做一个网站要多少钱,模板一般多少钱?  如何通过虚拟主机快速搭建个人网站?  *服务器网站为何频现安全漏洞?  建站之星安装失败:服务器环境不兼容?  外贸公司网站制作,外贸网站建设一般有哪些步骤?  品牌网站制作公司有哪些,买正品品牌一般去哪个网站买?  c++怎么编写动态链接库dll_c++ __declspec(dllexport)导出与调用【方法】  建站之星安装后如何自定义网站颜色与字体?  制作网站软件推荐手机版,如何制作属于自己的手机网站app应用?  Android自定义listview布局实现上拉加载下拉刷新功能  如何在自有机房高效搭建专业网站?  宝华建站服务条款解析:五站合一功能与SEO优化设置指南  如何选购建站域名与空间?自助平台全解析  合肥做个网站多少钱,合肥本地有没有比较靠谱的交友平台?  如何规划企业建站流程的关键步骤?  建站主机选购指南与交易推荐:核心配置解析  如何通过商城免费建站系统源码自定义网站主题?  清除minerd进程的简单方法  关于BootStrap modal 在IOS9中不能弹出的解决方法(IOS 9 bootstrap modal ios 9 noticework)  实惠建站价格推荐:2025年高性价比自助建站套餐解析  网站代码制作软件有哪些,如何生成自己网站的代码?  北京网站制作网页,网站升级改版需要多久?  h5在线制作网站电脑版下载,h5网页制作软件?  宝塔面板创建网站无法访问?如何快速排查修复?  太平洋网站制作公司,网络用语太平洋是什么意思?  如何高效搭建专业期货交易平台网站?  企业在线网站设计制作流程,想建设一个属于自己的企业网站,该如何去做?  建站之星图片链接生成指南:自助建站与智能设计教程 

您的项目需求

*请认真填写需求信息,我们会在24小时内与您取得联系。