WEB开发网
开发学院WEB开发ASP 获得jpg文件的实际尺寸 阅读

获得jpg文件的实际尺寸

 2001-09-02 10:20:21 来源:WEB开发网   
核心提示:bask 把它编译成组件就可以用了,还支持png'I have released this source code into the public domain.You may use it'with no strings attached.'Just call GetImageSize wit
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

Tags:获得 jpg 文件

编辑录入:爽爽 [复制链接] [打 印]
赞助商链接