• 技术文章 >php教程 >php手册

    gd库图片下载类实现下载网页所有图片的php代码

    2016-06-13 11:59:12原创381

    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, '//m.sbmmt.com/m/')+1);
    //获取网页内容
    //设置代理服务器
    $opts = array('http'=>array('request_fulluri'=>true));
    $context = stream_context_create($opts);
    $content = file_get_contents($url,false,$context);
    //匹配img标签,将所有匹配字符串保存到数组$matches
    $reg = "//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')){
    //因为'//m.sbmmt.com/m/'是第0个位置
    if (strpos('a'.$matches[1][$i], '//m.sbmmt.com/m/')){
    $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, '//m.sbmmt.com/m/'), 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;
    }
    }
    ?>


    远程url地址:



    运行结果如图:

    下载的图片本例中保存在当前目录的pic文件夹下!

    声明:本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系admin@php.cn核实处理。
    上一篇:php中禁止单个IP与ip段访问的代码小结 下一篇:自己动手写 PHP MVC 框架(40节精讲/巨细/新人进阶必看)

    相关文章推荐

    • php批量添加数据与批量更新数据的实现方法,php添加数据• PHP之判断用户语言跳转网页• header("Location:login.php")• PHP代码:Http断点续传的实现例子• PHP5中Cookie与 Session使用详解
    1/1

    PHP中文网