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


Posted in PHP onAugust 20, 2012

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>

运行结果如图:

gd库图片下载类实现下载网页所有图片的php代码下载的图片本例中保存在当前目录的pic文件夹下!

PHP 相关文章推荐
一个简单实现多条件查询的例子
Oct 09 PHP
zen cart新进商品的随机排序修改方法
Sep 10 PHP
php正则过滤html标签、空格、换行符的代码(附说明)
Oct 25 PHP
关于zend studio 出现乱码问题的总结
Jun 23 PHP
如何利用PHP执行.SQL文件
Jul 05 PHP
PHP不用递归实现无限分级的例子分享
Apr 18 PHP
php中限制ip段访问、禁止ip提交表单的代码分享
Aug 22 PHP
PHP定时任务延缓执行的实现
Oct 08 PHP
PHP会话处理的10个函数
Aug 11 PHP
yii2使用ajax返回json的实现方法
May 14 PHP
PHP7新增运算符用法实例分析
Sep 26 PHP
phpStudy中升级MySQL版本到5.7.17的方法步骤
Aug 03 PHP
自己在做项目过程中学到的PHP知识收集
Aug 20 #PHP
用PHP+MySQL搭建聊天室功能实例代码
Aug 20 #PHP
PHP系列学习之日期函数使用介绍
Aug 18 #PHP
PHP中extract()函数的定义和用法
Aug 17 #PHP
Linux下实现PHP多进程的方法分享
Aug 16 #PHP
PHP基础知识回顾
Aug 16 #PHP
php开发文档 会员收费1期
Aug 14 #PHP
You might like
在php MYSQL中插入当前时间
2008/04/06 PHP
让Nginx支持ThinkPHP的URL重写和PATHINFO的方法分享
2011/08/08 PHP
检测codeigniter脚本消耗内存情况的方法
2015/03/21 PHP
PHP实现过滤各种HTML标签
2015/05/17 PHP
php实现微信分享朋友链接功能
2019/02/18 PHP
JS实现打开本地文件或文件夹
2021/03/09 Javascript
Chrome中模态对话框showModalDialog返回值问题的解决方法
2010/05/25 Javascript
node.js中的url.format方法使用说明
2014/12/10 Javascript
jQuery中hide()方法用法实例
2014/12/24 Javascript
浅谈轻量级js模板引擎simplite
2015/02/13 Javascript
jQuery背景插件backstretch使用指南
2015/04/21 Javascript
jQuery mobile 移动web(4)
2015/12/20 Javascript
学习JavaScript事件流和事件处理程序
2016/01/25 Javascript
JS原型链 详解及示例代码
2016/09/06 Javascript
vue-resourse将json数据输出实例
2017/03/08 Javascript
JS模拟实现ECMAScript5新增的数组方法
2017/03/20 Javascript
webpack vue项目开发环境局域网访问方法
2018/03/20 Javascript
vue裁切预览组件功能的实现步骤
2018/05/04 Javascript
vue中使用heatmapjs的示例代码(结合百度地图)
2018/09/05 Javascript
使用Vue.js 和Chart.js制作绚丽多彩的图表
2019/06/15 Javascript
在vue中使用inheritAttrs实现组件的扩展性介绍
2020/12/07 Vue.js
关于小程序优化的一些建议(小结)
2020/12/10 Javascript
[05:29]2014DOTA2国际邀请赛 赛后专访:LGDNewbee顺利过关
2014/07/13 DOTA
用python处理图片之打开\显示\保存图像的方法
2018/05/04 Python
Python之两种模式的生产者消费者模型详解
2018/10/26 Python
Pycharm设置去除显示的波浪线方法
2018/10/28 Python
详解Django中CBV(Class Base Views)模型源码分析
2019/02/25 Python
亚洲独特体验旅游专家:eOasia
2018/08/15 全球购物
英国伦敦的睡衣品牌:Asceno
2019/10/06 全球购物
Hurley官方网站:扎根于海滩生活方式的全球青年文化品牌
2020/05/18 全球购物
心理学专业毕业生推荐信范文
2013/11/21 职场文书
医学生毕业自我鉴定
2014/03/26 职场文书
中国梦演讲稿5分钟
2014/08/19 职场文书
高中课前三分钟演讲稿
2014/09/13 职场文书
转变工作作风心得体会
2016/01/23 职场文书
小型企业的绩效考核制度模板
2019/11/21 职场文书