关于直接采集远程机器图片之后再下载到我们本地其实非常的简单,我们通常会使用fopen 与 file_put_contents 或者高级点的curl来实现,下面我整理了几个比较好用的图片下载到本地例子,大家一起看看.
对于没有防盗链的图片,代码如下:
<?php
/*
 * 对于没有防盗链的图片
 * url 图片地址
 *filename 图片保存地址
 * return 返回下载的图片路径和名称,图片大小
*/
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
    );
}有防盗链的图片, 代码如下:
/*
 * 有防盗链的图片
 * url 图片地址
 *filename 图片保存地址
 * return 返回下载的图片路径和名称,图片大小
 * fromurl 来源URL,填写来源图片网址可破解防盗链
*/
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"); //1从缓存获取2删除缓存/重新缓存
    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);
    //echoid;
    //echo endid;
    if (endid == id) {
        exit('所有图片下载完成!');
    }
    //echoendid;
    data2['cover_imgurl'] =this->imgdown2(data[id]['cover_imgurl']);
    //echo data[id]['thum_url'];
    data2['thum_url'] =this->imgdown2(data[id]['thum_url'], 'thum_'); //中型图片type
    data2['id'] =data[id]['id'];
    if (!data2['thum_url'] || !data2['cover_imgurl']) {data2['status'] = - 1;
    } else {
        data2['status'] = 2;
    }res = M('Cjlist')->save(data2);
    //this->echosql();
    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>';
    }
    //dump(data2);
    //dump($data);
     
}同时还可以生成缩略图, 代码如下:
/*
 *图片采集保存本地生成缩略图
 *
 * */
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);
    //img = file_get_contents(picurl);
    //echo file_put_contents('222.jpg',img);
    //exit;
    //reimg="/20140529/1401333398.jpg";
    //dump(reimg);
    //exit;
    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);
    //dump(imginfo);//开源代码phprm.comimgarr['cover_url'] = reimg;imgarr['thum_url'] = mulu .thum_name;
    imgarr['thum_w'] =imginfo['width'];
    imgarr['thum_h'] =imginfo['height'];
    return $imgarr;
} 
 
				     
 
				    