php采集远程图片的思路与实现代码

基本流程:
1、获取目标网站图片地址。
2、读取图片内容。
3、创建要保存图片的路径并命名图片名称。
4、写入图片内容。
5、完成。

我们自定义几个函数,实现采集远程图片的功能。

1、make_dir()建立目录。判断要保存的图片文件目录是否存在,如果不存在则创建目录,并且将目录设置为可写权限。

1 <?php
2 function make_dir($path){
3     if(!<a href="http://www.jbxue.com/zt/file_exists/" target="_blank"class="infotextkey">file_exists</a>($path)){//不存在则建立
4         $mk=@mkdir($path,0777); //权限
5         @chmod($path,0777);
6     }
7     return true;
8 }
9 ?>

2、read_filetext()取得图片内容。使用fopen打开图片文件,然后fread读取图片文件内容。

01 <?php
02 function read_filetext($filepath){
03     $filepath=trim($filepath);
04     $htmlfp=@fopen($filepath,"r");
05     //远程
06     if(strstr($filepath,"://")){
07         while($data=@fread($htmlfp,500000)){
08             $string.=$data;
09         }
10     }
11     //本地
12     else{
13         $string=@fread($htmlfp,@filesize($filepath));
14     }
15     @fclose($htmlfp);
16     return $string;
17 }
18 ?>

3、write_filetext()写文件,将图片内容fputs写入文件中,即保存图片文件。

1 <?php
2 function write_filetext($filepath,$string){
3     //$string=stripSlashes($string);
4     $fp=@fopen($filepath,"w");
5     @fputs($fp,$string);
6     @fclose($fp);
7 }
8 ?>

4、get_filename()获取图片名称,也可以自定义要保存的文件名。

1 <?php
2 function get_filename($filepath){
3     $fr=explode("/",$filepath);
4     $count=count($fr)-1;
5     return $fr[$count];
6 }
7 ?>

5、在函数save_pic()中调用,最后返回保存后的图片路径。

01 <?php
02 function save_pic($url,$savepath=''){
03     //处理地址
04     $url=trim($url);
05     $url=str_replace(" ","%20",$url);
06     //读文件
07     $string=read_filetext($url);
08     if(empty($string)){
09         echo '读取不了文件';exit;
10     }
11     //文件名
12     $filename = get_filename($url);
13     //存放目录
14     make_dir($savepath); //建立存放目录
15     //文件地址
16     $filepath $savepath.$filename;
17     //写文件
18     write_filetext($filepath,$string);
19     return $filepath;
20 }
21 调用save_pic()函数保存图片,测试代码:
22 //目标图片地址
23 $pic "http://www.jbxue.com/1205/06/2776119_demo.jpg";
24 //保存目录
25 $savepath "images/";
26 echo save_pic($pic,$savepath);
27 ?>

实际应用中,可能会采集某个站点的内容,比如产品信息,包括采集防盗链的图片保存到网站上服务器上。
这时可以使用正则匹配页面内容,将页面中相匹配的图片都找出来,然后分别下载到网站服务器上,完成图片的采集。

测试代码:

01 <?php
02 function get_pic($cont,$path){
03     $pattern_src '/<[img|IMG].*?src=[\'|\"](.*?(?:[\.gif|\.jpg]))[\'|\"].*?[\/]?>/';
04     $num = preg_match_all($pattern_src$cont$match_src);
05     $pic_arr $match_src[1]; //获得图片数组
06     foreach ($pic_arr as $pic_item) { //循环取出每幅图的地址
07         save_pic($pic_item,$path); //下载并保存图片
08         echo "[OK]..!";
09     }
10 }
11  
12 //通过分析页面内容,将主体内容找出来,调用get_pic()实现图片的保存。
13 //采集一篇关于手机报道内容页的图片
14 $url "http://www.jbxue.com/321/3215791.html";
15 $content = <a href="http://www.jbxue.com/zt/file_get_contents/" target="_blank"class="infotextkey">file_get_contents</a>($url);//获取网页内容
16 $preg '#<div class="art_con">(.*)<div class="ivy620 ivy620Ex"></div>#iUs';
17 preg_match_all($preg$content$arr);
18 $cont $arr[1][0]; 
19 get_pic($cont,'img/');
20 ?>

以上代码经测试可以采集图片,但特殊情况下未测试,比如目标网站做了302多次跳转的,目标网站做了多种防采集的,留给大家自行测试与研究。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值