Autor |
Mensaje |
CanihoJR
Ingeniero Programador
Registrado: Septiembre 2009
Mensajes: 269
Edad: 38 Ubicación: San Pedro Alcantara
|
[SOLUCIONADO] Guardar Una Imagen Concreta De Una Web Con Webview
Buenas!! hacia tiempo que no pasaba por el foro (tambien tiempo que no programaba...) el caso es que llevo un par de dias buscando entre mis antiguos proyectos y por la red como guardar una imagen concreta de una pagina web que estoy viendo a traves de un webview....... es necesario el webview en lugar de descargarla con wget, curl o similar? si, la imagen se genera automaticamente, si refresco es otra :/
esperaba que fuese algo tipo:
imagen1 = New Image(32, 32)
Paint.Begin(imagen1)
'Selecciono la imagen del html y la pinto en i porque es la salida.
miicono = Me.WebView1.Document.FindFirst("#icono")
miicono.Paint()
picture1 = imagen1.Picture
PictureBox1.Picture = picture1
pero no consigo ni mostrarla en un picturebox ni guardarla en un archivo, en ambas obtengo una imagen borrosa de bits mal formados, a veces con el contenido borroso de otras imagenes de la web que nada tienen que ver con esa....
Alguna idea de por donde afrontar el desafio?
última edición por CanihoJR el Miercoles, 11 Abril 2018, 20:13; editado 2 veces
|
#1 Domingo, 04 Marzo 2018, 20:32 |
|
|
vuott
Analista Programador
Registrado: Agosto 2013
Mensajes: 2086
Edad: 60 Ubicación:
|
Re: Guardar Una Imagen Concreta De Una Web Con Webview
De esta imagen conocemos exactamente su web dirección ?
Sì o No ?
última edición por vuott el Domingo, 04 Marzo 2018, 20:59; editado 1 vez
|
#2 Domingo, 04 Marzo 2018, 20:59 |
|
|
CanihoJR
Ingeniero Programador
Registrado: Septiembre 2009
Mensajes: 269
Edad: 38 Ubicación: San Pedro Alcantara
|
Re: Guardar Una Imagen Concreta De Una Web Con Webview
Si, claro, siempre es www.web.com/img/micono (sin extension ni nada, me temo que puedan ser autogeneradas por que como ya digo, si actualizo es una nueva...) pero si la descargo con el navegador es un simple png
|
#3 Domingo, 04 Marzo 2018, 21:23 |
|
|
vuott
Analista Programador
Registrado: Agosto 2013
Mensajes: 2086
Edad: 60 Ubicación:
|
Re: Guardar Una Imagen Concreta De Una Web Con Webview
|
#4 Lunes, 05 Marzo 2018, 03:05 |
|
|
CanihoJR
Ingeniero Programador
Registrado: Septiembre 2009
Mensajes: 269
Edad: 38 Ubicación: San Pedro Alcantara
|
Re: Guardar Una Imagen Concreta De Una Web Con Webview
ups perdón! fué un ejemplo que quise mostrarte, no pensé que preguntabas por la web concreta.... basicamente seria esta: http://www3023ud.sakura.ne.jp/moeruavatar/m.cgi , genera gif a raiz de una serie de opciones... pero no sé como descargar esa imagen win usar wget ni nada, solo webview..... sigue resultandome raro que no pueda insertarla en un picture box cuando recuerdo haberlo hecho hace tiempo de esa forma y del picturebox hacia el .save y listo.... :/ pero ahora no me funciona nada, no sé que cambió...
|
#5 Lunes, 05 Marzo 2018, 12:44 |
|
|
vuott
Analista Programador
Registrado: Agosto 2013
Mensajes: 2086
Edad: 60 Ubicación:
|
Re: Guardar Una Imagen Concreta De Una Web Con Webview
Por lo que atañe a esta pagina: http://www3023ud.sakura.ne.jp/moeruavatar/m.cgi, es posible este codigo (hace fatla activar los Componentes de gambas gb.net y gb.net.curl):
Private myhttp As New HttpClient As "myhttp"
Private s As String
Public Sub Form_Open()
WebView1.Url = "http://www3023ud.sakura.ne.jp/moeruavatar/m.cgi"
End
Public Sub WebView1_Load()
' Intenta impedir un segundo paso después de la carga de la imagen en WebvVew:
If Left(WebView1.HTML, 6) <> LCase("<html>") Then Return
' Identifica la dirección web de la imagen:
s = Scan(WebView1.HTML, "*src=* width*")[1]
' Elimina las comillas de la dirección de la imagen:
s = Replace(s, "\x22", Null)
myhttp.URL = s
myhttp.Timeout = 15
' Descarga los datos del archivo imagen en una ruta elegida, contenente también el nombre del archivo imagen recreado:
myhttp.Get(Null, "/tmp/imagen." & File.Ext(s))
End
Public Sub MyHTTP_Finished()
MyHTTP.Close
' Carca en el "PictureBox" el archivo imagen recreado:
PictureBox1.Picture = Picture["/tmp/imagen." & File.Ext(s)]
End
|
#6 Lunes, 05 Marzo 2018, 16:09 |
|
|
jsbsan
Analista Programador
Registrado: Septiembre 2009
Mensajes: 4175
Edad: 51 Ubicación: dos hermanas, sevilla
|
Re: Guardar Una Imagen Concreta De Una Web Con Webview
vuott:
Interesante el ejemplo. Gracias !!!
|
#7 Lunes, 05 Marzo 2018, 20:36 |
|
|
CanihoJR
Ingeniero Programador
Registrado: Septiembre 2009
Mensajes: 269
Edad: 38 Ubicación: San Pedro Alcantara
|
Re: Guardar Una Imagen Concreta De Una Web Con Webview
buenisimo el codigo! peeeero... ese componente es una implementación de curl si no me equivoco, por lo que alfinal es lo mismo, la direccion de la imagen siempre es esa misma, podria hacer un wget y obtengo lo mismo (igualmente el codigo tuyo me parece buenisimo para otros proyectos en mente! no sabia hacerlo asyncrono :D) el problema reside en que esa imagen se genera a partir de un formulario y unas cookies.... existe alguna manera de enviar las cookies del webview al httpclient?? en cuyo caso, generaria la misma...
Por eso intentaba pasarlo a un picture view y de ahí me era mas facil salvarlo........ pero no consigo averiguar por que obtengo una imagen distorsionada de pixeles al azar en lugar de la imagen.... cuando tengo otro codigo antiguo que si funciona y lo copié de ahí
'Compruebo que la web este totalmente cargada
If (Me.WebView1.Progress >= 1) Then
Print "Cargada"
'Compruebo que existe el captcha.
If (Me.WebView1.Document.FindFirst("#adcopy-puzzle-image-image")) Then
Print "Encontrado captcha"
imagen1 = New Image(300, 150)
Paint.Begin(imagen1)
'Selecciono la imagen del html y la pinto en i porque es la salida.
captcha1 = Me.WebView1.Frame.Document.FindFirst("#adcopy-puzzle-image-image")
captcha1.Paint()
picture1 = imagen1.Picture
Me.PictureBox1.Picture = picture1
Endif
Endif
Con ese codigo obtengo la imagen del captcha de solvemedia y lo muestro en un picture box, me funciona sin problemas en el programa antiguo pero no si vuelvo a intentar copiarlo en otros programas......
última edición por CanihoJR el Lunes, 05 Marzo 2018, 22:12; editado 1 vez
|
#8 Lunes, 05 Marzo 2018, 21:55 |
|
|
razaAztk
aztk crux
Analista Programador
Registrado: Enero 2010
Mensajes: 340
Edad: 35 Ubicación: Tenochtitlan
|
Re: Guardar Una Imagen Concreta De Una Web Con Webview
el problema reside en que esa imagen se genera a partir de un formulario y unas cookies.... existe alguna manera de enviar las cookies del webview al httpclient?? en cuyo caso, generaria la misma...
Acerca del uso de cookies con HttpClient tal vez te sirva el sig hilo: https://foro.gambas-es.org/viewtopic.php?f=5&t=5817
Suena interesante lo de usar las mismas cookies, si intentas ese camino nos mantienes informados
Saludos!
|
#9 Lunes, 05 Marzo 2018, 23:40 |
|
|
CanihoJR
Ingeniero Programador
Registrado: Septiembre 2009
Mensajes: 269
Edad: 38 Ubicación: San Pedro Alcantara
|
Re: Guardar Una Imagen Concreta De Una Web Con Webview
Sigo el camino de pasarlo a un picturebox, de hecho he conseguido hacer funcionar el codigo anterior... simplemente cambiando a otra imagen JPG parece ser que el problema de los pixeles se ocasiona en los PNG con transparencia....
Ahi podeis ver (una chapuza) pero en teoria es un logo redondo amarillo, solo que cogi el recorte muy pequeño (32x32) en teoria solo deberia verse lo amarillo, pero tanto en el picturebox como en el imageview me genera esa especie de "ruido" que además va variando segun ejecuto el codigo de nuevo (asociado al boton)... puede ser cosa del .Paint() ???
|
#10 Martes, 06 Marzo 2018, 00:20 |
|
|
|