php中使用gd库实现下载网页中所有图片

在前期的php教程就讲了php gd库可以实现远程图片下载,但是那只是下载了一张图片,原理是一样的,要想下载一个网页的所有图片只要使用正则表达式进行判断,找出所有的图片url就可以进行循环下载了,我特地参照网络资源编写了gd库图片下载类!
php代码如下:

  <?php  header("Content-type:text/html ; charset=utf-8");  if (!empty($_POST['submit'])){   $url = $_POST['url'];   //为了获取相对路径的图片所做的操作   $url_fields = parse_url($url);   $main_url = $url_fields['host'];   $base_url = substr($url,0,strrpos($url, '/')+1);   //获取网页内容   //设置代理服务器   $opts = array('http'=>array('request_fulluri'=>true));   $context = stream_context_create($opts);   $content = file_get_contents($url,false,$context);   //匹配img标签,将所有匹配字符串保存到数组$matches   $reg = "/<img.*?src="(.*?)".*?>/i";   preg_match_all($reg, $content, $matches);   $count = count($matches[0]);   for ($i=0; $i<$count; $i++){   /*将所有图片的url转换为小写    *$matches[1][$i] = strtolower($matches[1][$i]);   */   //如果图片为相对路径就转化为全路径   if (!strpos('a'.$matches[1][$i], 'http')){    //因为'/'是第0个位置    if (strpos('a'.$matches[1][$i], '/')){    $matches[1][$i] = 'http://'.$main_url.$matches[1][$i];    }else{    $matches[1][$i] = $base_url.$matches[1][$i];    }   }   }   //过滤重复的图片   $img_arr = array_unique($matches[1]);   //实例化图片下载类   $getImg = new DownImage();   $url_count = count($img_arr);   for ($i=0; $i<$url_count; $i++){   $getImg->source = $img_arr[$i];   $getImg->save_address = './pic/';   $file = $getImg->download();   }   echo "下载完成!哈哈,简单吧!";  }  class DownImage{   public $source;//远程图片URL   public $save_address;//保存本地地址   public $set_extension; //设置图片扩展名   public $quality; //图片的质量(0~100,100最佳,默认75左右)   //下载方法(选用GD库图片下载)   public function download(){   //获取远程图片信息   $info = @getimagesize($this->source);   //获取图片扩展名   $mime = $info['mime'];   $type = substr(strrchr($mime, '/'), 1);   //不同的图片类型选择不同的图片生成和保存函数   switch($type){    case 'jpeg':    $img_create_func = 'imagecreatefromjpeg';    $img_save_func = 'imagejpeg';    $new_img_ext = 'jpg';    $image_quality = isset($this->quality) ? $this->quality : 100;    break;    case 'png':    $img_create_func = 'imagecreatefrompng';    $img_save_func = 'imagepng';    $new_img_ext = 'png';    break;    case 'bmp':    $img_create_func = 'imagecreatefrombmp';    $img_save_func = 'imagebmp';    $new_img_ext = 'bmp';    break;    case 'gif':    $img_create_func = 'imagecreatefromgif';    $img_save_func = 'imagegif';    $new_img_ext = 'gif';    break;    case 'vnd.wap.wbmp':    $img_create_func = 'imagecreatefromwbmp';    $img_save_func = 'imagewbmp';    $new_img_ext = 'bmp';    break;    case 'xbm':    $img_create_func = 'imagecreatefromxbm';    $img_save_func = 'imagexbm';    $new_img_ext = 'xbm';    break;    default:    $img_create_func = 'imagecreatefromjpeg';    $img_save_func = 'imagejpeg';    $new_img_ext = 'jpg';   }   //根据是否设置扩展名来合成本地文件名   if (isset($this->set_extension)){    $ext = strrchr($this->source,".");    $strlen = strlen($ext);    $newname = basename(substr($this->source,0,-$strlen)).'.'.$new_img_ext;   }else{    $newname = basename($this->source);   }      //生成本地文件路径   $save_address = $this->save_address.$newname;   $img = @$img_create_func($this->source);   if (isset($image_quality)){    $save_img = @$img_save_func($img,$save_address,$image_quality);   }else{    $save_img = @$img_save_func($img,$save_address);   }   return $save_img;    }  }  ?>  <form method="POST" action="">  远程url地址:<input type="text" name="url" size=30 />  <input type="submit" name="submit" value="下载该页面所有图片" />  </form>

运行结果如图:

php中使用gd库实现下载网页中所有图片

郑重声明:本网站发布的内容(图片、视频和文字)以及用户投稿、用户转载内容为主,如果涉及侵权请尽快告知,我们将会在第一时间删除。文章观点不代表本网站立场,如需处理请联系客服

发表评论

登录后才能评论