php中使用gd库实现下载网页中所有图片


Posted in PHP onMay 12, 2015

在前期的php教程就讲了php gd库可以实现远程图片的下载,但是那只是下载了一张图片,原理是一样的,要想下载一个网页的所有图片只要使用正则表达式进行判断,找出所有的图片url就可以进行循环下载了,我特地参照网络资源编写了gd库图片下载类!
php代码如下:

<?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, '/')+1);
 //获取网页内容
 //设置代理服务器
 $opts = array('http'=>array('request_fulluri'=>true));
 $context = stream_context_create($opts);
 $content = file_get_contents($url,false,$context);
 //匹配img标签,将所有匹配字符串保存到数组$matches
 $reg = "/<img.*?src=\"(.*?)\".*?>/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')){
  //因为'/'是第0个位置
  if (strpos('a'.$matches[1][$i], '/')){
  $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, '/'), 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; 
 }
}
?>
<form method="POST" action="">
远程url地址:<input type="text" name="url" size=30 />
<input type="submit" name="submit" value="下载该页面所有图片" />
</form>

运行结果如图:

php中使用gd库实现下载网页中所有图片

PHP 相关文章推荐
用PHP将数据导入到Foxmail
Oct 09 PHP
Linux下 php5 MySQL5 Apache2 phpMyAdmin ZendOptimizer安装与配置[图文]
Nov 18 PHP
PHP几个数学计算的内部函数学习整理
Aug 06 PHP
PHP文件操作实现代码分享
Sep 01 PHP
php 阴历-农历-转换类代码
Jan 16 PHP
探讨各种PHP字符串函数的总结分析
Jun 05 PHP
php数组索引的Key加引号和不加引号的区别
Aug 19 PHP
THINKPHP2.0到3.0有哪些改进之处
Jan 04 PHP
PHP图片水印类的封装
Jul 06 PHP
利用PHP访问MySql数据库的逻辑操作以及增删改查的实例讲解
Aug 30 PHP
php nginx 实时输出的简单实现方法
Jan 21 PHP
在laravel框架中实现封装公共方法全局调用
Oct 14 PHP
php中使用gd库实现远程图片下载实例
May 12 #PHP
PHP输入输出流学习笔记
May 12 #PHP
PHP SPL标准库之SplFixedArray使用实例
May 12 #PHP
php中get_defined_constants函数用法实例分析
May 12 #PHP
PHP SPL标准库之数据结构栈(SplStack)介绍
May 12 #PHP
php遍历类中包含的所有元素的方法
May 12 #PHP
PHP 双链表(SplDoublyLinkedList)简介和使用实例
May 12 #PHP
You might like
PHP中使用php5-ffmpeg撷取视频图片实例
2015/01/07 PHP
Javascript 篱式条件判断
2008/08/22 Javascript
统计jQuery中各字符串出现次数的工具
2012/05/03 Javascript
js计算字符串长度包含的中文是utf8格式
2013/10/15 Javascript
node.js超时timeout详解
2014/11/26 Javascript
js超时调用setTimeout和间歇调用setInterval实例分析
2015/01/28 Javascript
js实现select跳转菜单新窗口效果代码分享(超简单)
2015/08/21 Javascript
JS实现带圆弧背景渐变效果的导航菜单代码
2015/10/13 Javascript
详解JavaScript语言的基本语法要求
2015/11/20 Javascript
Bootstrap每天必学之标签页(Tab)插件
2020/08/09 Javascript
学JavaScript七大注意事项【必看】
2016/05/04 Javascript
javascript实现右下角广告框效果
2017/02/01 Javascript
jQuery实现遍历复选框的方法示例
2017/03/06 Javascript
微信小程序 监听手势滑动切换页面实例详解
2017/06/15 Javascript
JavaScript常用数学函数用法示例
2018/05/14 Javascript
vue 基于element-ui 分页组件封装的实例代码
2018/12/10 Javascript
微信小程序如何引用外部js,外部样式,公共页面模板
2019/07/23 Javascript
node事件循环和process模块实例分析
2020/02/14 Javascript
Python实现单词拼写检查
2015/04/25 Python
python学习之面向对象【入门初级篇】
2017/01/21 Python
python基于plotly实现画饼状图代码实例
2019/12/16 Python
python框架Django实战商城项目之工程搭建过程图文详解
2020/03/09 Python
Django实现图片上传功能步骤解析
2020/04/22 Python
Python实现播放和录制声音的功能
2020/08/12 Python
python RSA加密的示例
2020/12/09 Python
HTML5实现锚点时请使用id取代name
2013/09/06 HTML / CSS
在线购买廉价折扣书籍和小说:BookOutlet.com
2018/02/19 全球购物
Pretty You London官网:英国拖鞋和睡衣品牌
2019/05/08 全球购物
银行办公室岗位职责
2014/03/10 职场文书
数字化校园建设方案
2014/05/03 职场文书
铁人纪念馆观后感
2015/06/16 职场文书
导游词之重庆渣滓洞
2020/01/08 职场文书
python基于tkinter制作m3u8视频下载工具
2021/04/24 Python
单身狗福利?Python爬取某婚恋网征婚数据
2021/06/03 Python
nginx服务器的下载安装与使用详解
2021/08/02 Servers
2007年老电脑安装win11会怎么样? 网友实测win11在老电脑运行良好
2021/11/21 数码科技