本帖最后由 ccxw1983 于 2010-10-8 09:14 编辑
我的目的是:在打开一个有图片的页面后,再用au3程序保存页面的图片到本地,希望au3保存的图片的大小和手工保存的一样大。
现在只找到下面这种方式可以保存网页中的图片,但是这种方式保存的图片比较大,并且用了粘贴板,在保存图片的过程中我再用粘贴板的话可能造成程序运行错误,程序用InetGet的方式又不合适(google book的一些限制会导致下载效果不好,用页面的话可以从缓存读取图片)。
希望高手们赐教!#include <GDIPlus.au3>
#include <ScreenCapture.au3>
#include <IE.au3>
#include <GuiConstantsEx.au3>
#include <ClipBoard.au3>
#include <WindowsConstants.au3>
;浏览器中浏览图片
;http://books.google.com.hk/books?id=CHswO9obwk8C&pg=PR5&img=1&zoom=3&hl=zh-CN&sig=ACfU3U2fo1zQrISnmSnUuXmvCad8n9ygMA&w=1025
;另存为才142k
;这样保存却有526k
;为什么?
Opt('MustDeclareVars', 1)
Local $f = @ScriptDir & "\ask_test_1.html"
If FileExists($f) == 0 Then
FileWrite($f, "<html> <head><title>Googlebook</title></head> <body> <img border=1 src=http://books.google.com.hk/books?id=CHswO9obwk8C&pg=PR5&img=1&zoom=3&hl=zh-CN&sig=ACfU3U2fo1zQrISnmSnUuXmvCad8n9ygMA&w=1025 /> </body> </html>")
Sleep(1000)
EndIf
Local $oIE = _IECreate($f)
Sleep(1000)
setClipboard()
Sleep(1000)
_Main()
Func _Main()
Local $hBitmap, $hImage, $sCLSID, $tData, $tParams
_GDIPlus_Startup()
_ClipBoard_Open(0)
$hImage = _ClipBoard_GetDataEx($CF_BITMAP);$CF_BITMAP ;$CF_METAFILEPICT
If $hImage == 0 Then
MsgBox(0, "", "粘贴板没找到")
Else
$hImage = _GDIPlus_BitmapCreateFromHBITMAP($hImage)
$sCLSID = _GDIPlus_EncodersGetCLSID("PNG")
Local $tt = @ScriptDir & "\GDIPlus_Image2.jpg"
ConsoleWrite($tt & @CRLF)
_GDIPlus_ImageSaveToFileEx($hImage, $tt, $sCLSID)
_ClipBoard_Close()
EndIf
_GDIPlus_Shutdown()
EndFunc ;==>_Main
;设置粘贴板
Func setClipboard()
Local $oIE = _IEAttach("Googlebook")
If @error = 0 Then
Local $oImgs = _IEImgGetCollection($oIE)
For $oImg In $oImgs
;复制图片
Local $oPic = $oIE.Document.body.createControlRange()
$oPic.Add($oImg)
$oPic.execCommand("Copy")
MsgBox(0, "", "图片复制了", 2)
ExitLoop
Next
Else
MsgBox(0, "", "html测试页码没找到", 2)
EndIf
EndFunc ;==>setClipboard
|