Jim*_*Jim 2 vbscript asp-classic
我一直在努力寻找一种方法来获取驻留在我们服务器上的.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
Run Code Online (Sandbox Code Playgroud)
例如,我的文件的宽度字节为十六进制“ 00 00 01 80”(十进制384),十六进制字节为“ 00 00 01 32”(十进制306)
我得到了高度306,但是宽度返回“ 0011”(十进制17)。
我完全脚了!我也不必使用此例程。
谢谢,吉姆
这是我前一段时间看到的一则帖子,看起来可能可以简化一些操作。我尚未测试,所以请告诉我您的结果。
<%
dim iWidth, iheight
sub ImgDimension(img)
dim myImg, fs
Set fs= CreateObject("Scripting.FileSystemObject")
if not fs.fileExists(img) then exit sub
set myImg = loadpicture(img)
iWidth = round(myImg.width / 26.4583)
iheight = round(myImg.height / 26.4583)
set myImg = nothing
end sub
ImgDimension(Server.MapPath("server image file"))
%>
Run Code Online (Sandbox Code Playgroud)
看到这里的职位:http : //www.haneng.com/asp-forum/ASP---Get-Image-Size_12971.html
更新:看到此方法不适用于64位。这里是另一个替代方法的链接:http : //www.4guysfromrolla.com/webtech/050300-1.shtml