几天来我一直在尝试找到一种方法来获取驻留在我们服务器上的 .png 文件的图像宽度。我正在尝试读取文件的前 24 个字节并解析出字节 17-20 的宽度。我在网上找到了几种例程,但都没有成功。奇怪的是,我似乎得到了从十六进制解码到十进制的字节 21-24 的高度。我已经使用十六进制查看器验证了文件内容,并且文件正常。这是例程的主要部分:
Function ReadPNG(fichero)
Dim fso, ts, s, HW, nbytes
HW = Array("0", "0")
Set fso = CreateObject("Scripting.FileSystemObject")
Set ts = fso.OpenTextFile(Server.MapPath("\forums\attachments/" & fichero), 1)
s = Right(ts.Read(24), 8)
HW(0) = HexToDec(HexAt(s,3) & HexAt(s,4))
HW(1) = HexToDec(HexAt(s,7) & HexAt(s,8))
ts.Close
ReadPNG = HW
End Function
Function HexAt(s, n)
HexAt = Hex(AscAt(s, n))
End Function
Function HexToDec(ByVal HexVal)
Dim i, num, part
num = 0
For I = 1 to Len(HexVal)
part = Mid(StrReverse(UCase(HexVal)), I, 1)
If IsNumeric(part) Then
num = num + (CInt(part) * 16 ^ (I - 1) )
Else
num = num + ( (Asc(part) - 55) * 16^(I - 1) )
End If
Next
HexToDec = num
End Function
例如,我的文件的宽度字节有十六进制“00 00 01 80”(十进制 384)
以及高度字节中的十六进制“00 00 01 32”(十进制 306)
我得到的高度为 306,但宽度返回“0011”(十进制 17)。
我完全被难住了!我也不必使用这个例程。
谢谢,
吉姆