> 백엔드 개발 > PHP 튜토리얼 > 有没针对 fopen 打开的图片文件获取信息的函数解决方案

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

WBOY
풀어 주다: 2016-06-13 13:35:58
원래의
1729명이 탐색했습니다.

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

관련 라벨:
원천:php.cn
본 웹사이트의 성명
본 글의 내용은 네티즌들의 자발적인 기여로 작성되었으며, 저작권은 원저작자에게 있습니다. 본 사이트는 이에 상응하는 법적 책임을 지지 않습니다. 표절이나 침해가 의심되는 콘텐츠를 발견한 경우 admin@php.cn으로 문의하세요.
인기 튜토리얼
더>
최신 다운로드
더>
웹 효과
웹사이트 소스 코드
웹사이트 자료
프론트엔드 템플릿