Получение размеров файла изображения из URL - PullRequest
0 голосов
/ 02 декабря 2018

У меня есть эта ссылка: https://s23527.pcdn.co/wp-content/uploads/2017/04/wine_speedlights_kit_lens.jpg.optimal.jpg

Он находится в ячейке A2: Before

Я хочу получить в ячейке B2 размеры URL этой JPG After

(я не против, как его получить, это может быть1920 на ячейку B2 и 1080 на ячейку C2)

1 Ответ

0 голосов
/ 02 декабря 2018

Вам нужно будет вызвать API на URLDownloadToFile, чтобы загрузить изображение.В приведенном ниже примере мы будем загружать во временную папку C:\Temp\.

. Как только ваше изображение будет загружено, вы создадите новый объект Shell и в конечном итоге будете использовать свойство .ExtendedProperty(), чтобы получить размеры вашего файла

После завершения загрузки файла вы можете удалить временный файл, используя Kill().

В приведенном ниже методе используется Раннее связывание .Вам нужно будет установить ссылку на

Microsoft Shell Controls And Automation

Перейдя на Tools -> References в меню VBE

Option Explicit

#If VBA7 Then
    Declare PtrSafe Function URLDownloadToFile Lib "urlmon" Alias "URLDownloadToFileA" _
            (ByVal pCaller As Long, ByVal szURL As String, ByVal szFileName As String, _
            ByVal dwReserved As Long, ByVal lpfnCB As Long) As Long
#Else
    Declare Function URLDownloadToFile Lib "urlmon" Alias "URLDownloadToFileA" _
            (ByVal pCaller As Long, ByVal szURL As String, ByVal szFileName As String, _
            ByVal dwReserved As Long, ByVal lpfnCB As Long) As Long
#End If

Sub test()

    Const tmpDir$ = "C:\Temp\"
    Const tmpFile$ = "tmpPicFile.jpg"

    Debug.Print URLDownloadToFile(0, ActiveSheet.Range("A2").Value, tmpDir & tmpFile, 0, 0)
    ActiveSheet.Range("B2").Value = getFileDimensions(tmpDir, tmpFile)
    Kill tmpDir & tmpFile

End Sub

Private Function getFileDimensions(filePath$, fileName$) As String

    With New Shell32.Shell
        With .Namespace(filePath).ParseName(fileName)
            getFileDimensions = .ExtendedProperty("Dimensions")
        End With
    End With

End Function
...