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 相关文章推荐
php采集文章中的图片获取替换到本地(实现代码)
Jul 08 PHP
PHP的变量类型和作用域详解
Mar 12 PHP
PHP图片等比例缩放生成缩略图函数分享
Jun 10 PHP
PHP命令行脚本接收传入参数的三种方式
Aug 20 PHP
form表单传递数组数据、php脚本接收的实例
Feb 09 PHP
如何离线执行php任务
Feb 21 PHP
thinkphp关于简单的权限判定方法
Apr 03 PHP
Laravel5中Cookie的使用详解
May 03 PHP
解决form中action属性后面?传递参数 获取不到的问题
Jul 21 PHP
ThinkPHP框架中使用Memcached缓存数据的方法
Mar 31 PHP
PHP7 echo和print语句实例用法
Feb 15 PHP
基于PHP实现生成随机水印图片
Dec 09 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分页函数
2006/07/08 PHP
asp和php下textarea提交大量数据发生丢失的解决方法
2008/01/20 PHP
如何突破PHP程序员的技术瓶颈分析
2011/07/17 PHP
解析PHP处理换行符的问题 \r\n
2013/06/13 PHP
PHP面向对象程序设计实例分析
2016/01/26 PHP
Laravel 5.5基于内置的Auth模块实现前后台登陆详解
2017/12/21 PHP
phpmyadmin在宝塔面板里进不去的解决方案
2020/07/06 PHP
JavaScript对象模型-执行模型
2008/04/28 Javascript
angularjs学习笔记之简单介绍
2015/09/26 Javascript
jQuery插件简单学习实例教程
2016/07/01 Javascript
js中通过getElementsByName访问name集合对象的方法
2016/10/31 Javascript
移动端界面的适配
2017/01/11 Javascript
详解Vue组件实现tips的总结
2017/11/01 Javascript
Vue CLI2升级至Vue CLI3的方法步骤
2019/05/20 Javascript
vue-week-picker实现支持按周切换的日历
2019/06/26 Javascript
layui layer select 选择被遮挡的解决方法
2019/09/21 Javascript
python解决方案:WindowsError: [Error 2]
2016/08/28 Python
python基于C/S模式实现聊天室功能
2019/01/09 Python
Python Pandas 获取列匹配特定值的行的索引问题
2019/07/01 Python
python for和else语句趣谈
2019/07/02 Python
pytorch自定义初始化权重的方法
2019/08/17 Python
pygame编写音乐播放器的实现代码示例
2019/11/19 Python
python 基于opencv实现图像增强
2020/12/23 Python
css3的图形3d翻转效果应用示例
2014/04/08 HTML / CSS
有750多个顶级品牌的瑞士时尚在线:ABOUT YOU
2017/01/04 全球购物
国外最大的眼镜网站:Coastal
2017/08/09 全球购物
Linux上比较文件的命令都有哪些
2012/02/24 面试题
小松树教学反思
2014/02/11 职场文书
优秀毕业生推荐信范文
2014/03/07 职场文书
2014大学生职业生涯规划书最新范文
2014/09/13 职场文书
学校政风行风评议工作总结
2014/10/21 职场文书
《改造我们的学习》心得体会
2014/11/07 职场文书
检讨书范文大全
2015/05/07 职场文书
贫民窟的百万富翁观后感
2015/06/09 职场文书
毕业典礼致辞
2015/07/29 职场文书
java中用float时,数字后面加f,这样是为什么你知道吗
2021/09/04 Java/Android