用php和imagemagick来处理图片文件的上传和缩放处理

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了用php和imagemagick来处理图片文件的上传和缩放处理相关的知识,希望对你有一定的参考价值。

啥也不说,直接上代码,大家可以自行添加增加水印功能:

  1. <?php  
  2. /** 
  3.  *  
  4.  * @author zhao jinhan 
  5.  * @date 2014年1月13日11:54:30 
  6.  * @email [email protected]   
  7.  *  
  8.  */  
  9. header(‘Content-type:text/html; charset=utf-8‘);  
  10. //定义缩略图的宽高  
  11. define(‘THUMB_WIDTH‘,300);  
  12. define(‘THUMB_HEIGHT‘,300);  
  13.   
  14. /** 
  15.  * 重新生成上传的文件名 
  16.  * @return string 
  17.  * @author zhao jinhan 
  18.  * 
  19.  */  
  20. function _file_type($filetype = null){  
  21.     switch($filetype)  
  22.     {  
  23.         case "image/jpeg":  
  24.             $fileextname  = "jpg";  
  25.             break;  
  26.         case "image/gif":  
  27.             $fileextname  = "gif";  
  28.             break;  
  29.         case "image/png":  
  30.             $fileextname  =  "png";  
  31.             break;  
  32.         default:  
  33.             $fileextname = false;  
  34.             break;  
  35.     }  
  36.     return $fileextname?date(‘YmdHis‘,time()).‘.‘.$fileextname:false;  
  37. }  
  38.   
  39. /** 
  40.  *  
  41.  * @param string $filename 
  42.  * @param string $width 
  43.  * @param string $height 
  44.  * @param string $quality 
  45.  * @param string $savepath 
  46.  * @return boolean 
  47.  */  
  48. function _make_thumb($filename=‘‘, $width=THUMB_WIDTH, $height=THUMB_HEIGHT, $savepath=‘./upload‘){  
  49.     if(file_exists($filename)){  
  50.         //上传图片的尺寸  
  51.         $imagesize=getimagesize($filename);      
  52.         $imagewidth=$imagesize[0];  
  53.         $imageheight=$imagesize[1];  
  54.         $mime = $imagesize[‘mime‘];  
  55.         //宽高比例  
  56.         $ratio = $imagewidth/$imageheight;   
  57.           
  58.         //新建一个背景图片  
  59.         $bgimg = imagecreatetruecolor($width, $height);  
  60.         $white = imagecolorallocate($bgimg, 255, 255, 255);  
  61.         //填充背景色为白色  
  62.         imagefill($bgimg,0,0,$white);  
  63.         if($mime == ‘image/gif‘){  
  64.             $im = @imagecreatefromgif($filename); /* Attempt to open */  
  65.             $outfun = ‘imagegif‘;  
  66.         }elseif($mime == ‘image/png‘){  
  67.             $im = @imagecreatefrompng($filename); /* Attempt to open */  
  68.             $outfun = ‘imagepng‘;  
  69.         }else{  
  70.             $im = @imagecreatefromjpeg($filename); /* Attempt to open */  
  71.             $outfun = ‘imagejpeg‘;  
  72.         }  
  73.           
  74.         if($ratio > 1){  
  75.             //宽度较大              
  76.             if($imagewidth > $width){  
  77.                 //缩放图片到背景图片上                  
  78.                 $new_width = $width;  
  79.                 $new_height = ($width*$imageheight)/$imagewidth;   
  80.                 $bg_y = ceil(abs(($height-$new_height)/2));  
  81.                 imagecopyresampled($bgimg, $im, 0, $bg_y, 0, 0, $new_width, $new_height, $imagewidth, $imageheight);  
  82.             }else{      
  83.                 //复制图片到背景图片上      
  84.                 $copy = true;                  
  85.             }  
  86.         }else{  
  87.             //高度较大  
  88.             if($imageheight > $height){  
  89.                 //缩放图片  
  90.                 $new_height = $height;  
  91.                 $new_width = ($height*$imagewidth)/$imageheight;  
  92.                 $bg_x = ceil(($width-$new_width)/2);  
  93.                 imagecopyresampled($bgimg, $im, $bg_x, 0, 0, 0, $new_width, $new_height, $imagewidth, $imageheight);  
  94.             }else{  
  95.                 //复制图片到背景图片上      
  96.                 $copy = true;          
  97.             }  
  98.         }  
  99.         if($copy){  
  100.             //复制图片到背景图片上      
  101.             $bg_x = ceil(($width-$imagewidth)/2);  
  102.             $bg_y = ceil(($height-$imageheight)/2);  
  103.             imagecopy($bgimg, $im, $bg_x, $bg_y, 0, 0, $imagewidth, $imageheight);  
  104.         }  
  105.         $ext = _file_type($mime);          
  106.         $outfun($bgimg, $savepath.‘/‘.$ext);  
  107.         imagedestroy($bgimg);  
  108.         return $savepath.‘/‘.$ext;  
  109.     }else{          
  110.         return false;  
  111.     }  
  112. }  
  113.   
  114. if($_POST){      
  115.     $size = $_POST[‘size‘]?strtoupper(trim($_POST[‘size‘])):‘2M‘;  
  116.     $imgsize = $_FILES[‘img‘][‘size‘]?$_FILES[‘img‘][‘size‘]/(1024*1024):0;  
  117.     $imgwidth = $imgheight = $_POST[‘width-height‘]?intval($_POST[‘width-height‘]):300;  
  118.     //自定定义文件上传大小  
  119.     ini_set(‘upload_max_filesize‘,$size);      
  120.     $mathsize = str_replace(‘M‘,‘‘,$size);          
  121.     if($imgsize>$mathsize){  
  122.         echo "图片大小不得超过{$size}!";  
  123.         return;  
  124.     }  
  125.     if($file_name = _file_type($_FILES[‘img‘][‘type‘])){          
  126.         if($_FILES[‘img‘][‘error‘] == UPLOAD_ERR_OK){              
  127.             $savepath = ‘upload/‘;  
  128.             if(!is_dir($savepath)){  
  129.                 mkdir($savepath,0644);  
  130.             }              
  131.             //生成缩略图  
  132.             $thumb_file = _make_thumb($_FILES[‘img‘][‘tmp_name‘], $imgwidth, $imgheight, $savepath);  
  133.             //move_uploaded_file($_FILES[‘img‘][‘tmp_name‘],$savepath.$file_name);  
  134.             echo "生成后的图片为:<img src=‘".$thumb_file."‘ />";  
  135.         }else{  
  136.             echo $_FILES[‘img‘][‘error‘];  
  137.             return;  
  138.         }  
  139.     }else{  
  140.         echo "图片格式不正确,请上传jpg,gif,png的格式!";  
  141.         return;  
  142.     }  
  143.       
  144.       
  145.       
  146. }else{  
  147.     echo <<<EOT  
  148. <!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">  
  149. <html>  
  150. <head>  
  151. <meta http-equiv="Content-Type" content="text/html; charset=utf-8">  
  152. <title>缩放图片保存成正方形</title>  
  153. </head>  
  154. <body>  
  155.         <form action="" method="POST" enctype="multipart/form-data">  
  156.             <div>  
  157.                 <label>上传一张图片:</label>  
  158.                 <input type="file" name="img" />  
  159.             </div>  
  160.             <div>  
  161.                 <label>生成缩略图的宽高(单位px):</label>  
  162.                 <input type="text" name="width-height" value="300" />  
  163.             </div>          
  164.             <div>  
  165.                 <label>文件大小上限:</label>  
  166.                 <input type="text" name="size" value="2M" />  
  167.             </div>      
  168.             <div><input type="submit" name="submit" value="提交" /></div>  
  169.         </form>  
  170. </body>  
  171. </html>  
  172. EOT;  
  173. }  


摘自:http://www.icode100.com/posts/view/64

 

本文非原创,感谢作者提供学习

以上是关于用php和imagemagick来处理图片文件的上传和缩放处理的主要内容,如果未能解决你的问题,请参考以下文章

Linux端图形处理工具ImageMagick在Centos上的安装

php安装imagemagick扩展 常见问题与解决方案(win平台)

在CentOS上为PHP安装Imagick和ImageMagick

php7 使用imagick 的坑

图像处理 - ImageMagick 简单介绍与案例

imagemagick图片处理命令