搜索
首页后端开发php教程使用PHP生成图片的缩略图的方法,_PHP教程

使用PHP生成图片的缩略图的方法,

 功能:支持jpg,jpeg,gif,png,bmp图片格式,支持按原图片的比例进行缩放,可以选择在图片缩放的过程中是否需要对图片进行裁切,加入了图片质量控制,可以实现缩略图片质量最高化。完整类的代码如下:
 

<&#63;php
/**
 * 功能:php生成缩略图片的类
 */
 class ResizeImage{
  public $type;//图片类型
  public $width;//实际宽度
  public $height;//实际高度
  public $resize_width;//改变后的宽度
  public $resize_height;//改变后的高度
  public $cut;//是否裁图
  public $srcimg;//源图象 
  public $dstimg;//目标图象地址
  public $im;//临时创建的图象
  public $quality;//图片质量
  function resizeimage($img,$wid,$hei,$c,$dstpath,$quality=100){
   $this->srcimg=$img;
   $this->resize_width=$wid;
   $this->resize_height=$hei;
   $this->cut=$c;
   $this->quality=$quality;
   $this->type=strtolower(substr(strrchr($this->srcimg,'.'),1));//图片的类型
   $this->initi_img();//初始化图象
   $this -> dst_img($dstpath);//目标图象地址
   @$this->width=imagesx($this->im);
   @$this->height=imagesy($this->im);
   $this->newimg();//生成图象
   @ImageDestroy($this->im);
  }
  function newimg(){
   $resize_ratio=($this->resize_width)/($this->resize_height);//改变后的图象的比例
   @$ratio=($this->width)/($this->height);//实际图象的比例
   if(($this->cut)=='1'){//裁图
    if($img_func==='imagepng'&&(str_replace('.','',PHP_VERSION)>=512)){ //针对php版本大于5.12参数变化后的处理情况
     $quality=9;
    }
    if($ratio>=$resize_ratio){//高度优先
     $newimg=imagecreatetruecolor($this->resize_width,$this->resize_height);
     imagecopyresampled($newimg,$this->im,0,0,0,0,$this->resize_width,$this->resize_height,(($this->height)*$resize_ratio),$this->height);
     imagejpeg($newimg,$this->dstimg,$this->quality);
    }
    if($ratio<$resize_ratio){//宽度优先
     $newimg=imagecreatetruecolor($this->resize_width,$this->resize_height);
     imagecopyresampled($newimg,$this->im,0,0,0,0,$this->resize_width,$this->resize_height,$this->width,(($this->width)/$resize_ratio));
     imagejpeg($newimg,$this->dstimg,$this->quality);
    }
   }else{//不裁图
    if($ratio>=$resize_ratio){
     $newimg=imagecreatetruecolor($this->resize_width,($this->resize_width)/$ratio);
     imagecopyresampled($newimg,$this->im,0,0,0,0,$this->resize_width,($this->resize_width)/$ratio,$this->width,$this->height);
     imagejpeg($newimg,$this->dstimg,$this->quality);
    }
    if($ratio<$resize_ratio){
     @$newimg=imagecreatetruecolor(($this->resize_height)*$ratio,$this->resize_height);
     @imagecopyresampled($newimg,$this->im,0,0,0,0,($this->resize_height)*$ratio,$this->resize_height,$this->width,$this->height);
     @imagejpeg($newimg,$this->dstimg,$this->quality);
    }
   }
  }
  function initi_img(){//初始化图象
   if($this->type=='jpg' || $this->type=='jpeg'){
    $this->im=imagecreatefromjpeg($this->srcimg);
   }
   if($this->type=='gif'){
    $this->im=imagecreatefromgif($this->srcimg);
   }
   if($this->type=='png'){
    $this->im=imagecreatefrompng($this->srcimg);
   }
   if($this->type=='wbm'){
    @$this->im=imagecreatefromwbmp($this->srcimg);
   }
   if($this->type=='bmp'){
    $this->im=$this->ImageCreateFromBMP($this->srcimg);
   }
  }
  function dst_img($dstpath){//图象目标地址
   $full_length=strlen($this->srcimg);
   $type_length=strlen($this->type);
   $name_length=$full_length-$type_length;
   $name=substr($this->srcimg,0,$name_length-1);
   $this->dstimg=$dstpath;
   //echo $this->dstimg;
  }
   
  function ImageCreateFromBMP($filename){ //自定义函数处理bmp图片
   if(!$f1=fopen($filename,"rb"))returnFALSE;
   $FILE=unpack("vfile_type/Vfile_size/Vreserved/Vbitmap_offset",fread($f1,14));
   if($FILE['file_type']!=19778)returnFALSE;
   $BMP=unpack('Vheader_size/Vwidth/Vheight/vplanes/vbits_per_pixel'.
     '/Vcompression/Vsize_bitmap/Vhoriz_resolution'.
     '/Vvert_resolution/Vcolors_used/Vcolors_important',fread($f1,40));
   $BMP['colors']=pow(2,$BMP['bits_per_pixel']);
   if($BMP['size_bitmap']==0)$BMP['size_bitmap']=$FILE['file_size']-$FILE['bitmap_offset'];
   $BMP['bytes_per_pixel']=$BMP['bits_per_pixel']/8;
   $BMP['bytes_per_pixel2']=ceil($BMP['bytes_per_pixel']);
   $BMP['decal']=($BMP['width']*$BMP['bytes_per_pixel']/4);
   $BMP['decal']-=floor($BMP['width']*$BMP['bytes_per_pixel']/4);
   $BMP['decal']=4-(4*$BMP['decal']);
   if($BMP['decal']==4)$BMP['decal']=0;
   $PALETTE=array();
   if($BMP['colors']<16777216)
   {
    $PALETTE=unpack('V'.$BMP['colors'],fread($f1,$BMP['colors']*4));
   }
   $IMG=fread($f1,$BMP['size_bitmap']);
   $VIDE=chr(0);
   $res=imagecreatetruecolor($BMP['width'],$BMP['height']);
   $P=0;
   $Y=$BMP['height']-1;
   while($Y>=0)
   {
    $X=0;
    while($X<$BMP['width'])
    {
     if($BMP['bits_per_pixel']==24)
      $COLOR=unpack("V",substr($IMG,$P,3).$VIDE);
     elseif($BMP['bits_per_pixel']==16)
     {
      $COLOR=unpack("n",substr($IMG,$P,2));
      $COLOR[1]=$PALETTE[$COLOR[1]+1];
     }
     elseif($BMP['bits_per_pixel']==8)
     {
      $COLOR=unpack("n",$VIDE.substr($IMG,$P,1));
      $COLOR[1]=$PALETTE[$COLOR[1]+1];
     }
     elseif($BMP['bits_per_pixel']==4)
     {
      $COLOR=unpack("n",$VIDE.substr($IMG,floor($P),1));
      if(($P*2)%2==0)$COLOR[1]=($COLOR[1]>>4);else$COLOR[1]=($COLOR[1]&0x0F);
      $COLOR[1]=$PALETTE[$COLOR[1]+1];
     }
     elseif($BMP['bits_per_pixel']==1)
     {
      $COLOR=unpack("n",$VIDE.substr($IMG,floor($P),1));
      if(($P*8)%8==0)$COLOR[1]=$COLOR[1]>>7;
      elseif(($P*8)%8==1)$COLOR[1]=($COLOR[1]&0x40)>>6;
      elseif(($P*8)%8==2)$COLOR[1]=($COLOR[1]&0x20)>>5;
      elseif(($P*8)%8==3)$COLOR[1]=($COLOR[1]&0x10)>>4;
      elseif(($P*8)%8==4)$COLOR[1]=($COLOR[1]&0x8)>>3;
      elseif(($P*8)%8==5)$COLOR[1]=($COLOR[1]&0x4)>>2;
      elseif(($P*8)%8==6)$COLOR[1]=($COLOR[1]&0x2)>>1;
      elseif(($P*8)%8==7)$COLOR[1]=($COLOR[1]&0x1);
      $COLOR[1]=$PALETTE[$COLOR[1]+1];
     }
     else
      returnFALSE;
     imagesetpixel($res,$X,$Y,$COLOR[1]);
     $X++;
     $P+=$BMP['bytes_per_pixel'];
    }
    $Y--;
    $P+=$BMP['decal'];
   }
   fclose($f1);
   return$res;
  }
   
 }
&#63;>

使用方法很简单代码如下:

 

$resizeimage=new ResizeImage('upload/abc.bmp', '120', '90', '0', 'upload/xabc.bmp');


另外一个强大的PHP图片缩略图类:phpThumb

该类除了缩放图片外,还能将图片转换成不同的格式输出(比如将GIF格式的图片输出为PNG格式),其特色功能还包括色彩、特效等

官方网址:http://phpthumb.sourceforge.net/

    We'll be using phpThumb , the open source PHP script to generate thumbnails on the fly.

    Download and extract phpThumb to somewhere in your website folder. Now to use a rounded corner thumbnail of an image, simply use the img tag of HTML with src as

 <img  src="/static/imghwm/default1.png"  data-src="phpThumb/phpThumb.php&#63;src=../images/test.jpg&w=400&fltr[]=fram|3|2|CC9966|333333|CCCCCC"  class="lazy"  src=”phpThumb.php&#63;src=test.jpg&w=200&h=150&fltr[]=ric|20|20&f=png” / alt="使用PHP生成图片的缩略图的方法,_PHP教程" > 

 Adjust the path to phpThumb according to where you place the phpThumb files.

 <html> 
 <head>
 </head> 
 <body> 
  <img src="/static/imghwm/default1.png"  data-src="phpThumb/phpThumb.php&#63;src=../images/test.jpg&w=400&fltr[]=fram|3|2|CC9966|333333|CCCCCC"  class="lazy" alt=""> 
 </body> 
 </html>

 

一般只需要下面的文件就可以了

其实phpThumb的功能比我原先想象的要强大一些,下面把他的其他一些有用的参数列一下:

src:目标图片的地址

w:输出图片的宽度

h:输出图片的高度(如果不指定他将按w参数等比缩放)

q:输出如果是JPG格式的,可以规定它的输出质量

bg:输出时的背景(如果需要)

sw、sh、sx、sy:局部输出,宽高、起始位置

f:输出格式,可以为jpeg、png、gif、ico

sfn:输出gif动画中的某一帧

fltr[]:滤镜,可以有很多效果,包括锐化、模糊、旋翻转、水印、边框、遮照、色彩调整等

使用演示:

 

//加载类库文件

 require_once 'path/to/ThumbLib.inc.php';

 //实例化类库,传入你要处理的图片的地址可以是网络地址,也可以是本地地址

 $thumb = PhpThumbFactory::create('http://www.shlongyingjixie.com/');

 //把图片等比缩小到最大宽度 100px或者最高100px,当只输入一个参数的时候,是限制最宽的尺寸。

 $thumb->resize(100, 100);

 //把图片等比缩小到原来的百分数,比如50就是原来的50%。

 $thumb->resizePercent(50);

 //截取一个175px * 175px的图片,注意这个是截取,超出的部分直接裁切掉,不是强制改变尺寸。
 $thumb->adaptiveResize(175, 175);

 //从图片的中心计算,截取200px * 100px的图片。

 $thumb->cropFromCenter(200, 100);

 //截图,前两个参数分别是需要解出的图片的右上角的坐标X,Y。 后面两个参数是需要解出的图片宽,高。

 $thumb->crop(100, 100, 300, 200);
 
 //把图片顺时针反转180度

 $thumb->rotateImageNDegrees(180);

 //保存(生成)图片,你可以保存其他格式,详细参考文档

 $thumb->save( 'NewPath/Of/image.jpg ' );

www.bkjia.comtruehttp://www.bkjia.com/PHPjc/1049145.htmlTechArticle使用PHP生成图片的缩略图的方法, 功能:支持jpg,jpeg,gif,png,bmp图片格式,支持按原图片的比例进行缩放,可以选择在图片缩放的过程中是否...
声明
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系admin@php.cn
php怎么把负数转为正整数php怎么把负数转为正整数Apr 19, 2022 pm 08:59 PM

php把负数转为正整数的方法:1、使用abs()函数将负数转为正数,使用intval()函数对正数取整,转为正整数,语法“intval(abs($number))”;2、利用“~”位运算符将负数取反加一,语法“~$number + 1”。

php怎么实现几秒后执行一个函数php怎么实现几秒后执行一个函数Apr 24, 2022 pm 01:12 PM

实现方法:1、使用“sleep(延迟秒数)”语句,可延迟执行函数若干秒;2、使用“time_nanosleep(延迟秒数,延迟纳秒数)”语句,可延迟执行函数若干秒和纳秒;3、使用“time_sleep_until(time()+7)”语句。

php字符串有没有下标php字符串有没有下标Apr 24, 2022 am 11:49 AM

php字符串有下标。在PHP中,下标不仅可以应用于数组和对象,还可应用于字符串,利用字符串的下标和中括号“[]”可以访问指定索引位置的字符,并对该字符进行读写,语法“字符串名[下标值]”;字符串的下标值(索引值)只能是整数类型,起始值为0。

php怎么除以100保留两位小数php怎么除以100保留两位小数Apr 22, 2022 pm 06:23 PM

php除以100保留两位小数的方法:1、利用“/”运算符进行除法运算,语法“数值 / 100”;2、使用“number_format(除法结果, 2)”或“sprintf("%.2f",除法结果)”语句进行四舍五入的处理值,并保留两位小数。

php怎么根据年月日判断是一年的第几天php怎么根据年月日判断是一年的第几天Apr 22, 2022 pm 05:02 PM

判断方法:1、使用“strtotime("年-月-日")”语句将给定的年月日转换为时间戳格式;2、用“date("z",时间戳)+1”语句计算指定时间戳是一年的第几天。date()返回的天数是从0开始计算的,因此真实天数需要在此基础上加1。

php怎么读取字符串后几个字符php怎么读取字符串后几个字符Apr 22, 2022 pm 08:31 PM

在php中,可以使用substr()函数来读取字符串后几个字符,只需要将该函数的第二个参数设置为负值,第三个参数省略即可;语法为“substr(字符串,-n)”,表示读取从字符串结尾处向前数第n个字符开始,直到字符串结尾的全部字符。

php怎么替换nbsp空格符php怎么替换nbsp空格符Apr 24, 2022 pm 02:55 PM

方法:1、用“str_replace("&nbsp;","其他字符",$str)”语句,可将nbsp符替换为其他字符;2、用“preg_replace("/(\s|\&nbsp\;||\xc2\xa0)/","其他字符",$str)”语句。

php怎么判断有没有小数点php怎么判断有没有小数点Apr 20, 2022 pm 08:12 PM

php判断有没有小数点的方法:1、使用“strpos(数字字符串,'.')”语法,如果返回小数点在字符串中第一次出现的位置,则有小数点;2、使用“strrpos(数字字符串,'.')”语句,如果返回小数点在字符串中最后一次出现的位置,则有。

See all articles

热AI工具

Undresser.AI Undress

Undresser.AI Undress

人工智能驱动的应用程序,用于创建逼真的裸体照片

AI Clothes Remover

AI Clothes Remover

用于从照片中去除衣服的在线人工智能工具。

Undress AI Tool

Undress AI Tool

免费脱衣服图片

Clothoff.io

Clothoff.io

AI脱衣机

AI Hentai Generator

AI Hentai Generator

免费生成ai无尽的。

热门文章

R.E.P.O.能量晶体解释及其做什么(黄色晶体)
2 周前By尊渡假赌尊渡假赌尊渡假赌
R.E.P.O.最佳图形设置
2 周前By尊渡假赌尊渡假赌尊渡假赌
R.E.P.O.如果您听不到任何人,如何修复音频
2 周前By尊渡假赌尊渡假赌尊渡假赌

热工具

安全考试浏览器

安全考试浏览器

Safe Exam Browser是一个安全的浏览器环境,用于安全地进行在线考试。该软件将任何计算机变成一个安全的工作站。它控制对任何实用工具的访问,并防止学生使用未经授权的资源。

SublimeText3 Mac版

SublimeText3 Mac版

神级代码编辑软件(SublimeText3)

Atom编辑器mac版下载

Atom编辑器mac版下载

最流行的的开源编辑器

PhpStorm Mac 版本

PhpStorm Mac 版本

最新(2018.2.1 )专业的PHP集成开发工具

VSCode Windows 64位 下载

VSCode Windows 64位 下载

微软推出的免费、功能强大的一款IDE编辑器