3

データベースの BLOB タイプ フィールドから数バイトだけを読み取り (この質問では、DB ブランドは関係ありません)、バイナリ コンテンツが画像であるかどうかを判断する方法はありますか (JPG、JPG、 GIF、PNG)? データベースにファイルを保存する webapp があり、それが画像の場合はサムネイルを表示したい、そうでない場合はアイコンを表示したい... しかし、BLOB の MIMETYPE 情報が他の場所に保存されていません(それは私のデザインではありません)...そしてそれはwebappであるため、画像のロードは <img> タグの書き出しとは別の呼び出し(getImage.ashx)で発生する必要があります..そして私が書き出しているときブロブ全体をライブラリに読み込んだり、画像かどうかを判断したり、サイズを変更したりしたくないタグ...などなど...私は' 最初の数バイトを見て、タグを書く必要があるかどうかを知りたいです。画像ファイルの構造/形式を十分に理解していないため、最初の数バイトに、JPG、GIF、または PNG であるかどうかを判断するために読み込むことができる何らかの標準ヘッダーがあるかどうかを知ることができません。

わかる?

具体的に私を助けたいのなら (それができるかどうか一般的に答えるのではなく)、私は .NET C# と SQL 2005 を使用しています。

ありがとう!

4

3 に答える 3

4

PNG は次で始まります: 89 50 4E 47 0D 0A 1A 0A ; http://www.libpng.org/pub/png/spec/1.2/PNG-Structure.htmlを参照

GIF は 47 49 46 38 37 61 (GIF87a) または 47 49 46 38 39 61 (GIF89a) で始まります。http://www.fileformat.info/format/gif/egff.htmを参照してください。

JPEG は FF D8 FF E0 xx xx 4A 46 49 46 00 で始まります (編集: ヘッダーの欠落部分を追加します。xx xx はヘッダーの長さ (バイト単位)) ; http://www.obrador.com/essentialjpeg/headerinfo.htmを参照してください。

参考:http ://wangrui.wordpress.com/2007/06/19/file-signatures-table/

于 2009-08-11T15:33:50.580 に答える
1
  • JPEGで始まるファイルFF D8 FF
  • GIFGIF89a( 47 49 46 38 39)で始まるファイル
于 2009-08-11T15:31:12.237 に答える
1

これは古い学校に戻っています (データ アクセスの戦術のため)。とにかく、DataReader を使用してフィールドを取得し、結果をストリーミングしてから、最初の 8 バイトを見て、処理している画像の種類を確認できます。

streamreader を datareader にアタッチする方法の概要については、この記事を参照してください。

そうは言っても、画像が巨大でない限り、おそらくすべてのバイトを取得するだけです.

もう 1 つの戦術は、SQL で最初のヘッダー バイトに基づいて、フィールドを検査し、型を公開するビューを作成することです。ちょっと醜いですが、ピンチで動作します。

于 2009-08-11T15:36:44.520 に答える