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 怎么下载没有后缀的图片
保存比较简单,使用 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爱好者们很对php开发的追求是永不止步的,今天偶然想起来了发下
php怎么实现相似图片的搜索呢?
其中的原理来解释下
1、缩小尺寸。将图片缩小到8×8的尺寸,总共64个像素。这一步的作用是去除图片的细节,只保留结构、明暗等基本信息,摒弃不同尺寸、比例带来的图片差异。
2、简化色彩。将缩小后的图片,转为64级灰度。也就是说,所有像素点总共只有64种颜色。
3、计算平均值。计算所有64个像素的灰度平均值。
4、比较像素的灰度。将每个像素的灰度,与平均值进行比较。大于或等于平均值,记为1;小于平均值,记为0。
5、计算哈希值。将上一步的比较结果,组合在一起,就构成了一个64位的整数,这就是这张图片的指纹。组合的次序并不重要,只要保证所有图片都采用同样次序就行了。得到指纹以后,就可以对比不同的图片,看看64位中有多少位是不一样的。
使用代码
hash($f);
}
return$isString?$result[0]:$result;
}
public function checkIsSimilarImg($imgHash,$otherImgHash){
if(file_exists($imgHash)&& file_exists($otherImgHash)){
$imgHash=$this->run($imgHash);
$otherImgHash=$this->run($otherImgHash);
}
if(strlen($imgHash)!== strlen($otherImgHash)) return false;
$count= 0;
$len= strlen($imgHash);
for($i=0;$i<$len;$i++){
if($imgHash{$i}!==$otherImgHash{$i}){
$count++;
}
}
return$count<=(5*$rate*$rate)? true: false;
}
public function hash($file){
if(!file_exists($file)){
return false;
}
$height= 8*$this->rate;
$width= 8*$this->rate;
$img= imagecreatetruecolor($width,$height);
list($w,$h)= getimagesize($file);
$source=$this->createImg($file);
imagecopyresampled($img,$source, 0, 0, 0, 0,$width,$height,$w,$h);
$value=$this->getHashValue($img);
imagedestroy($img);
return$value;
}
public function getHashValue($img){
$width= imagesx($img);
$height= imagesy($img);
$total= 0;
$array= array();
for($y=0;$y<$height;$y++){
for($x=0;$x<$width;$x++){
$gray=( imagecolorat($img,$x,$y)>> 8)& 0xFF;
if(!is_array($array[$y])){
$array[$y]= array();
}
$array[$y][$x]=$gray;
$total+=$gray;
}
}
$average= intval($total/(64*$this->rate*$this->rate));
$result='';
for($y=0;$y<$height;$y++){
for($x=0;$x<$width;$x++){
if($array[$y][$x]>=$average){
$result.='1';
}else{
$result.='0';
}
}
}
return$result;
}
public function createImg($file){
$ext=$this->getFileExt($file);
if($ext==='jpeg')$ext='jpg';
$img= null;
switch($ext){
case'png':$img= imagecreatefrompng($file);break;
case'jpg':$img= imagecreatefromjpeg($file);break;
case'gif':$img= imagecreatefromgif($file);
}
return$img;
}
public function getFileExt($file){
$infos= explode('.',$file);
$ext= strtolower($infos[count($infos)- 1]);
return$ext;
}
}
调用方式如下:
require_once"Imghash.class.php";
$instance= ImgHash::getInstance();
$result=$instance->checkIsSimilarImg('chenyin/IMG_3214.png','chenyin/IMG_3212.JPG');
如果$result值为true,则表明2个图片相似,否则不相似。
文章分享结束,php下载图片的三种方式和php三种注释方式的答案你都知道了吗?欢迎再次光临本站哦!