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 相关文章推荐
追求程序速度,而不是编程的速度
Apr 23 PHP
php header()函数使用说明
Jul 10 PHP
PHP strtok()函数的优点分析
Mar 02 PHP
php垃圾代码优化操作代码
Aug 05 PHP
php发送html格式文本邮件的方法
Jun 10 PHP
CodeIgniter记录错误日志的方法全面总结
May 17 PHP
PHP中用mysqli面向对象打开连接关闭mysql数据库的方法
Nov 05 PHP
php中简单的对称加密算法实现
Jan 05 PHP
Zend Framework框架中实现Ajax的方法示例
Jun 27 PHP
PHP实现动态删除XML数据的方法示例
Mar 30 PHP
php 调用百度sms来发送短信的实现示例
Nov 02 PHP
phpStudy vscode 搭建debug调试的教程详解
Jul 28 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 curl基本操作详解
2013/07/23 PHP
php导出CSV抽象类实例
2014/09/24 PHP
Laravel如何使用Redis共享Session
2018/02/23 PHP
php + WebUploader实现图片批量上传功能
2019/05/06 PHP
PHP使用HTML5 FormData对象提交表单操作示例
2019/07/02 PHP
Jquery 基础学习笔记之文档处理
2009/05/29 Javascript
使用IE6看老赵的博客 jQuery初探
2010/01/17 Javascript
JavaScript setTimeout和setInterval的使用方法 说明
2010/03/25 Javascript
一些实用的jQuery代码片段收集
2011/07/12 Javascript
cookie的复制与使用记住用户名实现代码
2013/11/04 Javascript
JavaScript中判断整数的多种方法总结
2014/11/08 Javascript
原生js实现jquery函数animate()动画效果的简单实例
2016/08/21 Javascript
vue修改vue项目运行端口号的方法
2017/08/04 Javascript
从零开始最小实现react服务器渲染详解
2018/01/26 Javascript
jQuery实现动态显示select下拉列表数据的方法
2018/02/05 jQuery
详解Vue结合后台的列表增删改案例
2018/08/21 Javascript
在Vue 中使用Typescript的示例代码
2018/09/10 Javascript
js 计算图片内点个数的示例代码
2019/04/04 Javascript
js实现金山打字通小游戏
2020/07/24 Javascript
nginx配置域名后的二级目录访问不同项目的配置操作
2020/11/06 Javascript
一个基于flask的web应用诞生 flask和mysql相连(4)
2017/04/11 Python
python中从str中提取元素到list以及将list转换为str的方法
2018/06/26 Python
pandas把所有大于0的数设置为1的方法
2019/01/26 Python
python实现猜数字游戏
2020/03/25 Python
python双向链表原理与实现方法详解
2019/12/03 Python
django 数据库返回queryset实现封装为字典
2020/05/19 Python
突袭HTML5之Javascript API扩展1—Web Worker异步执行及相关概述
2013/01/31 HTML / CSS
瑞士领先的网上超市:LeShop.ch
2018/11/14 全球购物
秘书英文求职信范文
2014/01/31 职场文书
新农村建设典型材料
2014/05/31 职场文书
北京英文导游词
2015/02/12 职场文书
读鲁迅先生的经典名言
2019/08/20 职场文书
CSS3实现的3D隧道效果
2021/04/27 HTML / CSS
python如何利用traceback获取详细的异常信息
2021/06/05 Python
SpringBoot整合Minio文件存储
2022/04/03 Java/Android
详解apache编译安装httpd-2.4.54及三种风格的init程序特点和区别
2022/07/15 Servers