php 文章中的远程图片采集到本地
//正则(这个还不是)
$reg = "/<img[^>]*src="(http://(.+)/(.+).(jpg|gif|bmp|bnp))"/isU";
//把抠出来的 img 地址存放到 $img_array 变量中
preg_match_all($reg, $message, $img_array, PREG_PATTERN_ORDER);
//过滤重复的图片
$img_array = array_unique($img_array[1]);
第二步. 把$img_array 数组循环一下. 做图片保存和文章位置替换
//判断是否是自己网站上的 图片
if('xxx.com' != get_domain($img)){// 如果这个图片不是自己服务器上的
//读取图片文件
$Gimg = new GetImage();
$Gimg->source = $img;
$Gimg->save_to = './data/temp/';
$FILE = $Gimg->download(); //图片移动到本地
//保存到相册 得到图片保存的位置
$img_path = pic_save($FILE,0,'');
//文本路径替换
$message = str_replace($img, $img_path, $message);
}
}
....这时候 $message 里面已经图片已经替换为自己服务器本地的地址,并且图片也保存到自己的服务器上.
//从url中获得域名
function get_domain($url){
$pattern = "/[w-]+.(com|net|org|gov|cc|biz|info|cn)(.(cn|hk))*/";
preg_match($pattern, $url, $matches);
if(count($matches) > 0) {
return $matches[0];
}else{
$rs = parse_url($url);
$main_url = $rs["host"];
if(!strcmp(long2ip(sprintf("%u",ip2long($main_url))),$main_url)) {
return $main_url;
}else{
$arr = explode(".",$main_url);
$count=count($arr);
$endArr = array("com","net","org","3322");//com.cn net.cn 等情况
if (in_array($arr[$count-2],$endArr)){
$domain = $arr[$count-3].".".$arr[$count-2].".".$arr[$count-1];
}else{
$domain = $arr[$count-2].".".$arr[$count-1];
}
return $domain;
}// end if(!strcmp...)
}// end if(count...)
}// end function
// 从远程吧图片载到服务器本地 的 类
class GetImage {
var $source;
var $save_to;
var $quality;
function download($method = 'curl') {
$info = @GetImageSize($this->source);
$mime = $info['mime'];
// What sort of image?
$type = substr(strrchr($mime, '/'), 1);
switch ($type){
case 'jpeg':
$image_create_func = 'ImageCreateFromJPEG';
$image_save_func = 'ImageJPEG';
$new_image_ext = 'jpg';
// Best Quality: 100
$quality = isSet($this->quality) ? $this->quality : 100;
break;
case 'png':
$image_create_func = 'ImageCreateFromPNG';
$image_save_func = 'ImagePNG';
$new_image_ext = 'png';
// Compression Level: from 0 (no compression) to 9
$quality = isSet($this->quality) ? $this->quality : 0;
break;
case 'bmp':
$image_create_func = 'ImageCreateFromBMP';
$image_save_func = 'ImageBMP';
$new_image_ext = 'bmp';
break;
case 'gif':
$image_create_func = 'ImageCreateFromGIF';
$image_save_func = 'ImageGIF';
$new_image_ext = 'gif';
break;
case 'vnd.wap.wbmp':
$image_create_func = 'ImageCreateFromWBMP';
$image_save_func = 'ImageWBMP';
$new_image_ext = 'bmp';
break;
case 'xbm':
$image_create_func = 'ImageCreateFromXBM';
$image_save_func = 'ImageXBM';
$new_image_ext = 'xbm';
break;
default:
$image_create_func = 'ImageCreateFromJPEG';
$image_save_func = 'ImageJPEG';
$new_image_ext = 'jpg';
}
if(isSet($this->set_extension)){
$ext = strrchr($this->source, ".");
$strlen = strlen($ext);
$new_name = basename(substr($this->source, 0, -$strlen)).'.'.$new_image_ext;
}else{
$new_name = basename($this->source);
}
$save_to = $this->save_to."/blog_insert_temp_".time().mt_rand(1,99).".".$new_image_ext;
//输出对象 组成跟$_FILE变量一样 得到后自己和平常图片上传处理一样了
$img_info['name'] = basename($this->source);
$img_info['type'] = $mime;
$img_info['size'] = 1000;
$img_info['tmp_name'] = $save_to;
$img_info['error'] = 0;
if($method == 'curl'){
$save_image = $this->LoadImageCURL($save_to);
}elseif($method == 'gd'){
$img = $image_create_func($this->source);
if(isSet($quality)){
$save_image = $image_save_func($img, $save_to, $quality);
}else{
$save_image = $image_save_func($img, $save_to);
}
}
return $img_info;
}
function LoadImageCURL($save_to){
$ch = curl_init($this->source);
$fp = fopen($save_to, "wb");
// set URL and other appropriate options
$options = array(CURLOPT_FILE => $fp,
CURLOPT_HEADER => 0,
CURLOPT_FOLLOWLOCATION => 1,
CURLOPT_TIMEOUT => 60); // 1 minute timeout (should be enough)
curl_setopt_array($ch, $options);
curl_exec($ch);
curl_close($ch);
fclose($fp);
}
}
php实例多文件上传实例代码
//a = $('<span class="MultiFile-title" title="'+MultiFile.STRING.selected.replace('$file', v)+'">'+MultiFile.STRING.file.replace('$file', v.match(/[^/\]+$/gi)[0])+'</span>'),
//这是新的代码结构.
//取出图片格式.
ext = String(v.match(/.w{1,4}$/gi));
// v变量是路径地址, 所以可以直接用img来显示出来.
var imgs = (ext=='.jpg' || ext=='.gif' || ext=='.png')?'<img onmouseover="alert(this.src)" width="30" src="'+v+'"/>':'';
// 从'+imgs+'开始,就是我增加的.
a = $('<span class="MultiFile-title" title="'+MultiFile.STRING.selected.replace('$file', v)+'">'+MultiFile.STRING.file.replace('$file', v.match(/[^/\]+$/gi)[0])+'</span> '+imgs+' <a class="a_b" href="javascript:;" title="点击插入主题" rsok="'+slave_count+'" onclick="alert('+slave_count+'); return false">点击插入</a>'),
b = $('<a class="MultiFile-remove" href="#'+MultiFile.wrapID+'">'+MultiFile.STRING.remove+'</a>');
复制代码<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml">
<head>
<meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
<title>无标题文档</title>
</head>
<script type="text/javascript" src="jquery.js"></script>
<script type="text/javascript" src="jquery.MultiFile.js"></script>
<script type="text/javascript">
<!--
$(function (){
//测试jquery是否加载
//alert('jquery');
//用示例7模式的内容
$('#T7').MultiFile({
list: '#T7-list'
});
})
-->
</script>
<body style="font-size:14px; margin:10%; height:">
<!--建立一个ID #T7 相应的设置一个div为T7-list来显示内容-->
<input id="T7" name="upfile" type="file" />
<div id="T7-list"></div>
<div>部分测试: <a href="javascript:;" onclick="alert($('#T7-list').html())">列表内容</a></div>
</body>
</html>
复制代码 //对于编辑来说, 键名key就会从0开始计算.所以获取一下附件最后一个rsok值是非常重要的.
//var int_s=$('.a_b:last').attr('rsok');
// Bind functionality to the first element
if(!MultiFile.MultiFile) MultiFile.addSlave(MultiFile.e, 0);
复制代码
class upload_class{
private $ptname; //上传表单名称;
private $udname; //是否以月份建立子目录(0为否,其他为真);
private $ufname; //是否以时间建立文件名(0为否,其他为真);
private $ultype; //上传文件类型;
private $ulsize; //上传文件大小;
private $ulname; //输出文件名称;
private $ulpath; //输出文件路径;
private $wm; //水印附加(0为不加,其他为加);
private $wmtype; //水印类型(0为文字,其他为图片);
private $wmpic; //水印图片;
private $wmpicquality; //图片质量;
private $wmpictrans; //图片透明;
private $wmstr; //水印字符;
private $wmstrsize; //字符大小;
private $wmstrfont; //字符字体;
private $wmstrcolor; //字符颜色;
private $wmpos; //水印位置(1为顶端居左,2为顶端居中,3为顶端居右……);
function __construct($ptname='upfile',$udname=1,$ufname=1,$ultype=array('image/jpg','image/jpeg','image/png','image/pjpeg','image/gif','image/bmp','image/x-png'),$wm=1,$wmtype=1,$wmpic='images/wm.gif',$ulsize=2097152,$ulpath='images/temp/',$wmpictrans=20,$wmpicquality=80,$wmstr='DONLINE',$wmstrsize=5,$wmstrfont='./font/cour.ttf',$wmstrcolor='#ff0000',$wmpos=9){
$this->ptname=$_FILES[$ptname];
$this->udname=$udname;
$this->ufname=$ufname;
$this->ultype=$ultype;
$this->ulsize=$ulsize;
$this->ulpath=$ulpath;
$this->wm=$wm;
$this->wmtype=$wmtype;
$this->wmpic=$wmpic;
$this->wmpicquality=$wmpicquality;
$this->wmpictrans=$wmpictrans;
$this->wmstr=$wmstr;
$this->wmstrsize=$wmstrsize;
$this->wmstrfont=$wmstrfont;
$this->wmstrcolor=$wmstrcolor;
$this->wmpos=$wmpos;
}
function uploadfun(){
if($_SERVER['REQUEST_METHOD']=='POST'){
if(!is_uploaded_file($this->ptname['tmp_name']))$this->errorfun('上传失败!');
if(!in_array($this->ptname['type'],$this->ultype))$this->errorfun('不支持的文件类型!');
if($this->ulsize<$this->ptname['size'])$this->errorfun('文件太大!');
if($this->udname){date_default_timezone_set('UTC');$this->ulpath=$this->ulpath.'month_'.date('Ym').'/';}
else{$this->ulpath=$this->ulpath;}
$this->createfun($this->ulpath);
if($this->ufname){$t=pathinfo($this->ptname['name']);$this->ulname=$this->ulpath.time().'.'.$t['extension'];}
else{$this->ulname=$this->ulpath.$this->ptname['name'];}
if(file_exists($this->ulname))$this->errorfun('该文件已存在!');
if(!move_uploaded_file($this->ptname['tmp_name'],$this->ulname))$this->errorfun('移动文件错误!');
$this->wmfun();
$this->errorfun('上传成功!');
}
}
function createfun($d){
if(!file_exists($d)){$this->createfun(dirname($d));mkdir($d);}
}
function wmfun(){
if($this->wm){
if(file_exists($this->ulname)){
$groundimg=getimagesize($this->ulname);
$ow=$groundimg[0];
$oh=$groundimg[1];
switch($groundimg[2]){
case 1:$g=imagecreatefromgif($this->ulname);break;
case 2:$g=imagecreatefromjpeg($this->ulname);break;
case 3:$g=imagecreatefrompng($this->ulname);break;
case 4:$g=imagecreatefromwbmp($this->ulname);break;
default:$this->errorfun('不支持的背景图片类型!');
}
}
else{$this->errorfun('背景图片不存在!');}
if(file_exists($this->wmpic)){
$wmimg=getimagesize($this->wmpic);
$ww=$wmimg[0];
$wh=$wmimg[1];
switch($wmimg[2]){
case 1:$w=imagecreatefromgif($this->wmpic);break;
case 2:$w=imagecreatefromjpeg($this->wmpic);break;
case 3:$w=imagecreatefrompng($this->wmpic);break;
case 4:$w=imagecreatefromwbmp($this->wmpic);break;
default:$this->errorfun('不支持的水印图片类型!');
}
}
else{$this->errorfun('水印图片不存在!');}
switch($this->wmtype){
case 0:$tp=imagettfbbox(ceil($this->wmstrsize*2.5),0,$this->wmstrfont,$this->wmstr);$ww=$tp[2]-$tp[6];$wh=$tp[3]-$tp[7];unset($tp);break;
case 1:$ww=$ww;$wh=$wh;break;
default:$ww=$ww;$wh=$wh;break;
}
if($ow<$ww || $oh<$wh)$this->errorfun('背景图片太小!无法生成水印!');
switch($this->wmpos){
case 0:$x=rand(0,($ow-$ww));$y=rand(0,($oh-$wh));break;//随机
case 1:$x=0;$y=0;break;//1为顶端居左
case 2:$x=($ow-$ww)/2;$y=0;break;//2为顶端居中
case 3:$x=$ow-$ww;$y=0;break;//3为顶端居右
case 4:$x=0;$y=($oh-$wh)/2;break;//4为中部居左
case 5:$x=($ow-$ww)/2;$y=($oh-$wh)/2;break;//5为中部居中
case 6:$x=$ow-$ww;$y=($oh-$wh)/2;break;//6为中部居右
case 7:$x=0;$y=$oh-$wh;break;//7为底端居左
case 8:$x=($ow-$ww)/2;$y=$oh-$wh;break;//8为底端居中
case 9:$x=$ow-$ww;$y=$oh-$wh;break;//9为底端居右
default:$x=rand(0,($ow-$ww));$y=rand(0,($oh-$wh));break;//随机
}
imagealphablending($g, true);
switch($this->wmtype){
case 0:
if($this->wmstrcolor){$R=hexdec(substr($this->wmstrcolor,1,2));$G=hexdec(substr($this->wmstrcolor,3,2));$B=hexdec(substr($this->wmstrcolor,5));}
else{$this->errorfun('水印文字颜色不存在!');}
imagestring($g,$this->wmstrfont,$x,$y,$this->wmstr,imagecolorallocate($g,$R,$G,$B));break;
case 1;imagecopymerge($g,$w,$x,$y,0,0,$ww,$wh,$this->wmpictrans);break;
default:imagecopymerge($g,$w,$x,$y,0,0,$ww,$wh,$this->wmpictrans);break;
}
@unlink($this->ulname);
switch($groundimg[2]){
case 1:imagegif($g,$this->ulname);break;
case 2:imagejpeg($g,$this->ulname,$this->wmpicquality);break;
case 3:imagepng($g,$this->ulname);break;
case 4:imagewbmp($g,$this->ulname);break;
default:$this->errorfun('生成图片失败!');
}
if(isset($wmimg))unset($wmimg);
if(isset($w))imagedestroy($w);
unset($groundimg);
imagedestroy($g);
}
}
function errorfun($e='未知错误!'){
$msg='<script language="javascript" type="text/javascript">';
$msg.='alert("'.$e.'");';
$msg.='history.back();';
$msg.='</script>';
echo $msg;
exit;
}
}
?>
class tree
{
/**
* 生成树型结构所需要的2维数组
* @var array
*/
var $arr = array();
/**
* 生成树型结构所需修饰符号,可以换成图片
* @var array
*/
var $icon = array('│','├','└');
/**
* @access private
*/
var $ret = '';
/**
* 构造函数,初始化类
* @param array 2维数组,例如:
* array(
* 1 => array('id'=>'1','parentid'=>0,'name'=>'一级栏目一'),
* 2 => array('id'=>'2','parentid'=>0,'name'=>'一级栏目二'),
* 3 => array('id'=>'3','parentid'=>1,'name'=>'二级栏目一'),
* 4 => array('id'=>'4','parentid'=>1,'name'=>'二级栏目二'),
* 5 => array('id'=>'5','parentid'=>2,'name'=>'二级栏目三'),
* 6 => array('id'=>'6','parentid'=>3,'name'=>'三级栏目一'),
* 7 => array('id'=>'7','parentid'=>3,'name'=>'三级栏目二')
* )
*/
function tree($arr=array())
{
$this->arr = $arr;
$this->ret = '';
return is_array($arr);
}
/**
* 得到父级数组
* @param int
* @return array
*/
function get_parent($myid)
{
$newarr = array();
if(!isset($this->arr[$myid])) return false;
$pid = $this->arr[$myid]['parentid'];
$pid = $this->arr[$pid]['parentid'];
if(is_array($this->arr))
{
foreach($this->arr as $id => $a)
{
if($a['parentid'] == $pid) $newarr[$id] = $a;
}
}
return $newarr;
}
/**
* 得到子级数组
* @param int
* @return array
*/
function get_child($myid)
{
$a = $newarr = array();
if(is_array($this->arr))
{
foreach($this->arr as $id => $a)
{
if($a['parentid'] == $myid) $newarr[$id] = $a;
}
}
return $newarr ? $newarr : false;
}
/**
* 得到当前位置数组
* @param int
* @return array
*/
function get_pos($myid,&$newarr)
{
$a = array();
if(!isset($this->arr[$myid])) return false;
$newarr[] = $this->arr[$myid];
$pid = $this->arr[$myid]['parentid'];
if(isset($this->arr[$pid]))
{
$this->get_pos($pid,$newarr);
}
if(is_array($newarr))
{
krsort($newarr);
foreach($newarr as $v)
{
$a[$v['id']] = $v;
}
}
return $a;
}
/**
* 得到树型结构
* @param int ID,表示获得这个ID下的所有子级
* @param string 生成树型结构的基本代码,例如:"<option value=$id $selected>$spacer$name</option>"
* @param int 被选中的ID,比如在做树型下拉框的时候需要用到
* @return string
*/
function get_tree($myid, $str, $sid = 0, $adds = '', $str_group = '')
{
$number=1;
$child = $this->get_child($myid);
if(is_array($child))
{
$total = count($child);
foreach($child as $id=>$a)
{
$j=$k='';
if($number==$total)
{
$j .= $this->icon[2];
}
else
{
$j .= $this->icon[1];
$k = $adds ? $this->icon[0] : '';
}
$spacer = $adds ? $adds.$j : '';
$selected = $id==$sid ? 'selected' : '';
@extract($a);
$parentid == 0 && $str_group ? eval("$nstr = "$str_group";") : eval("$nstr = "$str";");
$this->ret .= $nstr;
$this->get_tree($id, $str, $sid, $adds.$k.' ',$str_group);
$number++;
}
}
return $this->ret;
}
/**
* 同上一方法类似,但允许多选
*/
function get_tree_multi($myid, $str, $sid = 0, $adds = '')
{
$number=1;
$child = $this->get_child($myid);
if(is_array($child))
{
$total = count($child);
foreach($child as $id=>$a)
{
$j=$k='';
if($number==$total)
{
$j .= $this->icon[2];
}
else
{
$j .= $this->icon[1];
$k = $adds ? $this->icon[0] : '';
}
$spacer = $adds ? $adds.$j : '';
$selected = $this->have($sid,$id) ? 'selected' : '';
//echo $sid.'=>'.$id.' : '.$selected.' . <br/>';
@extract($a);
eval("$nstr = "$str";");
$this->ret .= $nstr;
$this->get_tree_multi($id, $str, $sid, $adds.$k.' ');
$number++;
}
}
return $this->ret;
}
function have($list,$item){
return(strpos(',,'.$list.',',','.$item.','));
}
}
这个文件上传类可以上传gif",".jpg",".jar",".jad",".mid",".mp3",".mid",".bmp",".wav",".rm",".wmv文件格式哦,如果你还想支持其它的话可以设计$this->file_type();就OK了,。
<?php
class upload{
var $file_type;
var $file_size;
var $file_name;
var $exname;
var $datetime;
function up($post_name,$path){
$this->file_name=$_FILES[$post_name]["name"];
$this->exname=strtolower(substr($this->file_name,strrpos($this->file_name,".")));
$this->file_size=$_FILES[$post_name]["size"];
$this->file_type=array(".gif",".jpg",".jar",".jad",".mid",".mp3",".mid",".bmp",".wav",".rm",".wmv");
$this->datetime=date("YmdHis");
if(!in_array($this->exname,$this->file_type)){
print("<script language='javascript'>");
print("alert('格式不支持!');");
print("history.back();");
print("</script>");
break;
}elseif($this->file_size>"50000"){
print("<script language='javascript'>");
print("alert('图片大小不能超过50KB!');");
print("history.back();");
print("</script>");
break;
}else{
move_uploaded_file($_FILES[$post_name]["tmp_name"],$path.$this->datetime.$this->exname);
}
}
function fileName(){
$pic=$this->datetime.$this->exname;
return $pic;
}
}
?>
相关文章
使用PHP+JavaScript将HTML页面转换为图片的实例分享
这篇文章主要介绍了使用PHP+JavaScript将HTML元素转换为图片的实例分享,文后结果的截图只能体现出替换的字体,也不能说将静态页面转为图片可以加快加载,只是这种做法比较interesting XD需要的朋友可以参考下...2016-04-19- php如何实现抓取网页图片,相较于手动的粘贴复制,使用小程序要方便快捷多了,喜欢编程的人总会喜欢制作一些简单有用的小软件,最近就参考了网上一个php抓取图片代码,封装了一个php远程抓取图片的类,测试了一下,效果还不错分享...2015-10-30
- 这篇文章主要介绍了C#从数据库读取图片并保存的方法,帮助大家更好的理解和使用c#,感兴趣的朋友可以了解下...2021-01-16
- 今天小编在这里就来给各位Photoshop的这一款软件的使用者们来说说把古装美女图片转为细腻的工笔画效果的制作教程,各位想知道方法的使用者们,那么下面就快来跟着小编一...2016-09-14
- 这篇文章主要介绍了Python 图片转数组,二进制互转操作,具有很好的参考价值,希望对大家有所帮助。一起跟随小编过来看看吧...2021-03-09
- 下面小编就为大家带来一篇利用JS实现点击按钮后图片自动切换的简单方法。小编觉得挺不错的,现在就分享给大家,也给大家做个参考。一起跟随小编过来看看吧...2016-10-25
jquery左右滚动焦点图banner图片鼠标经过显示上下页按钮
jquery左右滚动焦点图banner图片鼠标经过显示上下页按钮...2013-10-13- 这篇文章主要为大家详细介绍了js实现上传图片及时预览的相关资料,具有一定的参考价值,感兴趣的朋友可以参考一下...2016-05-09
- Photoshop的这一款软件小编相信很多的人都已经是使用过了吧,那么今天小编在这里就给大家带来了用Photoshop软件制作枪战电影海报的教程,想知道制作步骤的玩家们,那么下面...2016-09-14
- 图片剪裁是常用的方法,那么如何通过4坐标剪裁图片,本文就详细的来介绍一下,感兴趣的小伙伴们可以参考一下...2021-06-04
- 共享一段使用PHP下载CSS文件中的图片的代码 复制代码 代码如下: <?php //note 设置PHP超时时间 set_time_limit(0); //note 取得样式文件内容 $styleFileContent = file_get_contents('images/style.css'); //not...2013-10-04
- 这篇文章主要给大家介绍了关于微信小程序如何获取图片宽度与高度的相关资料,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧...2021-03-10
- PHP代码如下:复制代码 代码如下:if (isset($_FILES["Filedata"]) || !is_uploaded_file($_FILES["Filedata"]["tmp_name"]) || $_FILES["Filedata"]["error"] != 0) { $upload_file = $_FILES['Filedata']; $fil...2013-10-04
- ps软件是现在很多人比较喜欢的,有着非常不错的使用效果,这次文章就给大家介绍下ps怎么制作图片阴影效果,还不知道制作方法的赶紧来看看。 ps图片阴影效果怎么做方法/...2017-07-06
C#中图片旋转和翻转(RotateFlipType)用法分析
这篇文章主要介绍了C#中图片旋转和翻转(RotateFlipType)用法,实例分析了C#图片旋转及翻转Image.RotateFlip方法属性的常用设置技巧,需要的朋友可以参考下...2020-06-25- 这篇文章主要介绍了OpenCV如何去除图片中的阴影的实现,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧...2021-03-29
- 这篇文章主要介绍了JavaScript 如何禁止用户保存图片,帮助大家完成需求,更好的理解和使用JavaScript,感兴趣的朋友可以了解下...2020-11-19
- 本文主要介绍用C#实现图片转换成字节流,字节流转换成图片,并根据图片路径返回图片的字节流,有需要的朋友可以参考下...2020-06-25
- 我们在php中上传文件就必须使用#_FILE变量了,这个自动全局变量 $_FILES 从 PHP 4.1.0 版本开始被支持。在这之前,从 4.0.0 版本开始,PHP 支持 $HTTP_POST_FILES 数组。这...2016-11-25
- 下面小编就为大家带来一篇JS实现图片的不间断连续滚动的简单实例。小编觉得挺不错的,现在就分享给大家,也给大家做个参考。一起跟随小编过来看看吧...2016-06-12