Как скачать картинку с HTMLCanvasElement?

0

Я хочу загрузить фотографии с этой домашней страницы в Excel VBA.

Пример. http://www.guitarcenter.com/Gibson-Custom-Alex-Lifeson-Les-Paul-Axcess-Electric-Guitar-106521313-i1797778.gc

Я могу получить HTMLCamvasElement, но я не могу загрузить изображения в свою локальную папку.

Пожалуйста, дайте мне знать, как загрузить эти фотографии.

Вот мой код..

============================

Sub test_fill_form()

Dim url1 As String
url1 = "http://www.guitarcenter.com/Gibson-Custom-Alex-Lifeson-Les-Paul-Axcess-Electric-Guitar-106521313-i1797778.gc"

Dim oIE 'As InternetExplorer
Dim oDoc 'As HTMLDocument

Set oIE = CreateObject("InternetExplorer.Application")

oIE.Visible = True
oIE.navigate url1

'wait
While oIE.readyState <> 4: DoEvents: Wend

Set oDoc = oIE.document

'wait
While oIE.readyState <> 4: DoEvents: Wend

'--------------------------

Dim oDivElem 'As HTMLDivElement
Dim oCanElem 'As HTMLCanvasElement

Set oDivElem = oDoc.getElementById("s7zoomView1")
Set oCanElem = oDivElem3.getElementsByTagName("CANVAS")(1)

Stop

'I want to download a image file from oCanElem...
'Do I need to use method of 'toData' ??

End Sub

  • 0
    пожалуйста, предоставьте любые попытки кодирования
  • 0
    Крутая гитара, братан
Показать ещё 3 комментария
Теги:
canvas

1 ответ

0

Как пример сохранения png изображения в файл с холста:

Sub test_toDataURL()
    ' Tools - References - Add ref to:
    ' Microsoft Internet Controls
    ' Microsoft HTML Object Library
    ' Microsoft ActveX Data Objects 6.1 Library
    ' Microsoft XML, v3.0
    Dim objIE As SHDocVw.InternetExplorer 'InternetExplorer
    Dim objDoc As MSHTML.DOMDocumentType 'As HTMLDocument
    Dim objCanvas 'As MSHTML.HTMLCanvasElement 'As HTMLCanvasElement
    Dim objXML As MSXML2.DOMDocument
    Dim objDocElem As MSXML2.IXMLDOMElement
    Dim objStream As ADODB.Stream
    Dim strImg, strData, strPath
    Dim arr64decode() As Byte

    Set objIE = New InternetExplorer
    objIE.Visible = True
    objIE.Navigate "http://earth.nullschool.net/"
    Do While objIE.readyState <> 4
        DoEvents
    Loop
    Set objDoc = objIE.document
    objDoc.parentWindow.execScript "alert('Testing what we have:\n\n'+document.getElementsByTagName('CANVAS')(0).toDataURL('image/png'));", "javascript"
    Application.Wait (Now + TimeValue("0:00:10")) ' waiting for drawing starts
    Set objCanvas = objDoc.getElementsByTagName("CANVAS")(0)
    strImg = objCanvas.toDataURL("image/png")
    If Left(strImg, 22) <> "data:image/png;base64," Then
        strImg = "data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAAsAAAASCAIAAAACF7MiAAAAAXNSR0IArs4c6QAAAARnQU1BAACxjwv8YQUAAAAJcEhZcwAADsMAAA7DAcdvqGQAAABpSURBVChTYzxw4AADfgBU8R83AMoyQRXiBqSquDPRmpExfTuUBwHk2GKlpQplQQCpZqio6UBZCIBpho6aCpQFASS7VFXLCsqCAzQVKvlHZ3pC2VCAqoJwiAGN+P8fzRCSXYoFEEpBDAwAPNYyBnTMkl4AAAAASUVORK5CYII="
    End If
    strData = Right(strImg, Len(strImg) - 22)
    Set objXML = New MSXML2.DOMDocument
    Set objDocElem = objXML.createElement("tmp")
    objDocElem.DataType = "bin.base64"
    objDocElem.Text = strData
    arr64decode = objDocElem.NodeTypedValue
    Set objStream = New ADODB.Stream
    objStream.Type = adTypeBinary ' Const adTypeBinary = 1
    objStream.Open
    objStream.Write arr64decode
    strPath = ThisWorkbook.path & "\picture.png"
    objStream.SaveToFile strPath, adSaveCreateOverWrite ' Const adSaveCreateOverWrite = 2
    objIE.Quit
    MsgBox "Saved to " & strPath
End Sub

Я хочу отметить, что тот же код отлично работает в VBScript, необходимо просто реализовать позднюю привязку и некоторые другие незначительные изменения, поэтому вообще вы не можете использовать MS Office.

Ещё вопросы

Сообщество Overcoder
Наверх
Меню