<p>利用FSO取得图像文件信息</p>
<p>':::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::<br />
'::: BMP, GIF, JPG and PNG :::<br />
':::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::<br />
':::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::<br />
'::: :::<br />
'::: This function gets a specified number of bytes from any :::<br />
'::: file, starting at the offset (base 1) :::<br />
'::: :::<br />
'::: Passed: :::<br />
'::: flnm => Filespec of file to read :::<br />
'::: offset => Offset at which to start reading :::<br />
'::: bytes => How many bytes to read :::<br />
'::: :::<br />
':::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::<br />
function GetBytes(flnm, offset, bytes)<br />
Dim objFSO<br />
Dim objFTemp<br />
Dim objTextStream<br />
Dim lngSize<br />
on error resume next<br />
Set objFSO = CreateObject("Scripting.FileSystemObject")</p>
<p>' First, we get the filesize<br />
Set objFTemp = objFSO.GetFile(flnm)<br />
lngSize = objFTemp.Size<br />
set objFTemp = nothing<br />
fsoForReading = 1<br />
Set objTextStream = objFSO.OpenTextFile(flnm, fsoForReading)<br />
if offset > 0 then<br />
strBuff = objTextStream.Read(offset - 1)<br />
end if<br />
if bytes = -1 then ' Get All!<br />
GetBytes = objTextStream.Read(lngSize) 'ReadAll<br />
else<br />
GetBytes = objTextStream.Read(bytes)<br />
end if<br />
objTextStream.Close<br />
set objTextStream = nothing<br />
set objFSO = nothing<br />
end function</p>
<p>':::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::<br />
'::: :::<br />
'::: Functions to convert two bytes to a numeric value (long) :::<br />
'::: (both little-endian and big-endian) :::<br />
'::: :::<br />
':::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::<br />
function lngConvert(strTemp)<br />
lngConvert = clng(asc(left(strTemp, 1)) + ((asc(right(strTemp, 1)) * 256)))<br />
end function<br />
function lngConvert2(strTemp)<br />
lngConvert2 = clng(asc(right(strTemp, 1)) + ((asc(left(strTemp, 1)) * 256)))<br />
end function</p>
<p>':::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::<br />
'::: :::<br />
'::: This function does most of the real work. It will attempt :::<br />
'::: to read any file, regardless of the extension, and will :::<br />
'::: identify if it is a graphical image. :::<br />
'::: :::<br />
'::: Passed: :::<br />
'::: flnm => Filespec of file to read :::<br />
'::: width => width of image :::<br />
'::: height => height of image :::<br />
'::: depth => color depth (in number of colors) :::<br />
'::: strImageType=> type of image (e.g. GIF, BMP, etc.) :::<br />
'::: :::<br />
':::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::<br />
function gfxSpex(flnm, width, height, depth, strImageType)<br />
dim strPNG<br />
dim strGIF<br />
dim strBMP<br />
dim strType<br />
strType = ""<br />
strImageType = "(unknown)"<br />
gfxSpex = False<br />
strPNG = chr(137) & chr(80) & chr(78)<br />
strGIF = "GIF"<br />
strBMP = chr(66) & chr(77)<br />
strType = GetBytes(flnm, 0, 3)<br />
if strType = strGIF then ' is GIF<br />
strImageType = "GIF"<br />
Width = lngConvert(GetBytes(flnm, 7, 2))<br />
Height = lngConvert(GetBytes(flnm, 9, 2))<br />
Depth = 2 ^ ((asc(GetBytes(flnm, 11, 1)) and 7) + 1)<br />
gfxSpex = True<br />
elseif left(strType, 2) = strBMP then ' is BMP<br />
strImageType = "BMP"<br />
Width = lngConvert(GetBytes(flnm, 19, 2))<br />
Height = lngConvert(GetBytes(flnm, 23, 2))<br />
Depth = 2 ^ (asc(GetBytes(flnm, 29, 1)))<br />
gfxSpex = True<br />
elseif strType = strPNG then ' Is PNG<br />
strImageType = "PNG"<br />
Width = lngConvert2(GetBytes(flnm, 19, 2))<br />
Height = lngConvert2(GetBytes(flnm, 23, 2))<br />
Depth = getBytes(flnm, 25, 2)<br />
select case asc(right(Depth,1))<br />
case 0<br />
Depth = 2 ^ (asc(left(Depth, 1)))<br />
gfxSpex = True<br />
case 2<br />
Depth = 2 ^ (asc(left(Depth, 1)) * 3)<br />
gfxSpex = True<br />
case 3<br />
Depth = 2 ^ (asc(left(Depth, 1))) '8<br />
gfxSpex = True<br />
case 4<br />
Depth = 2 ^ (asc(left(Depth, 1)) * 2)<br />
gfxSpex = True<br />
case 6<br />
Depth = 2 ^ (asc(left(Depth, 1)) * 4)<br />
gfxSpex = True<br />
case else<br />
Depth = -1<br />
end select</p>
<p>else<br />
strBuff = GetBytes(flnm, 0, -1) ' Get all bytes from file<br />
lngSize = len(strBuff)<br />
flgFound = 0<br />
strTarget = chr(255) & chr(216) & chr(255)<br />
flgFound = instr(strBuff, strTarget)<br />
if flgFound = 0 then<br />
exit function<br />
end if<br />
strImageType = "JPG"<br />
lngPos = flgFound + 2<br />
ExitLoop = false<br />
do while ExitLoop = False and</p>