获得jpg文件的实际尺寸

本文提供了一段VBScript代码,用于读取并获取JPEG、GIF和PNG格式图片的实际尺寸。通过简单的函数调用,可以返回一个包含宽度和高度的自定义类型ImageSize。该代码适用于多种文件类型,并且在不涉及GIF文件压缩部分的情况下免除了对Unisys的专利费。
摘要由CSDN通过智能技术生成

获得jpg文件的实际尺寸 bask

把它编译成组件就可以用了,还支持png


'I have released this source code into the public domain.  You may use it
'with no strings attached.
'Just call GetImageSize with a string containing the filename, and
'it will return a user defined type 'ImageSize'  (see below)
'Return values of 0 indicate an error of some sort.  The error handling
'in this module is limited.  There is *NO* error handling on the test
'form.  This routine is limited to X or Y sizes of 32767 pixels, but that
'should not be a problem.

'Check back at http://www.qtm.net/~davidc
'I may add support for more file types.

'supported in this version:
'JPEG
'GIF
'PNG

'This routine does not require any royalty fees for Unisys as it
'does nothing with the compressed part of GIF files.  It simply reads
'4 bytes to determine image size.

Option Explicit
Public WImg As Long
Public HImg As Long
Public Type ImageSize
    Width As Long
    Height As Long
End Type

Public Sub GetImageSize(sFileName As String)
    On Error Resume Next        'you'll want to change this
    Dim iFN As Integer
    Dim bTemp(3) As Byte
    Dim lFlen As Long
    Dim lPos As Long
    Dim bHmsb As Byte
    Dim bHlsb As Byte
    Dim bWmsb As Byte
    Dim bWlsb As Byte
    Dim bBuf(7) As Byte
    Dim bDone As Byte
    Dim iCount As Integer

    lFlen = FileLen(sFileName)
    iFN = FreeFile
    Open sFileName For Binary As iFN
    Get #iFN, 1, bTemp()
       
    'PNG file
    If bTemp(0) = &H89 And bTemp(1) = &H50 And bTemp(2) = &H4E _
    And bTemp(3) = &H47 Then
        Get #iFN, 19, bWmsb
        Get #iFN, 20, bWlsb
        Get #iFN, 23, bHmsb
        Get #iFN, 24, bHlsb
        'GetImageSize.Width = CombineBytes(bWlsb, bWmsb)
        'GetImageSize.Height = CombineBytes(bHlsb, bHmsb)
        WImg = CombineBytes(bWlsb, bWmsb)
        HImg = CombineBytes(bHlsb, bHmsb)
    End If
   
    'GIF file
    If bTemp(0) = &H47 And bTemp(1) = &H49 And bTemp(2) = &H46 _
    And bTemp(3) = &H38 Then
        Get #iFN, 7, bWlsb
        Get #iFN, 8, bWmsb
        Get #iFN, 9, bHlsb
        Get #iFN, 10, bHmsb
        'GetImageSize.Width = CombineBytes(bWlsb, bWmsb)
        'GetImageSize.Height = CombineBytes(bHlsb, bHmsb)
        WImg = CombineBytes(bWlsb, bWmsb)
        HImg = CombineBytes(bHlsb, bHmsb)
    End If
   
   
    'JPEG file
    If bTemp(0) = &HFF And bTemp(1) = &HD8 And bTemp(2) = &HFF Then
    Debug.Print "JPEG"
        lPos = 3
        Do
            Do
                Get #iFN, lPos, bBuf(1)
                Get #iFN, lPos + 1, bBuf(2)
                lPos = lPos + 1
            Loop Until (bBuf(1) = &HFF And bBuf(2) <> &HFF) Or lPos > lFlen
       
            For iCount = 0 To 7
                Get #iFN, lPos + iCount, bBuf(iCount)
            Next iCount
            If bBuf(0) >= &HC0 And bBuf(0) <= &HC3 Then
                bHmsb = bBuf(4)
                bHlsb = bBuf(5)
                bWmsb = bBuf(6)
                bWlsb = bBuf(7)
                bDone = 1
            Else
                lPos = lPos + (CombineBytes(bBuf(2), bBuf(1))) + 1
            End If
        Loop While lPos < lFlen And bDone = 0
        'GetImageSize.Width = CombineBytes(bWlsb, bWmsb)
        'GetImageSize.Height = CombineBytes(bHlsb, bHmsb)
        WImg = CombineBytes(bWlsb, bWmsb)
        HImg = CombineBytes(bHlsb, bHmsb)
    End If
    Close iFN
   
End Sub
Private Function CombineBytes(lsb As Byte, msb As Byte) As Long
    CombineBytes = CLng(lsb + (msb * 256))
End Function   

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值