php生成缩略图函数imagecopyresampled()和imagecopyresized()的区别  

2013年08月19日 02:05 by:荒凉的废

上传图片过大,生成缩略图是必不可少的一个功能,用PHP的GD函数为图片生成缩略图是很简单的,核心就一个 imagecopyresampled函数。 

  1. $ifn = "test.jpg";    
  2. $ofn = "test_thumb.jpg";    
  3.    
  4. $source = imagecreatefromjpeg($ifn);    
  5. $sourceWidth   = imagesx($source);    
  6. $sourceHeight = imagesy($source);    
  7.    
  8. $thumbWidth = 240;    
  9. $thumbHeight = 180;    
  10. $thumb = imagecreatetruecolor($thumbWidth, $thumbHeight);    
  11.    
  12. imagecopyresampled($thumb,    
  13.                    $source,    
  14.                     0,    
  15.                     0,    
  16.                     0,    
  17.                     0,    
  18.                    $thumbWidth,    
  19.                    $thumbHeight,    
  20.                    $sourceWidth,    
  21.                    $sourceHeight   
  22.                     );    
  23. imagejpeg($thumb, $ofn);   

  • 如果对缩略图的质量要求不高可以使用imagecopyresized()函数,imagecopyresize()所生成的图像比较粗糙,但是速度较快
  • imagecopyresampled()函数是GD 2.x后新增加的函数,字面上的意思是会对图片进行重新采样(resampling),GD是采用插值算法生成更平滑的图像,但是速度相对imagecopyresize()函数来说要慢一些。

     imagecopyresample() 共有10个参数,前面两个是目标文件和源文件,后面4个分别是dst和src的width,height,中间的 src_x,src_y,dst_x,dst_y看得比较晕。。例子里面都是设置为0,后来试了下,发现把这4个参数写成 dst_start_x, dst_start_y, src_start_x, src_start_y的话就很好理解了。举个例子说吧。假如要在缩略图上下各留10 pixel的空白,那就可以用imagecopyresampled($dst, $src, dst_start_x, dst_start_y + 10, src_start_x, src_start_y, dst_width, dst_height – 20, src_width, src_height)来实现。

最后编辑时间:0000-00-00 00:00:00