Differenze tra le versioni di "Scaricare una immagine da un sito internet"

Da Gambas-it.org - Wikipedia.
Riga 1: Riga 1:
Di seguito vedremo alcune modalità per scaricare dal WEB file immagini..
+
Di seguito vedremo un paio di modalità per scaricare dal WEB i dati di file immagini.
  
  
=Usando le sole risorse e funzioni di Gambas=
+
==Usando le sole risorse e funzioni di Gambas==
Le risorse di Gambas offrono due possibilità:
 
 
 
==Procedura diretta==
 
 
L'esempio prevede il posizionamento sul Form di una <i>PictureBox</i> e di un <i>Button</i>, nonché l'attivazione dei componenti: <i>gb.net</i> e <i>gb.net.curl</i>:
 
L'esempio prevede il posizionamento sul Form di una <i>PictureBox</i> e di un <i>Button</i>, nonché l'attivazione dei componenti: <i>gb.net</i> e <i>gb.net.curl</i>:
 
  Private myhttp As New HttpClient As "myhttp"   
 
  Private myhttp As New HttpClient As "myhttp"   
Riga 82: Riga 79:
  
  
 
+
==Usando le funzioni esterne della libreria ''Libcurl''==
==Procedura indiretta==
 
Questa procedura (è necessario attivare il componente ''gb.desktop'') prevede l'utilizzo del solo codice Gambas, ma prevede che il file immagine sia aperto dal programma preimpostato nel nostro sistema per l'apertura, appunto, dei file immagine:
 
'''Public''' Sub Button1_Click()
 
 
  Desktop.Open("''www.indirizzo.del.file.immagine.da.scaricare''")
 
 
'''End'''
 
 
 
 
 
 
 
=Utilizzo del codice HTML=
 
Si potrà effettuare il collegamento ad un file immagine richiamandolo:
 
 
 
a) da un'oggetto che permette l'utilizzo del [[Controlli_e_finestre_che_supportano_il_codice_HTML|codice html]]:
 
'''Public''' Sub Button1_Click()
 
 
  Message.Info("&lt;A HREF=\"http:/&#47;indirizzo_web_dell'_immagine_da_mostrare\"&gt;Clicca qui per vedere l'immagine&lt;/a&gt;")
 
 
'''End'''
 
In questo caso, però, l'immagine sarà aperta e mostrata nel proprio web-browser, e pertanto la procedura anche qui sarà ''indiretta''.  [<SUP>[[#Note|nota 3]]</sup>]
 
 
 
b) da un oggetto specifico, che supporta il codice html, come la [[Controlli_e_finestre_che_supportano_il_codice_HTML#L.27oggetto_WebView|<I>WebView</i>]]. In tal caso è necessario attivare, come si sa, anche il componente <i>gb.qt4.webkit:</i>
 
'''Public''' Sub Form_Open() 
 
 
  WebView1.Html = "&lt;HTML&gt;&lt;A HREF='&#104;ttp://www.indirizzo_web_immagine'&gt;Collegamento ipertestuale con l'immagine da mostrare.&lt;/a&gt;&lt;/html&gt;" 
 
 
<b>End</b>
 
Nella <i>WebView</i> verrà mostrato il testo, sul quale si dovrà cliccare per far apparire l'immagine.
 
 
 
 
 
Se si vuole far apparire l'immagine direttamente, senza dover cliccare su un ipertesto, allora il codice sarà il seguente:
 
'''Public''' Sub Form_Open() 
 
 
  WebView1.Html = "&lt;HTML&gt;&lt;IMG SRC='&#104;ttp://www.indirizzo_web_immagine'&gt;Eventuale testo&lt;/img&gt;&lt;/html&gt;" 
 
 
'''End'''
 
 
 
 
 
=Usando la la proprietà "''.Url''" dell'oggetto ''WebView''=
 
Si potrà usare anche la proprietà "''.Url''" dell'oggetto ''WebView'':
 
WebView1.Url = "&#104;ttp://www.indirizzo_web_immagine"
 
 
 
 
 
 
 
=Usando le funzioni esterne della libreria ''Libcurl''=
 
 
'''Libcurl''' è una libreria gratuita lato-client di trasferimento dati con la sintassi URL, capace di supportare diversi protocolli.
 
'''Libcurl''' è una libreria gratuita lato-client di trasferimento dati con la sintassi URL, capace di supportare diversi protocolli.
  
Riga 208: Riga 160:
  
  
===Riferimenti===
+
 
 +
=Mostrare un file presente in una pagina internet=
 +
In questo caso non sarà possibile gestire direttamente i dati del file immagine, ma si provvedere più semplicemente a mostrare il file immagine presente in una pagina web.
 +
 
 +
==Uso del Metodo ''Desktop.Open( )''==
 +
Questa procedura (è necessario attivare il componente ''gb.desktop'') prevede l'utilizzo del solo codice Gambas, ma prevede che il file immagine sia aperto dal programma preimpostato nel nostro sistema per l'apertura, appunto, dei file immagine:
 +
'''Public''' Sub Button1_Click()
 +
 +
  Desktop.Open("''www.indirizzo.del.file.immagine.da.scaricare''")
 +
 +
'''End'''
 +
 
 +
 
 +
 
 +
==Utilizzo del codice HTML==
 +
Si potrà effettuare il collegamento ad un file immagine richiamandolo:
 +
 
 +
a) da un'oggetto che permette l'utilizzo del [[Controlli_e_finestre_che_supportano_il_codice_HTML|codice html]]:
 +
'''Public''' Sub Button1_Click()
 +
 +
  Message.Info("&lt;A HREF=\"http:/&#47;indirizzo_web_dell'_immagine_da_mostrare\"&gt;Clicca qui per vedere l'immagine&lt;/a&gt;")
 +
 +
'''End'''
 +
In questo caso, però, l'immagine sarà aperta e mostrata nel proprio web-browser, e pertanto la procedura anche qui sarà ''indiretta''.  [<SUP>[[#Note|nota 3]]</sup>]
 +
 
 +
b) da un oggetto specifico, che supporta il codice html, come la [[Controlli_e_finestre_che_supportano_il_codice_HTML#L.27oggetto_WebView|<I>WebView</i>]]. In tal caso è necessario attivare, come si sa, anche il componente <i>gb.qt4.webkit:</i>
 +
'''Public''' Sub Form_Open() 
 +
 +
  WebView1.Html = "&lt;HTML&gt;&lt;A HREF='&#104;ttp://www.indirizzo_web_immagine'&gt;Collegamento ipertestuale con l'immagine da mostrare.&lt;/a&gt;&lt;/html&gt;" 
 +
 +
<b>End</b>
 +
Nella <i>WebView</i> verrà mostrato il testo, sul quale si dovrà cliccare per far apparire l'immagine.
 +
 
 +
 
 +
Se si vuole far apparire l'immagine direttamente, senza dover cliccare su un ipertesto, allora il codice sarà il seguente:
 +
'''Public''' Sub Form_Open() 
 +
 +
  WebView1.Html = "&lt;HTML&gt;&lt;IMG SRC='&#104;ttp://www.indirizzo_web_immagine'&gt;Eventuale testo&lt;/img&gt;&lt;/html&gt;" 
 +
 +
'''End'''
 +
 
 +
 
 +
==Usando la la proprietà "''.Url''" dell'oggetto ''WebView''==
 +
Si potrà usare anche la proprietà "''.Url''" dell'oggetto ''WebView'':
 +
WebView1.Url = "&#104;ttp://www.indirizzo_web_immagine"
 +
 
 +
 
 +
 
 +
=Riferimenti=
 
* https://curl.haxx.se/libcurl/
 
* https://curl.haxx.se/libcurl/
 
* http://libcurl.org/
 
* http://libcurl.org/

Versione delle 09:15, 11 gen 2018

Di seguito vedremo un paio di modalità per scaricare dal WEB i dati di file immagini.


Usando le sole risorse e funzioni di Gambas

L'esempio prevede il posizionamento sul Form di una PictureBox e di un Button, nonché l'attivazione dei componenti: gb.net e gb.net.curl:

Private myhttp As New HttpClient As "myhttp"  
  

Public Sub Button1_Click()

' Invia_richiesta al server per scaricare il file immagine:   [nota 1]
 myhttp.URL = "www.indirizzo.del.file.immagine.da.scaricare"
  
 myhttp.Timeout = 15
 
' Scarica i dati del file immagine in un percorso prescelto, contenente anche il nome del file immagine ricreato:
 myhttp.Get(Null, "/percorso/del/file/immagine/scaricato_e_ricreato") 
     
End  
 

Public Sub MyHTTP_Finished()  
    
  MyHTTP.Close  
   
' Carichiamo nella "PictureBox" il file immagine ricreato:
  PictureBox1.Picture = Picture["''/percorso/del/file/immagine/scaricato_e_ricreato"]

End


oppure anche utilizzando l'evento _Read():

Private myhttp As New HttpClient As "myhttp"  
Private stringa As String


Public Sub Button1_Click()

' Invia_richiesta al server per scaricare il file immagine:   [nota 1]
 myhttp.URL = "www.indirizzo.del.file.immagine.da.scaricare"
  
 myhttp.Timeout = 15  
 myhttp.Get() 
     
End  
  

Public Sub myhttp_Read()  
     
 Dim sBuf As String  
    
' Andiamo a leggere il flusso di dati del file immagine:
   If Lof(MyHTTP) Then   
     Read #MyHTTP, sBuf, Lof(MyHTTP)
     stringa = stringa & sBuf
   End If

End


Public Sub MyHTTP_Finished()  
    
  Label1.Text = ("Immagine scaricata !")  
       
  Wait   
        

  MyHTTP.Close  
             

' Ricreiamo il file: [nota 2]
  File.Save("/percorso/del/file/ricreato", stringa)


' Carichiamo nella "PictureBox" il file immagine ricreato:
  PictureBox1.Picture = Picture["/percorso/del/file/ricreato"]

End


Usando le funzioni esterne della libreria Libcurl

Libcurl è una libreria gratuita lato-client di trasferimento dati con la sintassi URL, capace di supportare diversi protocolli.

Per poter fruire in Gambas delle risorse della libreria Libcurl, è necessario avere installata nel sistema e richiamare la libreria dinamica condivisa: "libcurl.so"


Mostriamo un esempio pratico, nel quale immaginiamo di dover scaricare un file immagine di formato .png:

Library "libcurl"

Private Const CURLOPT_WRITEDATA As Integer = 10001
Private Const CURLOPT_URL As Integer = 10002
   
' CURL *curl_easy_init(void)
' Start a libcurl easy session.
Private Extern curl_easy_init() As Pointer

' CURLcode curl_easy_setopt(CURL *curl, CURLoption option, ...)
' Set options for a curl easy handle
Private Extern curl_easy_setopt(curl As Pointer, optionI As Integer, optionP As Pointer) As Integer
 
' CURLcode curl_easy_perform(CURL *curl)
' Perform a blocking file transfer.
Private Extern curl_easy_perform(curl As Pointer) As Pointer

' const char *curl_easy_strerror(CURLcode)
' Turn a CURLcode value into the equivalent human readable error string.
Private Extern curl_easy_strerror(CURLcode As Integer) As String

' void curl_easy_cleanup(CURL *curl)
' End a libcurl easy handle.
Private Extern curl_easy_cleanup(curl As Pointer)


Library "libc:6"

' FILE *fopen (const char *__restrict __filename, const char *__restrict __modes)
' Open a file and create a new stream for it.
Private Extern fopen(__filename As String, __modes As String) As Pointer

' int fclose (FILE *__stream)
' Close STREAM.
Private Extern fclose(__stream As Pointer) As Integer


Public Sub Main()

 Dim cu, url, fl As Pointer
 Dim file_finale As String
 Dim ris As Integer
 
' Imposta l'indirizzo web del file immagine .png da scaricare:
  url = Alloc("http://indirizzo/web/del/file.png")
  
' Imposta il percorso del nuovo file immagine generato con i dati del file immagine scaricato:
  file_finale = "/percorso/del/nuovo/file.png"
    
' Inizilizza la libreria Libcurl':
  cu = curl_easy_init()
  If cu = 0 Then Error.Raise("Impossibile inizializzare la libreria 'curl' !")
  
  curl_easy_setopt(cu, CURLOPT_URL, url)
   
' Apre in scrittura il percorso del nuovo file immagine .png da salvare:
  fl = fopen(file_finale, "wb")
   
' Scrive i dati scaricati del file nella variabile handle per la gestione del nuovo file immagine .png da salvare:
  curl_easy_setopt(cu, CURLOPT_WRITEDATA, fl)
  
' Scrive il nuovo file immagine .png :
  ris = curl_easy_perform(cu)
  If ris <> 0 Then Error.Raise("Errore nella scrittura del file: " & curl_easy_strerror(i))
   
   
' Va in chiusura e libera tutta la memoria precedentemente allocata:
  fclose(pagina)
  Free(url)
  curl_easy_cleanup(cu)
  
End


Mostrare un file presente in una pagina internet

In questo caso non sarà possibile gestire direttamente i dati del file immagine, ma si provvedere più semplicemente a mostrare il file immagine presente in una pagina web.

Uso del Metodo Desktop.Open( )

Questa procedura (è necessario attivare il componente gb.desktop) prevede l'utilizzo del solo codice Gambas, ma prevede che il file immagine sia aperto dal programma preimpostato nel nostro sistema per l'apertura, appunto, dei file immagine:

Public Sub Button1_Click()

  Desktop.Open("www.indirizzo.del.file.immagine.da.scaricare")

End


Utilizzo del codice HTML

Si potrà effettuare il collegamento ad un file immagine richiamandolo:

a) da un'oggetto che permette l'utilizzo del codice html:

Public Sub Button1_Click()

  Message.Info("<A HREF=\"http://indirizzo_web_dell'_immagine_da_mostrare\">Clicca qui per vedere l'immagine</a>")

End

In questo caso, però, l'immagine sarà aperta e mostrata nel proprio web-browser, e pertanto la procedura anche qui sarà indiretta. [nota 3]

b) da un oggetto specifico, che supporta il codice html, come la WebView. In tal caso è necessario attivare, come si sa, anche il componente gb.qt4.webkit:

Public Sub Form_Open()  

  WebView1.Html = "<HTML><A HREF='http://www.indirizzo_web_immagine'>Collegamento ipertestuale con l'immagine da mostrare.</a></html>"  

End

Nella WebView verrà mostrato il testo, sul quale si dovrà cliccare per far apparire l'immagine.


Se si vuole far apparire l'immagine direttamente, senza dover cliccare su un ipertesto, allora il codice sarà il seguente:

Public Sub Form_Open()  

  WebView1.Html = "<HTML><IMG SRC='http://www.indirizzo_web_immagine'>Eventuale testo</img></html>"  

End


Usando la la proprietà ".Url" dell'oggetto WebView

Si potrà usare anche la proprietà ".Url" dell'oggetto WebView:

WebView1.Url = "http://www.indirizzo_web_immagine"


Riferimenti


Usando Shell ed il comando wget

Nell'esempio che segue sul Form del programma saranno posti semplicemente una PictureBox ed un Button. Scaricheremo un'immagine da un sito internet mediante wget (che sarà lanciato nel nostro programma mediante il comando Shell), e successivamente la caricheremo nella PictureBox:

Public Sub Button1_Click()

' Scarichiamo l'immagine dal sito web:
  Shell "wget http://indirizzo_web_dell'_immagine_da_scaricare --directory-prefix percorso_ove_sarà_scaricata" Wait [nota 4]

' Carichiamo l'immagine nella PictureBox:
  PictureBox1.Picture = Picture["percorso_ove_l'immagine_è_stata_scaricata"]

End


Note

[1] In vero, con questa metodo è possibile scaricare qualsiasi tipo di file.

[2] E' possibile ricreare utilmente con questo metodo qualsiasi tipo di file.

[3] In questo caso sarà possibile soltanto utilizzare il file (dunque trattandosi di file immagine, visualizzarla), al quale ci si è collegati via internet, e non sarà possibile direttamente ottenerne una copia indipendente da salvare.

[4] Se si vuole inserire l'immagine in una nuova cartella da creare, questa deve essere aggiunta alla fine del pecorso ove si intende scaricare il file:

--directory-prefix /percorso/nuova_cartella