• 软件测试技术
  • 软件测试博客
  • 软件测试视频
  • 开源软件测试技术
  • 软件测试论坛
  • 软件测试沙龙
  • 软件测试资料下载
  • 软件测试杂志
  • 软件测试人才招聘
    暂时没有公告

字号: 小 中 大 | 推荐给好友 上一篇 | 下一篇

如何获得jpg文件的实际尺寸呢?

发布: 2007-6-30 18:56 | 作者: admin | 来源: | 查看: 26次 | 进入软件测试论坛讨论

领测软件测试网 网上找的一段代码,把它编译成组件就可以用了,还支持png<br>
<br>
<br>
@#I have released this source code into the public domain.&nbsp;&nbsp;You may use it<br>
@#with no strings attached.<br>
@#Just call GetImageSize with a string containing the filename, and<br>
@#it will return a user defined type @#ImageSize@#&nbsp;&nbsp;(see below)<br>
@#Return values of 0 indicate an error of some sort.&nbsp;&nbsp;The error handling<br>
@#in this module is limited.&nbsp;&nbsp;There is *NO* error handling on the test<br>
@#form.&nbsp;&nbsp;This routine is limited to X or Y sizes of 32767 pixels, but that<br>
@#should not be a problem.<br>
<br>
@#Check back at http://www.qtm.net/~davidc<br>
@#I may add support for more file types.<br>
<br>
@#supported in this version:<br>
@#JPEG<br>
@#GIF<br>
@#PNG<br>
<br>
@#This routine does not require any royalty fees for Unisys as it<br>
@#does nothing with the compressed part of GIF files.&nbsp;&nbsp;It simply reads<br>
@#4 bytes to determine image size.<br>
<br>
Option Explicit<br>
Public WImg As Long<br>
Public HImg As Long<br>
Public Type ImageSize<br>
&nbsp;&nbsp;&nbsp;&nbsp;Width As Long<br>
&nbsp;&nbsp;&nbsp;&nbsp;Height As Long<br>
End Type<br>
<br>
Public Sub GetImageSize(sFileName As String)<br>
&nbsp;&nbsp;&nbsp;&nbsp;On Error Resume Next&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;@#you@#ll want to change this<br>
&nbsp;&nbsp;&nbsp;&nbsp;Dim iFN As Integer<br>
&nbsp;&nbsp;&nbsp;&nbsp;Dim bTemp(3) As Byte<br>
&nbsp;&nbsp;&nbsp;&nbsp;Dim lFlen As Long<br>
&nbsp;&nbsp;&nbsp;&nbsp;Dim lPos As Long<br>
&nbsp;&nbsp;&nbsp;&nbsp;Dim bHmsb As Byte<br>
&nbsp;&nbsp;&nbsp;&nbsp;Dim bHlsb As Byte<br>
&nbsp;&nbsp;&nbsp;&nbsp;Dim bWmsb As Byte<br>
&nbsp;&nbsp;&nbsp;&nbsp;Dim bWlsb As Byte<br>
&nbsp;&nbsp;&nbsp;&nbsp;Dim bBuf(7) As Byte<br>
&nbsp;&nbsp;&nbsp;&nbsp;Dim bDone As Byte<br>
&nbsp;&nbsp;&nbsp;&nbsp;Dim iCount As Integer<br>
<br>
&nbsp;&nbsp;&nbsp;&nbsp;lFlen = FileLen(sFileName)<br>
&nbsp;&nbsp;&nbsp;&nbsp;iFN = FreeFile<br>
&nbsp;&nbsp;&nbsp;&nbsp;Open sFileName For Binary As iFN<br>
&nbsp;&nbsp;&nbsp;&nbsp;Get #iFN, 1, bTemp()<br>
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<br>
&nbsp;&nbsp;&nbsp;&nbsp;@#PNG file<br>
&nbsp;&nbsp;&nbsp;&nbsp;If bTemp(0) = &H89 And bTemp(1) = &H50 And bTemp(2) = &H4E _<br>
&nbsp;&nbsp;&nbsp;&nbsp;And bTemp(3) = &H47 Then<br>
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Get #iFN, 19, bWmsb<br>
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Get #iFN, 20, bWlsb<br>
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Get #iFN, 23, bHmsb<br>
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Get #iFN, 24, bHlsb<br>
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;@#GetImageSize.Width = CombineBytes(bWlsb, bWmsb)<br>
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;@#GetImageSize.Height = CombineBytes(bHlsb, bHmsb)<br>
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;WImg = CombineBytes(bWlsb, bWmsb)<br>
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;HImg = CombineBytes(bHlsb, bHmsb)<br>
&nbsp;&nbsp;&nbsp;&nbsp;End If<br>
&nbsp;&nbsp;&nbsp;&nbsp;<br>
&nbsp;&nbsp;&nbsp;&nbsp;@#GIF file<br>
&nbsp;&nbsp;&nbsp;&nbsp;If bTemp(0) = &H47 And bTemp(1) = &H49 And bTemp(2) = &H46 _<br>
&nbsp;&nbsp;&nbsp;&nbsp;And bTemp(3) = &H38 Then<br>
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Get #iFN, 7, bWlsb<br>
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Get #iFN, 8, bWmsb<br>
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Get #iFN, 9, bHlsb<br>
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Get #iFN, 10, bHmsb<br>
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;@#GetImageSize.Width = CombineBytes(bWlsb, bWmsb)<br>
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;@#GetImageSize.Height = CombineBytes(bHlsb, bHmsb)<br>
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;WImg = CombineBytes(bWlsb, bWmsb)<br>
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;HImg = CombineBytes(bHlsb, bHmsb)<br>
&nbsp;&nbsp;&nbsp;&nbsp;End If<br>
&nbsp;&nbsp;&nbsp;&nbsp;<br>
&nbsp;&nbsp;&nbsp;&nbsp;<br>
&nbsp;&nbsp;&nbsp;&nbsp;@#JPEG file<br>
&nbsp;&nbsp;&nbsp;&nbsp;If bTemp(0) = &HFF And bTemp(1) = &HD8 And bTemp(2) = &HFF Then<br>
&nbsp;&nbsp;&nbsp;&nbsp;Debug.Print &quot;JPEG&quot;<br>
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;lPos = 3<br>
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Do<br>
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Do<br>
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Get #iFN, lPos, bBuf(1)<br>
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Get #iFN, lPos + 1, bBuf(2)<br>
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;lPos = lPos + 1<br>
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Loop Until (bBuf(1) = &HFF And bBuf(2) &lt;&gt; &HFF) Or lPos &gt; lFlen<br>
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<br>
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;For iCount = 0 To 7<br>
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Get #iFN, lPos + iCount, bBuf(iCount)<br>
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Next iCount<br>
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;If bBuf(0) &gt;= &HC0 And bBuf(0) &lt;= &HC3 Then<br>
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;bHmsb = bBuf(4)<br>
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;bHlsb = bBuf(5)<br>
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;bWmsb = bBuf(6)<br>
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;bWlsb = bBuf(7)<br>
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;bDone = 1<br>
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Else<br>
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;lPos = lPos + (CombineBytes(bBuf(2), bBuf(1))) + 1<br>
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;End If<br>
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Loop While lPos &lt; lFlen And bDone = 0<br>
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;@#GetImageSize.Width = CombineBytes(bWlsb, bWmsb)<br>
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;@#GetImageSize.Height = CombineBytes(bHlsb, bHmsb)<br>
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;WImg = CombineBytes(bWlsb, bWmsb)<br>
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;HImg = CombineBytes(bHlsb, bHmsb)<br>
&nbsp;&nbsp;&nbsp;&nbsp;End If<br>
&nbsp;&nbsp;&nbsp;&nbsp;Close iFN<br>
&nbsp;&nbsp;&nbsp;&nbsp;<br>
End Sub<br>
Private Function CombineBytes(lsb As Byte, msb As Byte) As Long<br>
&nbsp;&nbsp;&nbsp;&nbsp;CombineBytes = CLng(lsb + (msb * 256))<br>
End Function

文章来源于领测软件测试网 https://www.ltesting.net/


关于领测软件测试网 | 领测软件测试网合作伙伴 | 广告服务 | 投稿指南 | 联系我们 | 网站地图 | 友情链接
版权所有(C) 2003-2010 TestAge(领测软件测试网)|领测国际科技(北京)有限公司|软件测试工程师培训网 All Rights Reserved
北京市海淀区中关村南大街9号北京理工科技大厦1402室 京ICP备10010545号-5
技术支持和业务联系:[email protected] 电话:010-51297073

软件测试 | 领测国际 | ISTQB | ISTQB官网 | TMMi | TMMi认证 | 国际软件测试工程师认证 | 领测软件测试网