如何用php采集照片,使用PHP采集远程图片
本文将使用PHP实现采集远程图片功能。基本流程:
1、获取目标网站图片地址。
2、读取图片内容。
3、创建要保存图片的路径并命名图片名称。
4、写入图片内容。
5、完成。
我们通过写几个函数来实现这一过程。
函数make_dir()建立目录。判断要保存的图片文件目录是否存在,如果不存在则创建目录,并且将目录设置为可写权限。
function make_dir($path){
if(!file_exists($path)){//不存在则建立
$mk=@mkdir($path,0777); //权限
@chmod($path,0777);
}
return true;
}
函数read_filetext()取得图片内容。使用fopen打开图片文件,然后fread读取图片文件内容。
function read_filetext($filepath){
$filepath=trim($filepath);
$htmlfp=@fopen($filepath,"r");
//远程
if(strstr($filepath,"://")){
while($data=@fread($htmlfp,500000)){
$string.=$data;
}
}
//本地
else{
$string=@fread($htmlfp,@filesize($filepath));
}
@fclose($htmlfp);
return $string;
}
函数write_filetext()写文件,将图片内容fputs写入文件中,即保存图片文件。
function write_filetext($filepath,$string){
//$string=stripSlashes($string);
$fp=@fopen($filepath,"w");
@fputs($fp,$string);
@fclose($fp);
}
函数get_filename()获取图片名称,也可以自定义要保存的文件名。
function get_filename($filepath){
$fr=explode("/",$filepath);
$count=count($fr)-1;
return $fr[$count];
}
然后将几个函数组合,在函数save_pic()中调用,最后返回保存后的图片路径。
function save_pic($url,$savepath=''){
//处理地址
$url=trim($url);
$url=str_replace(" ","%20",$url);
//读文件
$string=read_filetext($url);
if(empty($string)){
echo '读取不了文件';exit;
}
//文件名
$filename = get_filename($url);
//存放目录
make_dir($savepath); //建立存放目录
//文件地址
$filepath = $savepath.$filename;
//写文件
write_filetext($filepath,$string);
return $filepath;
}
最后一步就是调用save_pic()函数保存图片,我们使用以下代码做测试。
//目标图片地址
$pic = "http://img0.pconline.com.cn/pconline/1205/06/2776119_end1_thumb.jpg";
//保存目录
$savepath = "images/";
echo save_pic($pic,$savepath);
实际应用中,我们可能会采集某个站点的内容,比如产品信息,包括采集防盗链的图片保存到网站上服务器上。这时我们可以使用正则匹配页面内容,将页面中相匹配的图片都找出来,然后分别下载到网站服务器上,完成图片的采集。以下代码仅供测试:
function get_pic($cont,$path){
$pattern_src = '//';
$num = preg_match_all($pattern_src, $cont, $match_src);
$pic_arr = $match_src[1]; //获得图片数组
foreach ($pic_arr as $pic_item) { //循环取出每幅图的地址
save_pic($pic_item,$path); //下载并保存图片
echo "[OK]..!";
}
}
然后我们通过分析页面内容,将主体内容找出来,调用get_pic()实现图片的保存。
//我们采集太平洋电脑网上一篇关于手机报道内容页的图片
$url = "http://gz.pconline.com.cn/321/3215791.html";
$content = file_get_contents($url);//获取网页内容
$preg = '#
preg_match_all($preg, $content, $arr);
$cont = $arr[1][0];
get_pic($cont,'img/');
以上代码笔者亲测,可以采集图片,但是还有些场景没考虑进去,比如目标网站做了302多次跳转的,目标网站做了多种防采集的,留给喜欢折腾的同学去试试吧。
如何用php采集照片,使用PHP采集远程图片相关推荐
- php74 骑士 火车头采集简历 接口及采集规则
研究了下骑士官方发布的火车头采集接口api并没有相关简历对应的采集接口 因此就自己写了个方法对应简历采集接口实现可查询.相关字段匹配等.和企业采集接口匹配基本一样. 支持图片采集. 图片采集到的文件目 ...
- PHP下载/采集远程图片到本地
2019独角兽企业重金招聘Python工程师标准>>> PHP下载/采集远程图片到本地01 /** 02* 下载远程图片到本地 03* 04* @param string $url ...
- python采集文章_八爪鱼采集器能取代python爬虫吗?
作为同时使用八爪鱼采集器和写爬虫的非技术的莫名其妙喜欢自己琢磨技术的互联网运营喵...我来谈谈心得感想. 八爪鱼有一些优势,比如学习成本低,可视化流程,快速搭建采集系统.能直接导出excel文件和导出 ...
- PHP采集商家信息及采集方法概述(上)
最近电子商务市场上面,有很多商家的导航,里面收集了大量的商家信息,如果从事电子商务的这些信息还是有用的.我最近在做的一个项目就要用到这些信息,但是你总不能给别人要吧,这样别人是不给滴.所以只有自己爬了 ...
- DiscuzNT改造-远程内容自动采集-DNT2.5(定时采集、源码下载)
这个采集器原型来自于 <Discuz!NT论坛超级采集器普及版>http://nt.discuz.net/showtopic-46542.html,感谢原作者! 使用说明: 1. 将运行程 ...
- 【流媒體】Android 实时视频采集—Camera预览采集
[流媒體]Android 实时视频采集-Cameara预览采集 SkySeraph Mar 26th 2012 SZ Email:skyseraph00@163.com 更多精彩请直接访问SkySe ...
- (求解答)phpcms报错:【DNS解析“不支持采集和报错远程图片”】
PHPCMS报错: DNS解析 · "不支持采集和报错远程图片" 报错 · 截图示下: 原因分析: 网上有说是虚拟机问题? 如何解决? //欢迎大家给出参考意见或者解决方案. // ...
- 如何用PS把照片变成红/白/蓝底
如何用PS把照片变成红/白/蓝底 1.魔棒工具,删除大块的颜色背景. 2.利用多边形套索工具,放大图片200%,一点点圈下交界处. 3.油漆桶,点需要的颜色 完成 欢迎使用Markdown编辑器 你好 ...
- 视频资源网站采集-视频资源API采集教程
视频资源采集,怎么批量采集视频资源,视频资源网怎么批量采集.今天给大家分享一款视频资源采集软件只需要输入域名或者输入关键词自动采集视频.支持导出,支持采集视频URL链接,详细参考图片 在日益剧烈的市场 ...
最新文章
- html5动态圆,HTML5 很有创意的圆形导航动画
- django2.2 配置urls(亲测)
- 基于CNN的性别、年龄识别及Demo实现
- GRPC协议的相关原理
- mysql parameter_C#MySqlParameter问题
- H5学习之旅-H5列表(8)
- 杂论架构—架构是一种设计 转。。。
- select语句一些要点(一)
- .NETFramework:Byte
- 简直不要太硬了!一文带你彻底理解文件系统 | 原力计划
- smpt authentification 配置
- 哨兵1号(Sentinel-1)与陆地探测1号(L-SAR)对比
- 关于磁力计偏置值的标定实践
- Java并发编程——创建线程的三种方法以及区别
- Python 局域网扫描存活主机开放端口
- 总结:图像识别的机器学习方法
- 此图形驱动程序无法找到兼容的图形硬件的解决方案(复制粘贴源于百度http://jingyan.baidu.com/article...
- # JAVA实现评论功能设计开发
- LeetCode42题,单调栈、构造法、two pointers,这道Hard题的解法这么多?
- ADT: Graph 图
热门文章
- Python 实用冷门知识整理
- python中Dict与OrderedDict
- python中的逻辑关系
- 关于python使用threadpool中的函数单个参数和多个参数用法举例
- c mysql 内存泄露_c代码连接mysql数据库内存泄露的问题
- python functools模块(主要是为函数式编程而设计,用于增强函数功能,主要为可调用对象(callable objects)定义高阶函数或操作)
- python matplotlib.pyplot.xticks() yticks() (设置x或y轴对应显示的标签)
- java到android_Java到Android?
- 目前成熟的计算机安全技术,计算机安全危害特点研究(共2389字).doc
- java常用的排序算法的思想以及实现