php下载图片到本地 php将网页保存为图片
各位老铁们好,相信很多人对php下载图片到本地都不是特别的了解,因此呢,今天就来为大家分享下关于php下载图片到本地以及php将网页保存为图片的问题知识,还望可以帮助大家,解决大家的一些困惑,下面一起来看看吧!
php如何实现图片下载
我想告诉你,除了显示网址,然后“另存为”或者用迅雷之类的下载外,php真的还无法下载到本地,好像是因为权限什么的。
我琢磨了好久都不可能下载到本地,除非你的服务器是建立在本地的。
我自己写了一个函数,用来拷贝图片的,用copy()不行。
注意,目的为网址,你可以看看,其他文件格式同理。
//----------------------拷贝图片(包括网络图片)到指定网址------------------
//-------适用于图片类型包括:jpeg、gif、png-----------
function down_image($url1,$url2){//---$url1为源网址,$url2为目标网址---
$url1_info=pathinfo($url1);
$url2_info=pathinfo($url2);
$msg="拷贝成功!";
if($url1_info[extension]==$url2_info[extension]){
switch($url1_info[extension]){
case"jpg":
$img=imagecreatefromjpeg($url1);
imagejpeg($img,$url2);
break;
case"gif":
$img=imagecreatefromgif($url1);
imagegif($img,$url2);
break;
case"png":
$img=imagecreatefrompng($url1);
imagepng($img,$url2);
break;
}
}else{
$msg="文件类型不正确,拷贝失败";
}
return$msg;
}
PHP图片生成
给你一个php图像处理类,完全能实现你的功能,你自己研究一下吧
<?php
class image
{
var$w_pct= 50;//透明度
var$w_quality= 80;//质量
var$w_minwidth= 300;//最小宽
var$w_minheight= 300;//最小高
var$thumb_enable;//是否生成缩略图
var$watermark_enable;//是否生水印
var$interlace= 0;//图像是否为隔行扫描的
var$fontfile;//字体文件
var$w_img;//默认水印图
function __construct()
{
global$SITE_CONFING;
$this->thumb_enable=$SITE_CONFING['thumb_enable'];
$this->watermark_enable=$SITE_CONFING['watermark_enable'];
$this->set($SITE_CONFING['watermark_minwidth'],$SITE_CONFING['watermark_minheight'],$SITE_CONFING['watermark_quality'],$SITE_CONFING['watermark_pct'],$SITE_CONFING['watermark_fontfile'],$SITE_CONFING['watermark_img']);
}
function image()
{
$this->__construct();
}
function set($w_minwidth= 300,$w_minheight= 300,$w_quality= 80,$w_pct= 100,$fontfile,$w_img)
{
$this->w_minwidth=$w_minwidth;
$this->w_minheight=$w_minheight;
$this->w_quality=$w_quality;
$this->w_pct=$w_pct;
$this->fontfile=$fontfile;
$this->w_img=$w_img;
}
function info($img)
{
$imageinfo= getimagesize($img);//返回图像信息数组 0=>宽的像素 1=>高的像素 2=>是图像类型的标记 3=>是文本字符串,内容为“height="yyy" width="xxx"”,
if($imageinfo=== false) return false;
$imagetype= strtolower(substr(image_type_to_extension($imageinfo[2]),1));//获取图像文件类型$imageinfo[2]是图像类型的标记
$imagesize= filesize($img);//图像大小
$info= array(
'width'=>$imageinfo[0],
'height'=>$imageinfo[1],
'type'=>$imagetype,
'size'=>$imagesize,
'mime'=>$imageinfo['mime']
);
return$info;
}
function thumb($image,$filename='',$maxwidth= 200,$maxheight= 50,$suffix='_thumb',$autocut= 0)
{
if(!$this->thumb_enable||!$this->check($image)) return false;
$info=$this->info($image);//获取图片信息
if($info=== false) return false;
$srcwidth=$info['width'];//源图宽
$srcheight=$info['height'];//源图高
$pathinfo= pathinfo($image);
$type=$pathinfo['extension'];//取得扩展名
if(!$type)$type=$info['type'];//如果没有取到,用$info['type']
$type= strtolower($type);
unset($info);
$scale= min($maxwidth/$srcwidth,$maxheight/$srcheight);//获取缩略比例
//获取按照源图的比列
$createwidth=$width=(int)($srcwidth*$scale);//取得缩略宽
$createheight=$height=(int)($srcheight*$scale);//取得缩略高
$psrc_x=$psrc_y= 0;
if($autocut)//按照缩略图的比例来获取
{
if($maxwidth/$maxheight<$srcwidth/$srcheight&&$maxheight>=$height)//如果缩略图按比列比源图窄的话
{
$width=$maxheight/$height*$width;//宽按照相应比例做处理
$height=$maxheight;//高不变
}
elseif($maxwidth/$maxheight>$srcwidth/$srcheight&&$maxwidth>=$width)//如果缩略图按比列比源图宽的话
{
$height=$maxwidth/$width*$height;
$width=$maxwidth;
}
$createwidth=$maxwidth;
$createheight=$maxheight;
}
$createfun='imagecreatefrom'.($type=='jpg'?'jpeg':$type);//找到不同的图像处理函数
$srcimg=$createfun($image);//新建图像
if($type!='gif'&& function_exists('imagecreatetruecolor'))
$thumbimg= imagecreatetruecolor($createwidth,$createheight);//新建一个真彩色图像
else
$thumbimg= imagecreate($width,$height);//新建一个基于调色板的图像
if(function_exists('imagecopyresampled'))//重采样拷贝部分图像并调整大小,真彩
//imagecopyresampled(新图,源图,新图左上角x距离,新图左上角y距离,源图左上角x距离,源图左上角y距离,新图宽,新图高,源图宽,源图高)
imagecopyresampled($thumbimg,$srcimg, 0, 0,$psrc_x,$psrc_y,$width,$height,$srcwidth,$srcheight);
else//拷贝部分图像并调整大小,调色板
imagecopyresized($thumbimg,$srcimg, 0, 0,$psrc_x,$psrc_y,$width,$height,$srcwidth,$srcheight);
if($type=='gif'||$type=='png')
{
//imagecolorallocate为一幅图像分配颜色
$background_color= imagecolorallocate($thumbimg, 0, 255, 0);//给基于调色板的图像填充背景色,指派一个绿色
// imagecolortransparent将某个颜色定义为透明色
imagecolortransparent($thumbimg,$background_color);//设置为透明色,若注释掉该行则输出绿色的图
}
// imageinterlace激活或禁止隔行扫描
if($type=='jpg'||$type=='jpeg') imageinterlace($thumbimg,$this->interlace);
$imagefun='image'.($type=='jpg'?'jpeg':$type);
//imagejpeg imagegif imagepng
if(empty($filename))$filename= substr($image, 0, strrpos($image,'.')).$suffix.'.'.$type;//获取文件名
//aaa.gif aaa_thumb.gif
$imagefun($thumbimg,$filename);//新建图像
imagedestroy($thumbimg);//销毁缩略图
imagedestroy($srcimg);//销毁源图
return$filename;
}
//watermark(源图,生成文件,生成位置,水印文件,水印文本,背景色)
function watermark($source,$target='',$w_pos= 0,$w_img='',$w_text='',$w_font= 12,$w_color='#cccccc')
{
if(!$this->watermark_enable||!$this->check($source)) return false;
if(!$target)$target=$source;
if($w_img==''&&$w_text=='')
$w_img=$this->w_img;
$source_info= getimagesize($source);
$source_w=$source_info[0];//获取宽
$source_h=$source_info[1];//获取高
if($source_w<$this->w_minwidth||$source_h<$this->w_minheight) return false;//宽和高达不到要求直接返回
switch($source_info[2])//新建图片
{
case 1:
$source_img= imagecreatefromgif($source);
break;
case 2:
$source_img= imagecreatefromjpeg($source);
break;
case 3:
$source_img= imagecreatefrompng($source);
break;
default:
return false;
}
if(!empty($w_img)&& file_exists($w_img))//水印文件
{
$ifwaterimage= 1;//是否水印图
$water_info= getimagesize($w_img);//水印信息
$width=$water_info[0];
$height=$water_info[1];
switch($water_info[2])
{
case 1:
$water_img= imagecreatefromgif($w_img);
break;
case 2:
$water_img= imagecreatefromjpeg($w_img);
break;
case 3:
$water_img= imagecreatefrompng($w_img);
break;
default:
return;
}
}
else
{
$ifwaterimage= 0;
//imagettfbbox本函数计算并返回一个包围着 TrueType文本范围的虚拟方框的像素大小。
//imagettfbbox(字体大小,字体角度,字体文件,文件)
$temp= imagettfbbox(ceil($w_font*1.2), 0,$this->fontfile,$w_text);//取得使用 truetype字体的文本的范围
$width=$temp[4]-$temp[6];//右上角 X位置-左上角 X位置
$height=$temp[3]-$temp[5];//右下角 Y位置-右上角 Y位置
unset($temp);
}
switch($w_pos)
{
case 0://随机位置
$wx= rand(0,($source_w-$width));
$wy= rand(0,($source_h-$height));
break;
case 1://左上角
$wx= 5;
$wy= 5;
break;
case 2://上面中间位置
$wx=($source_w-$width)/ 2;
$wy= 0;
break;
case 3://右上角
$wx=$source_w-$width;
$wy= 0;
break;
case 4://左面中间位置
$wx= 0;
$wy=($source_h-$height)/ 2;
break;
case 5://中间位置
$wx=($source_w-$width)/ 2;
$wy=($source_h-$height)/ 2;
break;
case 6://底部中间位置
$wx=($source_w-$width)/ 2;
$wy=$source_h-$height;
break;
case 7://左下角
$wx= 0;
$wy=$source_h-$height;
break;
case 8://右面中间位置
$wx=$source_w-$width;
$wy=($source_h-$height)/2;
break;
case 9://右下角
$wx=$source_w-$width;
$wy=$source_h-$height;
break;
default://随机
$wx= rand(0,($source_w-$width));
$wy= rand(0,($source_h-$height));
break;
}
if($ifwaterimage)//如果有水印图
{
//imagecopymerge拷贝并合并图像的一部分
//参数(源图,水印图,拷贝到源图x位置,拷贝到源图y位置,从水印图x位置,从水印图y位置,高,宽,透明度)
imagecopymerge($source_img,$water_img,$wx,$wy, 0, 0,$width,$height,$this->w_pct);
}
else
{
if(!empty($w_color)&&(strlen($w_color)==7))
{
$r= hexdec(substr($w_color,1,2));//获取红色
$g= hexdec(substr($w_color,3,2));//获取绿色
$b= hexdec(substr($w_color,5));//获取蓝色
}
else
{
return;
}
//imagecolorallocate基于调色板的图像填充背景色
//imagestring水平地画一行字符串
//imagestring(源图,字体大小,位置X,位置Y,文字,颜色)
//参数($image, float$size, float$angle, int$x, int$y, int$color, string$fontfile, string$text)
imagettftext($source_img,$w_font,0,$wx,$wy,imagecolorallocate($source_img,$r,$g,$b),$this->fontfile,$w_text);
//imagestring($source_img,$w_font,$wx,$wy,$w_text,imagecolorallocate($source_img,$r,$g,$b));
}
//输出到文件或者浏览器
switch($source_info[2])
{
case 1:
imagegif($source_img,$target);//以 GIF格式将图像输出到浏览器或文件
break;
case 2:
imagejpeg($source_img,$target,$this->w_quality);//以 JPEG格式将图像输出到浏览器或文件
break;
case 3:
imagepng($source_img,$target);//以 PNG格式将图像输出到浏览器或文件
break;
default:
return;
}
if(isset($water_info))
{
unset($water_info);//销毁
}
if(isset($water_img))
{
imagedestroy($water_img);//销毁
}
unset($source_info);
imagedestroy($source_img);
return true;
}
//gd库必须存在,后缀为jpg|jpeg|gif|png,文件存在,imagecreatefromjpeg或者imagecreatefromgif存在
function check($image)
{
return extension_loaded('gd')&&
preg_match("/\.(jpg|jpeg|gif|png)/i",$image,$m)&&
file_exists($image)&&
function_exists('imagecreatefrom'.($m[1]=='jpg'?'jpeg':$m[1]));
//imagecreatefromjpeg
//imagecreatefromgif
//imagecreatefrompng
}
}
/**
缩略图
1.新建一个图像资源通过 imagecreatefromgif imagecreatefromjpeg imagecreatefrompng
2.imagecopyresampled拷贝图像,并调整大小
水印:图片水印,文字水印
1.创建图像
2.加水印
图片水印:imagecopymerge把2张图合并在一起
文字水印:imagettftext向图像写入文字
*/
?>
PHP 怎么下载没有后缀的图片
保存比较简单,使用 file_get_contents和 file_put_contents,比较麻烦(应该是没想到)的是如何获取图片类型,这个可以通过响应头来判断,响应头有一个属性 Content-Type,它就是 mime,做好 mime和文件扩展名的映射,就可以知道文件的扩展名了。下面这个函数可以做个参考:
/*
*保存图片
*@param$url要保存的链接
*@return保存的字节数,失败则返回false
*/
functionsaveFile($url)
{
//mime和扩展名的映射
$mimes=array(
'image/bmp'=>'bmp',
'image/gif'=>'gif',
'image/jpeg'=>'jpg',
'image/png'=>'png',
);
//获取响应头
if(($headers=get_headers($url,1))!==false)
{
//获取响应的类型
$type=$headers['Content-Type'];
//如果符合我们要的类型
if(isset($mimes[$type]))
{
$fileName=uniqid();
$ext=$mimes[$type];
$file="temp/$fileName.$ext";
//获取数据并保存
$contents=file_get_contents($url);
returnfile_put_contents($file,$contents);
}
}
returnfalse;
}
文章分享结束,php下载图片到本地和php将网页保存为图片的答案你都知道了吗?欢迎再次光临本站哦!