Heim  >  Artikel  >  Backend-Entwicklung  >  有没针对 fopen 打开的图片文件获取信息的函数解决方案

有没针对 fopen 打开的图片文件获取信息的函数解决方案

WBOY
WBOYOriginal
2016-06-13 10:17:041048Durchsuche

有没针对 fopen 打开的图片文件获取信息的函数
getimagesize() 的传参是图片文件路劲
如果我只知道 tmpfile() 或 fopen() 返回的文件句柄怎么办呢
难道非要临时保存一下到硬盘上?



------解决方案--------------------
最好保存一下,如果不使用GD函数的话,那就复杂了,要自己解析图片二进制数据来得到他的原数据了。
比如这个解析png图片的。

/************************* png ****************************/

function _parsepng($file) 

//Extract info from a PNG file 
$f=fopen($file,'rb'); 
if(!$f) 
$this->Error('Can\'t open image file: '.$file); 
//Check signature 
if(fread($f,8)!=chr(137).'PNG'.chr(13).chr(10).chr(26).chr(10)) 
$this->Error('Not a PNG file: '.$file); 
//Read header chunk 
fread($f,4); 
if(fread($f,4)!='IHDR') 
$this->Error('Incorrect PNG file: '.$file); 
$w=$this->_freadint($f); 
$h=$this->_freadint($f); 
$bpc=ord(fread($f,1)); 
if($bpc>8) 
$this->Error('16-bit depth not supported: '.$file); 
$ct=ord(fread($f,1)); 
if($ct==0) 
$colspace='DeviceGray'; 
elseif($ct==2) 
$colspace='DeviceRGB'; 
elseif($ct==3) 
$colspace='Indexed'; 
else 
$this->Error('Alpha channel not supported: '.$file); 
if(ord(fread($f,1))!=0) 
$this->Error('Unknown compression method: '.$file); 
if(ord(fread($f,1))!=0) 
$this->Error('Unknown filter method: '.$file); 
if(ord(fread($f,1))!=0) 
$this->Error('Interlacing not supported: '.$file); 
fread($f,4); 
$parms='/DecodeParms >'; 
//Scan chunks looking for palette, transparency and image data 
$pal=''; 
$trns=''; 
$data=''; 
do 

$n=$this->_freadint($f); 
$type=fread($f,4); 
if($type=='PLTE') 

//Read palette 
$pal=fread($f,$n); 
fread($f,4); 

elseif($type=='tRNS') 

//Read transparency info 
$t=fread($f,$n); 
if($ct==0) 
$trns=array(ord(substr($t,1,1))); 
elseif($ct==2) 
$trns=array(ord(substr($t,1,1)),ord(substr($t,3,1)),ord(substr($t,5,1))); 
else 

$pos=strpos($t,chr(0)); 
if($pos!==false) 
$trns=array($pos); 

fread($f,4); 

elseif($type=='IDAT') 

//Read image data block 
$data.=fread($f,$n); 
fread($f,4); 

elseif($type=='IEND') 
break; 
else 
fread($f,$n+4); 

while($n); 
if($colspace=='Indexed' && empty($pal)) 
$this->Error('Missing palette in '.$file); 
fclose($f); 
return array('w'=>$w,'h'=>$h,'cs'=>$colspace,'bpc'=>$bpc,'f'=>'FlateDecode','parms'=>$parms,'pal'=>$pal,'trns'=>$trns,'data'=>$data); 
}

Stellungnahme:
Der Inhalt dieses Artikels wird freiwillig von Internetnutzern beigesteuert und das Urheberrecht liegt beim ursprünglichen Autor. Diese Website übernimmt keine entsprechende rechtliche Verantwortung. Wenn Sie Inhalte finden, bei denen der Verdacht eines Plagiats oder einer Rechtsverletzung besteht, wenden Sie sich bitte an admin@php.cn