Autore Topic: Web view e salvataggio immagini  (Letto 917 volte)

Offline pastrank

  • Maestro Gambero
  • ****
  • Post: 266
    • Mostra profilo
Web view e salvataggio immagini
« il: 17 Giugno 2020, 10:30:32 »
Esiste un modo, che voi sappiate, di potere salvare immagini come queste, in un controllo webview?

https://www.discogs.com/Soundgarden-Ultramega-OK/master/11308

Non la posso mostrare direttamente, e' quella che appare cliccando sull'immagine della copertina in alto a sinistra. Ovviamente dovrebbe funzionare su ogni pagina, corrispondente a un disco. Dapprima pensavo a regex sul tipo di contenitore, ma poi alla fine ho visto che non sempre e' uguale, anzi, in una decina di prove ce ne erano almeno 5 tipi diversi. L'ideale sarebbe ovviamente un  bel menu "salva come", ma ovviamente dovrei capire dove sono e quale file prendere. Qui mi sono fermato.
Come ultima alternativa potrei prendere l'immagine di tutta la pagina e scontornare l'immagine centrale emersa con Imagemagick, ma mi sembrerebbe di sparare a una mosca con un cannone, oltre al fatto che limitare le dipendenze mi da' una gioia immensa  :)

Ps; non merita un altro thread: questa cosa e' per il mio orrido programmillo che uso per gestire le mie raccolte di musica. Costretto dai tempi a fare delle modifiche - era mezzo hardcoded - mi chiedo quale possa essere il metodo piu' pratico e sicuro per ottenere le tag dei file, ma intendo proprio tutte, non solo gli mp3, ma anche flac e dsf. Attualmente richiamo kid3-cli, ma ha, sia a linea di comando che via dbus, dei comandi sia complessi (va escapato tutto perche' usa le virgolette nei comandi), sia una documentazione praticamente priva di esempi. Pensavo allora a richiamare via Python Mutagen, ma mi chiedevo se non c'era di meglio.

Offline vuott

  • Moderatore globale
  • Senatore Gambero
  • *****
  • Post: 11.724
  • Ne mors quidem nos iunget
    • Mostra profilo
Re:Webview e salvataggio immagini
« Risposta #1 il: 17 Giugno 2020, 14:45:38 »
Ben tornato Pastrank !  :)

Rispondo alla prima questione.

Per ottenere l'immagine di una pagina web mostrata da WebView (...il cannone contro la mosca), suggerisco la lettura di queste pagine della nostra Wiki:

  https://www.gambas-it.org/wiki/index.php?title=Ottenere_un%27immagine_di_una_pagina_web
  https://www.gambas-it.org/wiki/index.php?title=Trasformare_il_contenuto_visibile_dell%27oggetto_WebView_in_una_immagine


In via generale, per scaricare un file immagine da un sito web:

  https://www.gambas-it.org/wiki/index.php?title=Scaricare_una_immagine_da_un_sito_internet
 
« Chiunque, non ricorrendo lo stato di necessità, nel proprio progetto Gambas fa uso delle istruzioni Shell o Exec, è punito con la sanzione pecuniaria da euro 20,00 a euro 60,00. »

Offline Gianluigi

  • Moderatore globale
  • Senatore Gambero
  • *****
  • Post: 4.244
  • Tonno verde
    • Mostra profilo
Re:Webview e salvataggio immagini
« Risposta #2 il: 17 Giugno 2020, 15:04:09 »
Ben tornato Pastrank !  :)

Rispondo alla prima questione.

...
 

 :)
C'è anche questa discussione sulla ML:
https://lists.gambas-basic.org/pipermail/user/2018-May/063984.html

 :ciao:
nuoto in attesa del bacio di una principessa che mi trasformi in un gambero azzurro

Offline vuott

  • Moderatore globale
  • Senatore Gambero
  • *****
  • Post: 11.724
  • Ne mors quidem nos iunget
    • Mostra profilo
Re:Web view e salvataggio immagini
« Risposta #3 il: 17 Giugno 2020, 16:17:37 »
... ma anche flac e dsf.
Riguardo a quest'altra questione posso segnalarti la pagina della nostra Wiki attinente all'acquisizione di informazioni generali (purtroppo non TAG in senso stretto) da un file audio di formato FLAC.

   https://www.gambas-it.org/wiki/index.php?title=Estrarre_informazioni_generali_da_un_file_audio_flac


« Ultima modifica: 17 Giugno 2020, 16:43:17 da vuott »
« Chiunque, non ricorrendo lo stato di necessità, nel proprio progetto Gambas fa uso delle istruzioni Shell o Exec, è punito con la sanzione pecuniaria da euro 20,00 a euro 60,00. »

Offline pastrank

  • Maestro Gambero
  • ****
  • Post: 266
    • Mostra profilo
Re:Webview e salvataggio immagini
« Risposta #4 il: 17 Giugno 2020, 16:41:16 »
Ben tornato Pastrank !  :)

E be', non sono mai andato, ho sempre letto, anche se ho commentato zero!

Rispondo alla prima questione.

Avevo visto quello, del resto reputo la wiki una delle migliori parti del sito, pero' il mio problema e' che  non conosco il nome dell'immagine. Potrei provare a scontornarla con Imagemagick, appunto, anche se mi dispiacerebbe aggiungere una dipendenza. Alla fine pero' ho fatto una cialtronata delle mia, rammentando un suggerimento che hai dato. In questa form ho messo delle variabili private, che poi mi saranno necessarie.

Codice: [Seleziona]
Private myhtml As String = ""
Private ht As New HttpClient As "MyHttp"

Sono stato costretto a scrivere qualcosa per l'evento Mousedown() del webview, perche' avevo bisogno di usare HitTest(). Se il mouse va giu' dove c'e' un immagine, mi prende il pezzo che lo gestisce e lo mette in myhtml

Codice: [Seleziona]
Public Sub wv_MouseDown()
Dim v As WebHitTest = wv.HitTest(Mouse.x, Mouse.y)
If v.Image Then
    myhtml = v.Element.HTML
Endif
End

a questo punto, visto che volevo usare, forzosamente, un menu contestuale col right click, devo ripulire myhtml, e estrarre il path dell'immagine (sperando che non rifacciano il sito cambiando tutto). A quel punto lo scarico nella cartella, dandogli il nome che preferisco

Codice: [Seleziona]
Public Sub mnuSaveCover_Click()
  Dim ss As String[]
  Dim s As String
 
    If InStr(myhtml, "src=") > 0 Then
      s = Mid(myhtml, InStr(myhtml, "src=") + 5)
      s = Left(s, InStr(s, "\"") - 1)
      With ht
         .URL = s
         .Timeout = 15
         .Get(Null, FMain.DirChooser.Current &/ "cover.jpg")
       End With
    Endif
End

Ho tolto un po' di cose per scriverle qui sopra, ma il principio e' quello. Che vergogna :-)

Offline vuott

  • Moderatore globale
  • Senatore Gambero
  • *****
  • Post: 11.724
  • Ne mors quidem nos iunget
    • Mostra profilo
Re:Webview e salvataggio immagini
« Risposta #5 il: 17 Giugno 2020, 22:37:40 »
e estrarre il path dell'immagine

Un elemento da cercare nel codice sorgente html della pagina è il tag
 
Codice: [Seleziona]
<img src="...
« Chiunque, non ricorrendo lo stato di necessità, nel proprio progetto Gambas fa uso delle istruzioni Shell o Exec, è punito con la sanzione pecuniaria da euro 20,00 a euro 60,00. »

Offline vuott

  • Moderatore globale
  • Senatore Gambero
  • *****
  • Post: 11.724
  • Ne mors quidem nos iunget
    • Mostra profilo
Re:Webview e salvataggio immagini
« Risposta #6 il: 18 Giugno 2020, 00:34:27 »
Tornando sul file audio di formato FLAC, va detto che i TAG utilizzati sono analoghi a quelli usati nei formati MP3 e OGG.
Essendo individuati come stringhe di caratteri, è molto agevole anche usando le sole risorse di Gambas estrapolarli dal file audio.

Riguardo all'eventuale immagine, con la quale il file FLAC può mostrarsi sul desktop, va detto che il file FLAC contiene i dati completi dell'immagine che l'accompagna.
Ho preso come esempio il file audio FLAC che può essere scaricato da questo indirizzo web: 
  https://helpguide.sony.net/high-res/sample1/v1/data/Sample_BeeMoved_96kHz24bit.flac.zip

Aprendolo con un editor esadecimale, è facile riscontrare il gruppo di TAG a cominciare dal byte all'offset 96.
Riguardo invece all'immagine contenuta, essa è un file jpeg, come da informazione contenuta nel byte di offset 207.
Verifichiamo infatti che poco dopo sono presenti i seguenti byte: FF D8 FF E0 00 10 4A 46 49 46, i quali definiscono l'inizio proprio di una particolare e molto comune versione di file immagine JPG, che ha sempre come byte terminali i valori FF D9.
Così, adoperando ad esempio il seguente codice, possiamo estrarre da quel file FLAC i soli dati dell'immagine in esso contenuta e salvarla in un file JPG autonomo:
Codice: [Seleziona]
Public Sub Main()

  Dim s As String
  Dim ini, fin As Integer
  Dim fl As File
  Dim bb As Byte[]
 
  s = "/percorso/ove/è/stato/scaricato/il/file/Sample_BeeMoved_96kHz24bit.flac"
 
  ini = InStr(File.Load(s), "JFIF") - 7
  fin = InStr(File.Load(s), "\xFF\xD9")
 
  fl = Open s For Read
 
  bb = New Byte[(fin - ini) + 1]

  Seek #fl, ini
  bb.Read(fl, 0, bb.Count)
 
  File.Save("/tmp/immagine.jpg", bb.ToString(0, bb.Count))
 
  fl.Close

End


Oppure più brevemente, ma utilizzando solo funzioni Stringa:
Codice: [Seleziona]
Public Sub Main()

  Dim s As String
  Dim ini, fin As Integer

  s = File.Load("/percorso/ove/è/stato/scaricato/il/file/Sample_BeeMoved_96kHz24bit.flac")

  ini = InStr(s, "JFIF") - 6
  fin = InStr(s, "\xFF\xD9")
 
  s = Mid(s, ini, (fin - ini) + 1)

  File.Save("/tmp/imm.jpg", s)

End
« Ultima modifica: 18 Giugno 2020, 00:54:40 da vuott »
« Chiunque, non ricorrendo lo stato di necessità, nel proprio progetto Gambas fa uso delle istruzioni Shell o Exec, è punito con la sanzione pecuniaria da euro 20,00 a euro 60,00. »

Offline pastrank

  • Maestro Gambero
  • ****
  • Post: 266
    • Mostra profilo
Re:Webview e salvataggio immagini
« Risposta #7 il: 18 Giugno 2020, 02:28:31 »
Tornando sul file audio di formato FLAC, va detto che i TAG utilizzati sono analoghi a quelli usati nei formati MP3 e OGG.
Essendo individuati come stringhe di caratteri, è molto agevole anche usando le sole risorse di Gambas estrapolarli dal file audio.

Ahime', mi sono rassegnato a usare altro per leggere perche' la lettura dei tag, anche nei soli file flac, e' molto varia: se nom ho inteso male, ci possono essere tag (id3 1.1, 2.3, 2.4, vorbis) normali stringhe, o formate da array. Poi ci  sono, solo tra quelli che uso, anche gli mp3 e i dsf

https://kid3.sourceforge.io/kid3_en.html#tag3

Diventerebbe quindi un lavorone gestire tutto a mano, e' troppo piu' semplice affidarsi a qualche applicazione specializzata che fa gia' tutto. La cosa piu' universale che conosco probabilmente e' la libreria Mutagen per Python, ma neanche questa e' troppo veloce come uso, visto che necessariamente comporta l'uso di diverse classi, anche se ha il vantaggio di leggere praticamente tutti i tipi di file audio. kid3-cli e' la versione terminale di Kid3, applicazione QT5 che ha il vantaggio di potere essere usata anche via d-bus.
Volevo ridurre idealmente a 2 le funzioni in Gambas dove lo uso, una per leggere e l'altra per scrivere le tag, in modo che poi il passaggio dal richiamo come shell a d-bus non fosse una riscrittura completa

Offline pastrank

  • Maestro Gambero
  • ****
  • Post: 266
    • Mostra profilo
Re:Webview e salvataggio immagini
« Risposta #8 il: 07 Novembre 2020, 11:12:54 »
Citazione
Ahime', mi sono rassegnato a usare altro per leggere perche' la lettura dei tag, anche nei soli file flac, e' molto varia: se nom ho inteso male, ci possono essere tag (id3 1.1, 2.3, 2.4, vorbis) normali stringhe, o formate da array. Poi ci  sono, solo tra quelli che uso, anche gli mp3 e i dsf

Alla fine sto iniziando a usare Mediainfo, per ora in shell, che legge praticamente tutto e di piu'. Via shell ha pure l'output formattabile, cosa che permette di rileggerlo senza acrobazie anche non volendo usare JSON o XML: per esempio, e' facile trasformare l'output in un file tipo ".ini". Le prime prove (si possono aggiungere anche le virgolette, volendo, e le tag che non si vedono e' perche' ancora non le ho implementate/non ne ho bisogno):

Codice: [Seleziona]
me@debsrv:~/tmp/test$ mediainfo --Output=file://template2.txt *.flac *.dsf *.mp3 *.ogg *.wv
[01.flac]
ALBU = Abbalati, abballati!
ARTS = Al Qantarah
GENR =
NAME = Surat Mariam
SIZE = 19437193
TRCK = 1
BITR = 678725
BITD = 16
BITS = 44100
CHAN = 2
COMP = Lossless
LENG = 229000
TYPE = FLAC

[01.dsf]
ALBU = Sessions from the 17th Ward
ARTS = Amber Rubarth
GENR = Folk
NAME = Sneak
SIZE = 192110584
TRCK = 11
BITR = 11290105
BITD =
BITS = 5644800
CHAN = 2
COMP = Lossless
LENG = 135999
TYPE = DSD

[01.mp3]
ALBU = Gun Song / Days "The Clubmixes"
ARTS = Alphawezen
GENR = House
NAME = Days (The Timewriter Remix)
SIZE = 10513372
TRCK = 2
BITR = 203226
BITD =
BITS = 44100
CHAN = 2
COMP = Lossy
LENG = 413753
TYPE = MPEG Audio

Offline vuott

  • Moderatore globale
  • Senatore Gambero
  • *****
  • Post: 11.724
  • Ne mors quidem nos iunget
    • Mostra profilo
Re:Webview e salvataggio immagini
« Risposta #9 il: 07 Novembre 2020, 14:45:47 »
Alla fine sto iniziando a usare Mediainfo, per ora in shell

« Ultima modifica: 07 Novembre 2020, 14:46:19 da vuott »
« Chiunque, non ricorrendo lo stato di necessità, nel proprio progetto Gambas fa uso delle istruzioni Shell o Exec, è punito con la sanzione pecuniaria da euro 20,00 a euro 60,00. »

Offline pastrank

  • Maestro Gambero
  • ****
  • Post: 266
    • Mostra profilo
Re:Webview e salvataggio immagini
« Risposta #10 il: 07 Novembre 2020, 14:55:23 »
 :D

A mia parziale discolpa, tieni conto che quello che faccio con la shell e Gambas viene subito buono per Python.e che se non provo prima nemmeno so cosa posso ottenere :-)