PHP获取远程图片并调整图像大小

  1. <?php  
  2. /** 
  3. *函数:调整图片尺寸或生成缩略图 
  4. *修改:2013-2-15 
  5. *返回:True/False 
  6. *参数: 
  7. *   $Image   需要调整的图片(含路径) 
  8. *   $Dw=450   调整时最大宽度;缩略图时的绝对宽度 
  9. *   $Dh=450   调整时最大高度;缩略图时的绝对高度 
  10. *   $Type=1   1,调整尺寸; 2,生成缩略图 
  11. */  
  12.   
  13. $phtypes=array('img/gif', 'img/jpg', 'img/jpeg', 'img/bmp', 'img/pjpeg', 'img/x-png');  
  14.   
  15. function compressImg($Image,$Dw,$Dh,$Type){  
  16.     echo $Image;  
  17.     IF(!file_exists($Image)){  
  18.         echo "不存在图片";  
  19.         return false;  
  20.     }  
  21.     echo "存在图片";  
  22.     // 如果需要生成缩略图,则将原图拷贝一下重新给$Image赋值(生成缩略图操作)  
  23.     // 当Type==1的时候,将不拷贝原图像文件,而是在原来的图像文件上重新生成缩小后的图像(调整尺寸操作)  
  24.     IF($Type!=1){  
  25.         copy($Image,str_replace(".","_x.",$Image));  
  26.         $Image=str_replace(".","_x.",$Image);  
  27.     }  
  28.     // 取得文件的类型,根据不同的类型建立不同的对象  
  29.     $ImgInfo=getimagesize($Image);  
  30.     Switch($ImgInfo[2]){  
  31.         case 1:  
  32.             $Img =@imagecreatefromgif($Image);  
  33.             break;  
  34.         case 2:  
  35.             $Img =@imagecreatefromjpeg($Image);  
  36.             Break;  
  37.         case 3:  
  38.             $Img =@imagecreatefrompng($Image);  
  39.             break;  
  40.     }  
  41.     // 如果对象没有创建成功,则说明非图片文件  
  42.     IF(Empty($Img)){  
  43.         // 如果是生成缩略图的时候出错,则需要删掉已经复制的文件  
  44.         IF($Type!=1){  
  45.             unlink($Image);  
  46.         }  
  47.         return false;  
  48.     }  
  49.     // 如果是执行调整尺寸操作则  
  50.     IF($Type==1){  
  51.         $w=ImagesX($Img);  
  52.         $h=ImagesY($Img);  
  53.         $width = $w;  
  54.         $height = $h;  
  55.         IF($width>$Dw){  
  56.             $Par=$Dw/$width;  
  57.             $width=$Dw;  
  58.             $height=$height*$Par;  
  59.             IF($height>$Dh){  
  60.                 $Par=$Dh/$height;  
  61.                 $height=$Dh;  
  62.                 $width=$width*$Par;  
  63.             }  
  64.         } ElseIF($height>$Dh) {  
  65.             $Par=$Dh/$height;  
  66.             $height=$Dh;  
  67.             $width=$width*$Par;  
  68.             IF($width>$Dw){  
  69.                 $Par=$Dw/$width;  
  70.                 $width=$Dw;  
  71.                 $height=$height*$Par;  
  72.             }  
  73.         } Else {  
  74.             $width=$width;  
  75.             $height=$height;  
  76.         }  
  77.         $nImg =ImageCreateTrueColor($width,$height);// 新建一个真彩色画布  
  78.         ImageCopyReSampled($nImg,$Img,0,0,0,0,$width,$height,$w,$h);// 重采样拷贝部分图像并调整大小  
  79.         ImageJpeg($nImg,$Image);// 以JPEG格式将图像输出到浏览器或文件  
  80.         return true;  
  81.     } Else {// 如果是执行生成缩略图操作则  
  82.         $w=ImagesX($Img);  
  83.         $h=ImagesY($Img);  
  84.         $width = $w;  
  85.         $height = $h;  
  86.         $nImg =ImageCreateTrueColor($Dw,$Dh);  
  87.         IF($h/$w>$Dh/$Dw){// 高比较大  
  88.             $width=$Dw;  
  89.             $height=$h*$Dw/$w;  
  90.             $IntNH=$height-$Dh;  
  91.             ImageCopyReSampled($nImg, $Img, 0, -$IntNH/1.8, 0, 0, $Dw, $height, $w, $h);  
  92.         } Else {// 宽比较大  
  93.             $height=$Dh;  
  94.             $width=$w*$Dh/$h;  
  95.             $IntNW=$width-$Dw;  
  96.             ImageCopyReSampled($nImg, $Img,-$IntNW/1.8,0,0,0, $width, $Dh, $w, $h);  
  97.         }  
  98.         ImageJpeg($nImg,$Image);  
  99.         return true;  
  100.     }  
  101. };  
  102. ?>  
  103.   
  104. <?php  
  105. //网络图片路径  
  106. $imgPath = 'http://www.lesohome.com/phone/compress-img/251139474ba926db3d7850.jpg';  
  107. //$imgPath = "http://www.lesohome.com/userfiles/image/20111125/251139474ba926db3d7850.jpg";  
  108. $tempPath = str_replace('http://www.lesohome.com/', '', $imgPath);//替换换行字符  
  109. $name = strrchr($tempPath, "/");  
  110. $path = str_replace($name, '', $tempPath);//替换换行字符  
  111.   
  112. /** 
  113.  *根据路径path建立多级目录 
  114.  *$dir目标目录 $mode权限,0700表示最高权限 
  115. */  
  116. function  makedir( $dir , $mode = "0700" ) {  
  117.     if(strpos($dir , "/" )){  
  118.         $dir_path = "" ;  
  119.         $dir_info = explode("/" , $dir );  
  120.         foreach($dir_info as $key => $value){  
  121.             $dir_path .= $value ;  
  122.             if (!file_exists($dir_path)){  
  123.                 @mkdir($dir_path, $mode) or die ("建立文件夹时失败了" );  
  124.                 @chmod($dir_path, $mode);  
  125.             } else {  
  126.                 $dir_path .= "/" ;  
  127.                 continue ;  
  128.             }  
  129.             $dir_path .= "/" ;  
  130.         }  
  131.         return $dir_path ;  
  132.     } else {  
  133.         @mkdir($dir, $mode) or die( "建立失败了,请检查权限" );  
  134.         @chmod($dir, $mode);  
  135.         return $dir ;  
  136.     }  
  137. //end makedir  
  138. makedir($path);  
  139.   
  140. /** 
  141.  *根据url获取服务器上的图片 
  142.  *$url服务器上图片路径 $filename文件名 
  143. */  
  144. function GrabImage($url,$filename="") {  
  145.     if($url=="") return false;  
  146.     if($filename=="") {  
  147.         $ext=strrchr($url,".");  
  148.         if($ext!=".gif" && $ext!=".jpg" && $ext!=".png")  
  149.             return false;  
  150.         $filename=date("YmdHis").$ext;  
  151.     }  
  152.     ob_start();   
  153.     readfile($url);   
  154.     $img = ob_get_contents();   
  155.     ob_end_clean();  
  156.     $size = strlen($img);   
  157.   
  158.     $fp2=@fopen($filename, "a");  
  159.     fwrite($fp2,$img);  
  160.     fclose($fp2);  
  161.     return $filename;  
  162. }  
  163. ?>  
  164.   
  165. <html>  
  166. <body>  
  167. 允许上传的文件类型为:<?=implode(', ',$phtypes)?><br/>  
  168. <input type="button" id="getImg" name="getImg" size="10" value="获取图片并保存" onclick="alert('12333');" />  
  169.   
  170. <?php  
  171.   
  172. echo $path."<br>";  
  173. /**/  
  174. $bigImg=GrabImage($imgPath, $tempPath);  
  175. if($bigImg){  
  176.     echo '<img src="'.$bigImg.'"><br>';  
  177. else {  
  178.     echo "false";  
  179. }   
  180.   
  181. compressImg($bigImg,100,80,1);  
  182. ?>  
  183. </body>  
  184. </html>  
原文地址:https://www.cnblogs.com/sanwenyu/p/4563987.html