关于直接采集远程机器图片之后再下载到我们本地其实非常的简单,我们通常会使用fopen 与 file_put_contents 或者高级点的curl来实现,下面我整理了几个比较好用的图片下载到本地例子,大家一起看看.
对于没有防盗链的图片,代码如下:
-
-
-
-
-
-
- function GrabImage($url,$filepath,$filename="") {
- if($url=="") return false;
-
- $ext=strrchr($url,".");
- if($filename=="") {
- if($ext!=".gif" && $ext!=".jpg" && $ext!=".png") return false;
- $filename=date("YmdHis");
- }
-
- ob_start();
- readfile($url);
- $img = ob_get_contents();
- ob_end_clean();
- $size = strlen($img);
-
- !is_dir(getcwd().$filepath)? mkdir(getcwd().$filepath):null;
-
- $fp2=fopen(getcwd().$filepath.$filename.$ext, "a");
- fwrite($fp2,$img);
- fclose($fp2);
-
- return array($filepath.$filename.$ext,$size);
- }
有防盗链的图片,代码如下:
-
-
-
-
-
-
-
- function GrabImage2($url,$filepath,$filename="",$fromurl) {
- if($url=="") return false;
-
- $ext=strrchr($url,".");
- if($filename=="") {
- if($ext!=".gif" && $ext!=".jpg" && $ext!=".png") return false;
- $filename=date("YmdHis");
- }
-
- !is_dir(getcwd().$filepath)? mkdir(getcwd().$filepath):null;
-
- $re = $this->curlg($url,$fromurl);
- $size = file_put_contents(getcwd().$filepath.$filename.$ext,$re);
-
- return array($filepath.$filename.$ext,$size);
- }
批量采集代码:
-
-
-
- public function downimg(){
- $keep = $this->_get("keep");
- $id = $this->_get("id");
- $id = $id?$id:0;
- $nextid = $id+1;
- if($keep!=1){
- $data = M('Cjlist')->where("status=1")->select();
- S("keepcjdata",$data,3600);
- }else{
- $data = S("keepcjdata");
- }
- $endid= count($data);
-
-
- if($endid==$id){
- exit('所有图片下载完成!');
- }
-
- $data2['cover_imgurl'] = $this->imgdown2($data[$id]['cover_imgurl']);
-
- $data2['thum_url'] = $this->imgdown2($data[$id]['thum_url'],'thum_');
- $data2['id']=$data[$id]['id'];
- if(!$data2['thum_url'] || !$data2['cover_imgurl']){
- $data2['status']=-1;
- }else{
- $data2['status']=2;
- }
- $res = M('Cjlist')->save($data2);
-
- if($res){
- echo '下载完成ID:'.$data2['id']." 前往下一个ID下载<script>window.location.href='".U('Index/downimg')."/keep/1/id/".$nextid."'</script>";
- }else{
- echo '保存出错,正在重试刷新。<script>window.location.reload()</script>';
- }
-
-
-
- }
同时还可以生成缩略图,代码如下:
-
-
-
-
-
- public function imgdown($picurl='http://p0.so.qhimg.com/t0129f40df5810dfaa5.jpg',$fromurl='http://image.so.com'){
- $mulu = "/".date("YmdH",time())."/";
- $reimg = $this->GrabImage2($picurl,$mulu,time(),$fromurl);
-
-
-
-
-
-
- if($reimg[1]<=0){
- exit("下载图片失败");
- }
- $reimg=$reimg[0];
- import('ORG.Util.Image');
- $Image = new Image();
- $imgurl = getcwd().$reimg;
- $ext=strrchr($imgurl,".");
- $thum_name = $Image->thumb($imgurl,"thum_".time().$ext,'','288','432');
- rename(getcwd()."/".$thum_name,getcwd().$mulu.$thum_name);
- $imginfo = $Image->getImageInfo(getcwd().$mulu.$thum_name);
-
- $imgarr['cover_url']=$reimg;
- $imgarr['thum_url']=$mulu.$thum_name;
- $imgarr['thum_w']=$imginfo['width'];
- $imgarr['thum_h']=$imginfo['height'];
- return $imgarr;
- }
|