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

WBOY
Release: 2016-06-13 13:35:58
Original
1701 people have browsed it

有没针对 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); 
}

Related labels:
source:php.cn
Statement of this Website
The content of this article is voluntarily contributed by netizens, and the copyright belongs to the original author. This site does not assume corresponding legal responsibility. If you find any content suspected of plagiarism or infringement, please contact admin@php.cn
Popular Tutorials
More>
Latest Downloads
More>
Web Effects
Website Source Code
Website Materials
Front End Template
About us Disclaimer Sitemap
php.cn:Public welfare online PHP training,Help PHP learners grow quickly!