php远程图片抓取存放到本地路径并生成缩略图
private function _getcontent($content)
{
$img_dir='../Public/Img/Ycimg'; //远程图片抓取存放到本地路径
$body = stripslashes($content);
$img_array = array();
preg_match_all("/(src|SRC)=[\"|'| ]{0,}(http:\/\/(.*)\.(gif|jpg|jpeg|bmp|png))/isU",$body,$img_array);
$img_array = array_unique($img_array[2]);
// dump($img_array);
set_time_limit(0);
$imgUrl = $img_dir."/".strftime("%Y%m%d",time()); //保存文件夹
$imgPath = $base_dir.$imgUrl;
$milliSecond = strftime("%H%M%S",time());
if(!is_dir($imgPath)) @mkdir($imgPath,0777); //如果没有该文件夹 则创建
foreach($img_array as $key =>$value)
{
if (strpos($value,'bamaol.com')==false)
{
$value = trim($value);
$get_file = @file_get_contents($value);
$rndFileName = $imgPath."/".$milliSecond.$key.".".substr($value,-3,3);
$fileurl = $imgUrl."/".$milliSecond.$key.".".substr($value,-3,3);
$filesmall=$imgUrl."/bamaol_".$milliSecond.$key.".".substr($value,-3,3); //缩略图
if($get_file)
{
$fp = @fopen($rndFileName,"w");
//$fp1 = @fopen($filesmall,"w");
@fwrite($fp,$get_file);
// @fwrite($fp1,$get_file);
@fclose($fp);
// @fclose($fp1);
}
$this->img2thumb($fileurl,$filesmall);//调用缩略图方法
$body = ereg_replace($value,$filesmall,$body);
}
}
return $body;
}
/**
* 生成缩略图
* @param string 源图绝对完整地址{带文件名及后缀名}
* @param string 目标图绝对完整地址{带文件名及后缀名}
* @param int 缩略图宽{0:此时目标高度不能为0,目标宽度为源图宽*(目标高度/源图高)}
* @param int 缩略图高{0:此时目标宽度不能为0,目标高度为源图高*(目标宽度/源图宽)}
* @param int 是否裁切{宽,高必须非0}
* @param int/float 缩放{0:不缩放, 0<this<1:缩放到相应比例(此时宽高限制和裁切均失效)}
* @return boolean
*/
private function img2thumb($src_img, $dst_img, $width = 150, $height =150, $cut =1, $proportion = 0)
{
//$src_img='../Public/Img/Ycimg/20131105/2105260.jpg';
if(!is_file($src_img))
{
return false;
}
$ot = $this->fileext($dst_img);
$otfunc = 'image' . ($ot == 'jpg' ? 'jpeg' : $ot);
$srcinfo = getimagesize($src_img);
$src_w = $srcinfo[0];
$src_h = $srcinfo[1];
$type = strtolower(substr(image_type_to_extension($srcinfo[2]), 1));
$createfun = 'imagecreatefrom' . ($type == 'jpg' ? 'jpeg' : $type);
$dst_h = $height;
$dst_w = $width;
$x = $y = 0;
/**
* 缩略图不超过源图尺寸(前提是宽或高只有一个)
*/
if(($width> $src_w && $height> $src_h) || ($height> $src_h && $width == 0) || ($width> $src_w && $height == 0))
{
$proportion = 1;
}
if($width> $src_w)
{
$dst_w = $width = $src_w;
}
if($height> $src_h)
{
$dst_h = $height = $src_h;
}
if(!$width && !$height && !$proportion)
{
return false;
}
if(!$proportion)
{
if($cut == 0)
{
if($dst_w && $dst_h)
{
if($dst_w/$src_w> $dst_h/$src_h)
{
$dst_w = $src_w * ($dst_h / $src_h);
$x = 0 - ($dst_w - $width) / 2;
}
else
{
$dst_h = $src_h * ($dst_w / $src_w);
$y = 0 - ($dst_h - $height) / 2;
}
}
else if($dst_w xor $dst_h)
{
if($dst_w && !$dst_h) //有宽无高
{
$propor = $dst_w / $src_w;
$height = $dst_h = $src_h * $propor;
}
else if(!$dst_w && $dst_h) //有高无宽
{
$propor = $dst_h / $src_h;
$width = $dst_w = $src_w * $propor;
}
}
}
else
{
if(!$dst_h) //裁剪时无高
{
$height = $dst_h = $dst_w;
}
if(!$dst_w) //裁剪时无宽
{
$width = $dst_w = $dst_h;
}
$propor = min(max($dst_w / $src_w, $dst_h / $src_h), 1);
$dst_w = (int)round($src_w * $propor);
$dst_h = (int)round($src_h * $propor);
$x = ($width - $dst_w) / 2;
$y = ($height - $dst_h) / 2;
}
}
else
{
$proportion = min($proportion, 1);
$height = $dst_h = $src_h * $proportion;
$width = $dst_w = $src_w * $proportion;
}
$src = $createfun($src_img);
$dst = imagecreatetruecolor($width ? $width : $dst_w, $height ? $height : $dst_h);
$white = imagecolorallocate($dst, 255, 255, 255);
imagefill($dst, 0, 0, $white);
if(function_exists('imagecopyresampled'))
{
imagecopyresampled($dst, $src, $x, $y, 0, 0, $dst_w, $dst_h, $src_w, $src_h);
}
else
{
imagecopyresized($dst, $src, $x, $y, 0, 0, $dst_w, $dst_h, $src_w, $src_h);
}
$otfunc($dst, $dst_img);
imagedestroy($dst);
imagedestroy($src);
/* $fp = @fopen($dst_img,"w");
@fwrite($fp,$src_img);
@fclose($fp); */
return true;
}
function fileext($file)
{
return pathinfo($file, PATHINFO_EXTENSION);
}
php远程图片抓取存放到本地路径并生成缩略图的更多相关文章
- Git从远程仓库里拉取一条本地不存在的分支方法
Git从远程仓库里拉取一条本地不存在的分支方法 从远程仓库里拉取一条本地不存在的分支时,进入到对应目录先执行git fetch然后再执行git checkout -b 本地分支名 origin/远程分 ...
- arpspoof+driftnet+ ARP欺骗简单图片抓取
arpspoof+driftnet+ ARP欺骗简单图片抓取 driftnet是一款简单而使用的图片捕获工具,可以很方便的在网络数据包中抓取图片.该工具可以实时和离线捕获指定数据包中是图片 环境 受害 ...
- [python应用]python简单图片抓取
前言 emmmm python简单图片抓取 1 import requests 2 import threading 3 import queue 4 from subprocess import P ...
- git从远程仓库里拉取一条本地不存在的分支
查看远程分支和本地分支 git branch -va 当我想从远程仓库里拉取一条本地不存在的分支时: git checkout -b 本地分支名 origin/远程分支名 例如: 切换远程分支 git ...
- 用WebRequest +HtmlAgilityPack 从外网抓取数据到本地
相信大家对于WebRequest 并不陌生,我们在C#中发请求的方式,就是创建一个WebRequest .那么如果我们想发一个请求到外网,比如国内上不了的一些网站,那么该怎么做呢? 其实WebRequ ...
- [原创]超强C#图片上传,加水印,自动生成缩略图源代码
<%@ Page Language=“C#“ AutoEventWireup=“true“ %> <%@ Import Namespace=“System“ %> <%@ ...
- xheditor编辑器上传截图图片抓取远程图片代码
xheditor是一款很不错的开源编辑器,用起来很方便也很强大. 分享一个xheditor直接上传截图的问题解决方法. 第一步.设置参数 localUrlTest:/^https?:\/\/[^\/] ...
- git中使用命令将远程仓库拉取项目在本地文件夹
在有些时候,我们往往从github或者gitlab或者coding上面直接下载项目下来运行,但是这种情况往往没有使用git远程拉取来的安全(或者叫装逼), 所以这里我以gitLab为例子,说一下如何将 ...
- Python爬虫入门教程 18-100 煎蛋网XXOO图片抓取
写在前面 很高兴我这系列的文章写道第18篇了,今天写一个爬虫爱好者特别喜欢的网站煎蛋网http://jandan.net/ooxx,这个网站其实还是有点意思的,网站很多人写了N多的教程了,各种方式的都 ...
随机推荐
- IE11-IE不再任性了-关于attachEvent
今天解决了一个IE11的兼容问题,关于attachEvent的. 控件是ActiveX的,需要监听一个控件相关的事件.蓦然发现attachEvent在IE11不支持了...attachEvent不是I ...
- JS与JQ倒计时的写法
页面需要制作一个倒计时的功能:然后度娘了一遍,找到两种写法,原生JS与JQ 的,经过测试原生JS在IE可能会有不刷新的现象所以结合了一个大神的JQ写法修改好了一个. 原生JS写法: HTML: < ...
- 【MySQL】触发器学习
MySQL手册中对触发器的定义是: 触发程序是与表有关的命名数据库对象,当表上出现特定事件时,将激活该对象.表必须是永久性表,不能将触发程序与临时表与视图关联起来. 相同触发程序动作时间和事件的给定表 ...
- zedboard如何从PL端控制DDR读写(一)
看了一段时间的DDR手册,感觉大体有一点了解了,想要实际上板调试,然而实验室可用的开发板不多,拿了一块zynq板看了看,DDR确实有,但是已经集成了控制器,而且控制器还放到了PS端,PL只能通过AXI ...
- Linux:设置alias永久生效
登录数据库每次要输入密码,如:[root@localhost ~]# mysql -p123456 觉得麻烦... 简单的方法可以设置别名:alias mysql="mysql -p1234 ...
- 重装linux后
root帐号解禁vi /etc/pam.d/gdmvi /etc/pam.d/gdm-passwd 两个装机必备软件源http://download1.rpmfusion.org/nonfree/fe ...
- java 字节流和字符流的区别
转载自:http://blog.csdn.net/cynhafa/article/details/6882061 java 字节流和字符流的区别 字节流与和字符流的使用非常相似,两者除了操作代码上的不 ...
- phalcon框架学习之router
router定义 在DI中注册router的方法: $di->set('router', function(){ $router = new Phalcon\Mvc\Router(); $rou ...
- c#使用DocX给word添加目录TOC
刚要做目录的时候,我就想DocX应该提供了这个方面的函数.于是我就在讨论区搜索,看看别人是怎么用的. 我搜索了catalog; catalogue; list; contents;,但是都没有和目录有 ...
- C#关于值类型和引用类型的备忘
值类型 引用类型 内存分配地点 分配在栈中 分配在堆中 效率 效率高,不需要地址转换 效率低,需要进行地址转换 内存回收 使用完后,立即回收 使用完后,不是立即回收,等待GC回收 赋值操作 进行复 ...