找回密码
 加入
搜索
查看: 4963|回复: 14

[AU3基础] 如何获取网络图片的宽和高[已解决]

 火.. [复制链接]
发表于 2012-1-3 14:39:51 | 显示全部楼层 |阅读模式
本帖最后由 黑色袜子 于 2012-1-7 14:44 编辑

比如:获取
[img1]http://www.baidu.com/img/baidu_sylogo1.gif[/img1]
这个图片的width和height
不下载此图片。直接获取。


15楼完美达到我要求,谢谢!
发表于 2012-1-3 15:09:39 | 显示全部楼层
为毛 不能下载啊?

呃,悄悄下载到本地

得到属性 再删除就是了~~

直接 获取属性不晓得咯~~
发表于 2012-1-3 18:34:40 | 显示全部楼层
ff右键,查看图片信息就得到了.
既然已经看到了,显示出来了,那么就已经在缓存里了.
发表于 2012-1-3 19:31:58 | 显示全部楼层
为毛 不能下载啊?

呃,悄悄下载到本地

得到属性 再删除就是了~~

直接 获取属性不晓得咯~~{:face  ...
jasmine 发表于 2012-1-3 15:09


你看网页的时候就已经缓存下来了,这位说的很对哦,搞到temp里面然后用完删除
发表于 2012-1-3 19:38:22 | 显示全部楼层
<img src="http://www.baidu.com/img/baidu_sylogo1.gif" width="270" height="129" usemap="#mp"><map name="mp"><area shape="rect" coords="40,25,230,95"
 楼主| 发表于 2012-1-3 21:58:25 | 显示全部楼层
呵呵。弄好了忘记上这里说下。
我最后没啥法子,就觉得下载是唯一的办法了。于是就下载图片,用gdi的UDF获取图片属性。
就是不知道获取N多图片的时候会不会慢。
发表于 2012-1-3 22:19:37 | 显示全部楼层
#include <IE.au3>
$oIE = _IECreate ("http://www.baidu.com/img/baidu_sylogo1.gif")
$oImg = _IEImgGetCollection ($oIE, 0)
$sInfo = "图片地址: " & $oImg.src & @CR
$sInfo &= "图片名: " & $oImg.nameProp & @CR
$sInfo &= "图片高: " & $oImg.height & @CR
$sInfo &= "图片宽: " & $oImg.width & @CR

MsgBox(0, "4th Image Info", $sInfo)
发表于 2012-1-3 23:15:58 | 显示全部楼层
1,_INetGetSource($Url, 0) 不写缓存直接获取二进制数据
2,通过二进制数据获取图像位图句柄(happytc 写过相关UDF),也就可以获取到图片宽高信息。
 楼主| 发表于 2012-1-4 13:41:57 | 显示全部楼层
回复 8# afan


    我用winhttp把图片写到本地。然后用gdi的函数解决了。但是我并不像用这个法子。

所说的第二步那个UDF我没找到。能否提供下(我论坛搜索作者ID,没搜到。唯一一个UDF是顶置窗口的。_inetgetsource的也有但是没那个UDF)
发表于 2012-1-4 13:47:41 | 显示全部楼层
回复 9# 黑色袜子


    在源码区,不在UDF区
 楼主| 发表于 2012-1-4 14:11:00 | 显示全部楼层
回复 10# afan


    找到了。我研究下。谢谢!
发表于 2012-1-4 14:34:55 | 显示全部楼层
顶起                  。。
发表于 2012-1-7 11:37:31 | 显示全部楼层
8#
发表于 4 天前 23:15 | 只看该作者
1,_INetGetSource($Url, 0) 不写缓存直接获取二进制数据
2,通过二进制数据获取图像位图句柄(happytc 写过相关UDF),也就可以获取到图片宽高信息。
好。。解决俺一个问题。
发表于 2012-1-7 13:20:23 | 显示全部楼层
回复 1# 黑色袜子

可以根据图片的SOF0数据标签,其中包含width和height信息
这样就可以下载极少数据就得到图片尺寸了(可能不到1%的流量)
其原理就是因为宽度和高度都包含在图片头数据中,tag部分都是像素信息,所以可以在开始读取。
但由于霍夫曼编码不定长(虽然头很短),所以在极端情况下可能得不到(这种情形发生可能性非常小)


方向都跟你说了,代码我就不帮你写了,你自己写吧!

评分

参与人数 1金钱 +20 贡献 +2 收起 理由
afan + 20 + 2

查看全部评分

发表于 2012-1-7 13:36:24 | 显示全部楼层
1,_INetGetSource($Url, 0) 不写缓存直接获取二进制数据
2,通过二进制数据获取图像位图句柄(happytc 写 ...
afan 发表于 2012-1-3 23:15


这个方法还是要完全下载,只是不保存为文件,同是直接读内存操作

#include <Inet.au3>
#include <GDIPlus.au3>

$bImage = _INetGetSource('http://www.baidu.com/img/baidu_sylogo1.gif', False)
$hHBITMAP = Load_BMP_From_Mem($bImage, True)
 _GDIPlus_Startup()
$hImage = _GDIPlus_BitmapCreateFromHBITMAP($hHBITMAP)
$iWidth = _GDIPlus_ImageGetWidth($hImage)
$iHeight =  _GDIPlus_ImageGetHeight($hImage)
_GDIPlus_Shutdown()
MsgBox(0, 0, "Width: " & $iWidth & "; Height: " & $iHeight)

Func Load_BMP_From_Mem($mem_image, $hHBITMAP = False)
    If Not IsBinary($mem_image) Then Return SetError(1, 0, 0)
    Local $declared = True
    If Not $ghGDIPDll Then
        _GDIPlus_Startup()
        $declared = False
    EndIf
    Local Const $memBitmap = Binary($mem_image)
    Local Const $len = BinaryLen($memBitmap)
    Local Const $hData = _MemGlobalAlloc($len, $GMEM_MOVEABLE)
    Local Const $pData = _MemGlobalLock($hData)
    Local $tMem = DllStructCreate("byte[" & $len & "]", $pData)
    DllStructSetData($tMem, 1, $memBitmap)
    _MemGlobalUnlock($hData)
    Local $hStream = DllCall("ole32.dll", "int", "CreateStreamOnHGlobal", "handle", $pData, "int", True, "ptr*", 0)
    $hStream = $hStream[3]
    Local $hBitmap = DllCall($ghGDIPDll, "uint", "GdipCreateBitmapFromStream", "ptr", $hStream, "int*", 0)
    $hBitmap = $hBitmap[2]
    Local Const $tVARIANT = DllStructCreate("word vt;word r1;word r2;word r3;ptr data; ptr")
    DllCall("oleaut32.dll", "long", "DispCallFunc", "ptr", $hStream, "dword", 8 + 8 * @AutoItX64, _
                                           "dword", 4, "dword", 23, "dword", 0, "ptr", 0, "ptr", 0, "ptr", DllStructGetPtr($tVARIANT))
    $tMem = 0
    If $hHBITMAP Then
        Local Const $hHBmp = _GDIPlus_BitmapCreateHBITMAPFromBitmap($hBitmap)
        _GDIPlus_BitmapDispose($hBitmap)
        If Not $declared Then _GDIPlus_Shutdown()
        Return $hHBmp
    EndIf
    If Not $declared Then _GDIPlus_Shutdown()
    Return $hBitmap
EndFunc

评分

参与人数 1金钱 +20 收起 理由
黑色袜子 + 20 谢谢

查看全部评分

您需要登录后才可以回帖 登录 | 加入

本版积分规则

QQ|手机版|小黑屋|AUTOIT CN ( 鲁ICP备19019924号-1 )谷歌 百度

GMT+8, 2024-10-1 01:24 , Processed in 0.095726 second(s), 24 queries .

Powered by Discuz! X3.5 Licensed

© 2001-2024 Discuz! Team.

快速回复 返回顶部 返回列表