fopen で開かれた画像ファイルから情報を取得するための機能的な解決策はありますか?

WBOY
リリース: 2016-06-13 13:35:58
オリジナル
1653 人が閲覧しました

fopen によって開かれた画像ファイルの情報を取得する関数はありますか?
getimagesize() によって渡されるパラメータは画像ファイルのパスです
tmpfile() または fopen() によって返されたファイル ハンドルしかわかっていない場合はどうなりますか?
一時的にハードドライブに保存する必要がありますか?



-----解決策---------
GD 関数を使用しない場合は、画像バイナリ データを自分で解析して元のデータを取得する必要があります。
たとえば、これは PNG 画像を解析します。

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

function _parsepng($file)
{
//PNG ファイルから情報を抽出
$f=fopen($ file,'rb');
if(!$f)
$this->Error('画像ファイルを開けません: '.$file)
// 署名を確認します
if(fread($f,8)!=chr(137).'PNG'.chr(13).chr(10).chr(26).chr(10))
$this->Error( 'PNG ファイルではありません: '.$file);
//ヘッダー チャンクを読み取ります
fread($f,4)
if(fread($f,4)!='IHDR')
$this->Error('間違った PNG ファイル: '.$file);
$w=$this->_freadint($f); $f);
$bpc=ord(fread($f,1));
if($bpc>8)
$this->Error('16 ビット深度はサポートされていません: ' .$file);
$ct=ord(fread($f,1));
if($ct==0)
$colspace='DeviceGray'; ==2)
$colspace='DeviceRGB';
elseif($ct==3)
$colspace='Indexed';
else
$this->Error('アルファ チャネルはサポートされていません: '.$file);
if(ord(fread($f,1))!=0)
$this->Error('不明な圧縮方法: '.$file) ;
if(ord(fread($f,1))!=0)
$this->Error('不明なフィルター メソッド: '.$file);
if(ord(fread( $f,1))!=0)
$this->Error('インターレースはサポートされていません: '.$file);
fread($f,4);
$parms='/ DecodeParms <>'; // パレット、透明度、画像データを検索するチャンクをスキャンします
$pal=''
$data=''; $n=$this->freadint($f);
$type=fread($f,4)
if($type=='PLTE')
{
//パレットを読み取ります
$pal=fread($f,$n);
fread($f,4)
}
elseif($type=='tRNS')
{
//透明度情報を読み取ります
$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')
{
//画像データブロックを読み込みます
$data.=fread($f,$n);
fread($f,4);
elseif($type=='IEND; ')
ブレーク;
else
fread($f,$n+4)
while($n); && empty($pal))
$this->Error('.$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 までご連絡ください。
人気のチュートリアル
詳細>
最新のダウンロード
詳細>
ウェブエフェクト
公式サイト
サイト素材
フロントエンドテンプレート
私たちについて 免責事項 Sitemap
PHP中国語ウェブサイト:福祉オンライン PHP トレーニング,PHP 学習者の迅速な成長を支援します!