确定 blob 是否是图像而不加载整个字段?

Nic*_*ina 4 .net database binary-data

有没有办法从数据库中的 BLOB 类型字段中仅读取几个字节(对于这个问题,数据库品牌无关紧要)并确定二进制内容是否是图像(假设它是以下之一:JPG、 GIF、PNG)?我有一个将文件存储在数据库中的网络应用程序,如果它是图像,我想显示缩略图,否则我想显示图标...但我没有在其他任何地方存储该 blob 的任何 MIMETYPE 信息(这不是我的设计)......并且因为它是一个网络应用程序,所以图像的加载需要在写出 <img> 标签的单独调用(getImage.ashx)中进行......并且当我写出时标签我不想将整个 blob 读入库,确定它是否是图像,调整它的大小...等等...我希望能够查看前几个字节并知道我是否需要写标签。我不太了解图像文件结构/格式,无法知道前几个字节中是否有某种标准标头,我可以通过读入来判断它是 JPG、GIF 还是 PNG。

合理?

如果您想具体帮助我(而不是笼统地回答是否可以完成),那么我正在使用 .NET C# 和 SQL 2005

谢谢!

Ore*_*ner 6

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/