文档章节

php压缩图片类,用gd库函数,吸取网上前辈精华加自己修改

 就叫昵称
发布于 2015/12/30 15:02
字数 562
阅读 99
收藏 0

上传图片时候后台等比例压缩,可以节省带宽,适用于上传头像或者某些可以压缩的图片,相册的话不建议使用

项目中用到了一个图片压缩,本来打算用imagemagick,但是考虑到需要在服务器端安装太多插件,为了一个程序太麻烦了,感谢网上前辈的恩惠,搜到了一段直接拿来用,出处不详,贴出来大家共勉

function resizeImage($im,$maxwidth,$maxheight,$name,$filetype)
 {
  $pic_width = imagesx($im);
  $pic_height = imagesy($im);
 
  if(($maxwidth && $pic_width > $maxwidth) || ($maxheight && $pic_height > $maxheight))
  {
   if($maxwidth && $pic_width>$maxwidth)
   {
    $widthratio = $maxwidth/$pic_width;
    $resizewidth_tag = true;
   }
 
   if($maxheight && $pic_height>$maxheight)
   {
    $heightratio = $maxheight/$pic_height;
    $resizeheight_tag = true;
   }
 
   if($resizewidth_tag && $resizeheight_tag)
   {
    if($widthratio<$heightratio)
     $ratio = $widthratio;
    else
     $ratio = $heightratio;
   }
 
   if($resizewidth_tag && !$resizeheight_tag)
    $ratio = $widthratio;
   if($resizeheight_tag && !$resizewidth_tag)
    $ratio = $heightratio;
 
   $newwidth = $pic_width * $ratio;
   $newheight = $pic_height * $ratio;
 
   if(function_exists("imagecopyresampled"))
   {
    $newim = imagecreatetruecolor($newwidth,$newheight);//PHP系统函数
      imagecopyresampled($newim,$im,0,0,0,0,$newwidth,$newheight,$pic_width,$pic_height);//PHP系统函数
   }
   else
   {
    $newim = imagecreate($newwidth,$newheight);
      imagecopyresized($newim,$im,0,0,0,0,$newwidth,$newheight,$pic_width,$pic_height);
   }
 
   $name = $name.$filetype;
   imagejpeg($newim,$name);
   imagedestroy($newim);
  }
  else
  {
   $name = $name.$filetype;
   imagejpeg($im,$name);
  }
 }

 

 

使用方法


        $pathimg="图片地址路径加完整扩展名";
        $patharr=pathinfo($pathimg); //判断图片类型,我这里只需要四种,如果需要的朋友们可以使用其他,自己添加进去即可
        switch ($patharr['extension']) {
          case 'jpg':
                $im=imagecreatefromjpeg($pathimg);
                break;
          case 'jpeg':
                $im=imagecreatefromjpeg($pathimg);
                break;
          case 'gif':
                $im=imagecreatefromgif($pathimg);
                break;
          case 'png':
                $im=imagecreatefrompng($pathimg);
                break;
        }
       
        $maxwidth="600";//设置图片的最大宽度
        $maxheight="600";//设置图片的最大高度
        $name=$pathimg;//图片的名称,随便取吧
        $filetype="";//图片类型 如果想要限制图片类型为特定格式,那$name用一个basename去掉扩展名,这里填写后缀即可,我这是在源文件地址替换,如果想要压缩后换文件夹,也可以再$name里直接把新的路径加上
        resizeImage($im,$maxwidth,$maxheight,$name,$filetype);//传参

 

我是写到一个类里,为了方便大家阅读,拿出来了,如果自己项目里用到,可以也封装起来,使用更方便,或者把扩展名判断添加进类里,大家可以自己扩展,我比较懒,实现功能就行,懒得在深入研究。希望大家工作顺心。

 

© 著作权归作者所有

共有 人打赏支持
粉丝 1
博文 5
码字总数 1487
作品 0
青岛
私信 提问
2014 年 10 个最佳的 PHP 图像操作库

Thomas Boutell和众多的开发者发明了被称作GD图形库的图形软件库,它是用来动态处理图片的。GD提供了对众多编程语言的支持,例如C,Perl,Python,PHP,OCaml等。除了产生HTML输出之外,你也能用...

oschina
2014/05/06
8.1K
36
PHP制作数字、字母型验证码及其工作原理剖析

准备: 使用PHP生成验证码图片,需要PHP的GD模块,GD扩展库用于处理图像。所以先去检查你的服务器使用的PHP版本是否开启GD模块,你可以使用PHP内置函数phpinfo()去检查,至于如何去做就不在这...

小飞侠_Kobe
2016/09/29
82
0
utf-8格式下 imagettftext 中文乱码

今天做个长微博工具 发现用 imagettftext 把文字写到图片上 中文乱码。 在网上找了好多信息,排除非gbk编码问题 我的所有文件都是utf-8的 当然也试了GBK的也乱码; 有人说 $str=mbconverten...

洞悉
2013/07/02
1K
2
您的服务器没有安装这个PHP扩展:curl ... Failed

您的服务器没有安装这个PHP扩展:curl ... Failed 在安装cms时如果出现:您的服务器没有安装这个PHP扩展:curl ... Failed 解决办法如下: 1、在php.ini中找到有extension=phpcurl.dll, 去掉前...

技术小胖子
2017/11/01
0
0
PHP图片缩放函数:实现等比例不失真缩放

function resizeImage($im,$maxwidth,$maxheight,$name,$filetype){ } 参数说明: $im 图片对象,应用函数之前,你需要用imagecreatefromjpeg()读取图片对象,如果PHP环境支持PNG,GIF,也可...

微wx笑
2015/01/30
0
0

没有更多内容

加载失败,请刷新页面

加载更多

迭代器模式 Iterator 行为型 设计模式(二十)

  在计算机中,Iterator意为迭代器,迭代有重复的含义,在程序中,更有“遍历”的含义      如果给定一个数组,我们可以通过for循环来遍历这个数组,这种遍历就叫做迭代      对于...

SEOwhywhy
8分钟前
0
0
【 58沈剑 架构师之路】InnoDB,5项最佳实践,知其所以然

缓存讲了一个月《缓存架构,一篇足够》。今天,开始写数据库。 第一篇,说说MySQL两个最常用的存储引擎,MyISAM和InnoDB。照自己的理解,把一些知识点总结出来,不只说知识点,多讲“为什么”...

张锦飞
11分钟前
0
0
windows10小鹤双拼注册表

《安全第一》直接发文本内容,自己建文本,改文本后缀reg。 使用方法: 1.复制下示文本内容,打开你的文本编辑器(#记事本notepad或其他++),粘贴文本内容并保存在任意位置(不影响使用) ...

漫步海边小路
17分钟前
1
0
一、数据挖掘

数据挖掘的发展动力---需要是发明之母 数据爆炸问题 自动数据收集工具和成熟的数据库技术使得大量的数据被收集,存储在数据库、数据仓库或其他信息库中以待分析。我们拥有丰富的数据,但却缺...

凯文加内特
21分钟前
1
0
Java线程池ThreadPoolExecutor

线程池 ThreadPoolExecutor 线程池是ExecutorService的实现,可以通过Executors执行工厂构造不同类型的执行服务(线程池)。 ThreadPoolExecutor线程池使用的是阻塞队列BlockingQueue。 用于...

器石_
21分钟前
2
0

没有更多内容

加载失败,请刷新页面

加载更多

返回顶部
顶部