php实现图片批量下载到本地实例

关于直接采集远程机器图片之后再下载到我们本地其实非常的简单,我们通常会使用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);

    //echo $id;

    //echo $endid;

    if ($endid == $id) {

        exit('所有图片下载完成!');

    }

    //echo $endid;

    $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.com

    $imgarr['cover_url'] = $reimg;

    $imgarr['thum_url'] = $mulu . $thum_name;

    $imgarr['thum_w'] = $imginfo['width'];

    $imgarr['thum_h'] = $imginfo['height'];

    return $imgarr;

}
赞(1)
未经允许不得转载:程序员中文网 » php实现图片批量下载到本地实例
分享到: 更多 (0)
关于我们 免责申明 意见反馈 隐私政策
程序员中文网:公益在线网站,帮助学习者快速成长!
关注微信 技术交流
推荐文章
每天精选资源文章推送
推荐文章
随时随地碎片化学习
推荐文章
发现有趣的