Portal    Foro    Buscar    FAQ    Registrarse    Conectarse


Publicar nuevo tema  Responder al tema 
Página 2 de 2
Ir a la página Anterior  1, 2
 
Cargar Imagen O Texto Desde Fichero Zip Directamente
Autor Mensaje
Responder citando   Descargar mensaje  
Mensaje Re: Cargar Imagen O Texto Desde Fichero Zip Directamente 
 
tincho escribió: [Ver mensaje]
si renombras el .odt como zip y lo abres con el gestor de archivos comprimidos, veras que hay una carpeta /Thumbnails y dentro de esta esta la imagen png


No es necesario renombrar el archivo .odt como .zip, para ver la carpeta /Thumbnails: con tal de hacer click con el botón derecho del mouse y eligir el gestor de archivos comprimidos (".ODT file is XML in a ZIP wrapper").

Bueno, propondria este codigo solo con recursos Gambas (se necesita poner un objecto PictureBox sobre el Form):
Public Sub Form_Open()

  Dim fl As File
  Dim i, sp As Integer
  Dim bb As Byte[]
  Dim s As String
  
    fl = Open "/tmp/kvm.odt" For Read
    
    Seek #fl, 99
    Read #fl, i

    Read #fl, sp
    Seek #fl, Seek(fl) + sp

    With bb = New Byte[i]
      .Read(fl, 0, i)
      s = .ToString(0, i)
    End With

    fl.Close

    File.Save("/tmp/image.png", s)

    PictureBox1.Picture = Picture.Load("/tmp/image.png")

End

 



 
última edición por vuott el Viernes, 13 Noviembre 2015, 01:49; editado 6 veces 
vuott - Ver perfil del usuarioEnviar mensaje privado 
Volver arribaPágina inferior
Responder citando   Descargar mensaje  
Mensaje Re: Cargar Imagen O Texto Desde Fichero Zip Directamente 
 
vuott escribió: [Ver mensaje]
No es necesario renombrar el archivo .odt como .zip

Si es verdad, no hace falta renombrarlo como zip, pero a mi me daba error con engrampa de MATE, en la terminal no, ahí funcionaba bien.
 error_engrampa
vuott escribió: [Ver mensaje]
Bueno, propondria este codigo solo con recursos Gambas

Probé el código y es rapidísimo, y funciona a la perfección. la imagen cambia instantáneamente en el control, no como antes que tardaba un poco en cargarla.

Este programa que estoy haciendo que se llama "destornishador", y servirá para hacer cosas con los archivos que tienen meta datos. Si hay algo por ahí parecido que haga lo mismo avisen.
Subo el código de como esta ahora, a medida que vaya madurando iré subiendo los cambios.

Grazie mille vuott.

destornishador.zip
Descripción: Destornishador, programa utilitario que usa los meta datos, un frontend de exiftool, imagemagick etc. 
Descargar
Nombre del archivo: destornishador.zip
Tamaño: 64.58 KB
Descargado: 34 veces
destornishador.zip
Descripción: Destornishador, programa utilitario que usa los meta datos, un frontend de exiftool, imagemagick etc. 
Descargar
Nombre del archivo: destornishador.zip
Tamaño: 64.58 KB
Descargado: 34 veces
destornishador.zip
Descripción: Destornishador, programa utilitario que usa los meta datos, un frontend de exiftool, imagemagick etc. 
Descargar
Nombre del archivo: destornishador.zip
Tamaño: 64.58 KB
Descargado: 34 veces

 



 
tincho - Ver perfil del usuarioEnviar mensaje privado 
Volver arribaPágina inferior
Responder citando   Descargar mensaje  
Mensaje Re: Cargar Imagen O Texto Desde Fichero Zip Directamente 
 
vuott:
....
Seek #fl, 99
Read #fl, i

Read #fl, sp
Seek #fl, Seek(fl) + sp

With bb = New Byte[i]
.Read(fl, 0, i)
s = .ToString(0, i)
End With
.....
 

Guauuu.... que código más misterioso !!!
 




===================
Blog personal
Web: SoloGambas seleccion de articulos dedicados a Gambas
Visita el Curso de Gambas3 ¡¡¡Gratuito!!!
 
jsbsan - Ver perfil del usuarioEnviar mensaje privadoVisitar sitio web del usuario 
Volver arribaPágina inferior
Responder citando   Descargar mensaje  
Mensaje Re: Cargar Imagen O Texto Desde Fichero Zip Directamente 
 
Supongo que eso funciona porque la imagen no está comprimida dentro del fichero comprimido resultante y ojeando los datos con un editor hexadecimal se ha localizado la cabecera de la imagen.

En este caso, esto sólo funcionará con el archivo proporcionado, pero no con otros, a menos que la rutina busque explícitamente las cabeceras de imágenes y éstas no se hayan comprimido junto al resto de datos.

Los algoritmos de compresión no siempre disponen los datos en el orden esperado ya que se comparten datos comunes direccionados por índices para ahorrar espacio, por eso resulta lógico obtener una compresión. La mayoría de las imágenes ya están comprimidas, por eso puede resultar fácil localizarla intacta dentro del batiburrillo de datos comprimidos, como un array de bytes. Pero no siempre es así...

Buen punto, vuott. +1

Saludos
 




===================
Jesús Guardón

Por favor, usemos el corrector ortográfico antes de pulsar el botón "Enviar".

"uo ǝs ʇɐu pıɟıɔıן ɐdɹǝupǝɹ ɐ dɹoƃɹɐɯɐɹ, soןo ɥɐʎ bnǝ dɹodouǝɹsǝןo"
 
jguardon - Ver perfil del usuarioEnviar mensaje privado 
Volver arribaPágina inferior
Responder citando   Descargar mensaje  
Mensaje Re: Cargar Imagen O Texto Desde Fichero Zip Directamente 
 
File.Save("/tmp/image.png", s)

    PictureBox1.Picture = Picture.Load("/tmp/image.png")

en el basic del otro lado no  es necesario pasar por los archivos

 ahora no recuerdo el codigo y tampoco lo tengo  
como para mostrar el codigo y ver si existe algo similar en gambas
 



 
codificador - Ver perfil del usuarioEnviar mensaje privado 
Volver arribaPágina inferior
Responder citando   Descargar mensaje  
Mensaje Re: Cargar Imagen O Texto Desde Fichero Zip Directamente 
 

 



 
última edición por vuott el Martes, 17 Noviembre 2015, 21:59; editado 1 vez 
vuott - Ver perfil del usuarioEnviar mensaje privado 
Volver arribaPágina inferior
Responder citando   Descargar mensaje  
Mensaje Re: Cargar Imagen O Texto Desde Fichero Zip Directamente 
 
codificador escribió: [Ver mensaje]
en el basic del otro lado no  es necesario pasar por los archivos
 ahora no recuerdo el codigo y tampoco lo tengo  
como para mostrar el codigo y ver si existe algo similar en gambas


Quizás...  he solucionado el problema, utilizando las funciones externas del API de libgdk_pixbuf:

Library "libgdk_pixbuf-2.0:0.3000.7"

' GdkPixbufLoader * gdk_pixbuf_loader_new(void)
' Creates a new pixbuf loader object.
Private Extern gdk_pixbuf_loader_new() As Pointer

' gboolean gdk_pixbuf_loader_write (GdkPixbufLoader *loader, const guchar *buf, gsize count, GError **error)
' Causes a pixbuf loader to parse the next count bytes of an image.
Private Extern gdk_pixbuf_loader_write(loader As Pointer, buf As Pointer, count As Integer, Gerror As Pointer)

' gboolean gdk_pixbuf_loader_close (GdkPixbufLoader *loader, GError **error)
' Informs a pixbuf loader that no further writes.
Private Extern gdk_pixbuf_loader_close(loader As Pointer, Gerror As Pointer)

' GdkPixbuf * gdk_pixbuf_loader_get_pixbuf (GdkPixbufLoader *loader)
' Queries the GdkPixbuf that a pixbuf loader is currently creating.
Private Extern gdk_pixbuf_loader_get_pixbuf(loader As Pointer) As Pointer

' int gdk_pixbuf_get_width (const GdkPixbuf *pixbuf)
' Queries the width of a pixbuf.
Private Extern gdk_pixbuf_get_width(pixbuf As Pointer) As Integer

' int gdk_pixbuf_get_height (const GdkPixbuf *pixbuf)
' Queries the height of a pixbuf.
Private Extern gdk_pixbuf_get_height(pixbuf As Pointer) As Integer

' int gdk_pixbuf_get_n_channels (const GdkPixbuf *pixbuf)
' Queries the number of channels of a pixbuf.
Private Extern gdk_pixbuf_get_n_channels(pixbuf As Pointer) As Integer

' gboolean gdk_pixbuf_get_has_alpha (const GdkPixbuf *pixbuf)
' Queries whether a pixbuf has an alpha channel (opacity information).
Private Extern gdk_pixbuf_get_has_alpha(pixbuf As Pointer) As Boolean

' guchar * gdk_pixbuf_get_pixels (const GdkPixbuf *pixbuf)
' Queries a pointer to the pixel data of a pixbuf.
Private Extern gdk_pixbuf_get_pixels(pixbuf As Pointer) As Pointer


Public Sub Form_Open()

  Dim lo, pb, dati As Pointer
  Dim fl As File
  Dim i, sp, w, h, c, bo, whc As Integer
  Dim bb, cc As Byte[]
  Dim st As Stream
  Dim immago As Image
  
   fl = Open "/tmp/kvm.odt" For Read
    
   Seek #fl, 99
   Read #fl, i
    
   Read #fl, sp
   Seek #fl, Seek(fl) + sp
    
   With bb = New Byte[i]
     .Read(fl, 0, i)
   End With
    
   fl.Close
  
   lo = gdk_pixbuf_loader_new()
  
   gdk_pixbuf_loader_write(lo, bb.data, bb.count, 0)

   gdk_pixbuf_loader_close(lo, 0)

   pb = gdk_pixbuf_loader_get_pixbuf(lo)

   w = gdk_pixbuf_get_width(pb)
   Print "Latitudo: "; Null, w; " pixel"
   h = gdk_pixbuf_get_height(pb)
   Print "Altitudo: "; Null, h; " pixel"
   c = gdk_pixbuf_get_n_channels(pb)
   Print "Canales: "; Null, c
   bo = gdk_pixbuf_get_has_alpha(pb)
   Print "Canal Alpha: "; Null, CBool(bo)

   dati = gdk_pixbuf_get_pixels(pb)
  
   whc = w * h * c

   st = Memory dati For Read
   With bb = New Byte[whc]
     .Read(st, 0, .Count)
   End With
   st.Close
  
   For i = w * c To whc - 1 Step w * c
     bb.Remove(i, 1)
   Next

   cc = New Byte[bb.Count]
   For i = 0 To cc.Count - 1 Step 3
     cc[i + 2] = bb[i]
     cc[i + 1] = bb[i + 1]
     cc[i] = bb[i + 2]
   Next

   For i = 3 To w * h * 4.023 Step 4
     cc.Add(&FF, i)
   Next

   With immago = New Image(w, h, 0, 0)
     st = Memory .Data For Write
   End With
   cc.Write(st, 0, cc.Count)
   st.Close
  
    With PictureBox1
     .X = 10
     .Y = 10
     .W = w
     .H = h
     .Picture = immago.Picture
   End With

End

 



 
última edición por vuott el Martes, 17 Noviembre 2015, 22:20; editado 3 veces 
vuott - Ver perfil del usuarioEnviar mensaje privado 
Volver arribaPágina inferior
Mostrar mensajes anteriores:    
 
OcultarTemas parecidos
Tema Autor Foro Respuestas último mensaje
No hay nuevos mensajes Cargar Imagen URL En PictureBox Cubel General 2 Jueves, 18 Noviembre 2010, 09:25 Ver último mensaje
Cubel
No hay nuevos mensajes Cargar Una Imagen Aleatoria En PictureBox miguedrive Controles/Librerías/Componentes 1 Martes, 12 Julio 2011, 23:25 Ver último mensaje
jsbsan
No hay nuevos mensajes Extraer Información Y TAG Desde Un Ficher... vuott Aplicaciones/Fragmentos de Código 1 Jueves, 11 Septiembre 2014, 13:00 Ver último mensaje
v3ctor
No hay nuevos mensajes Como Cargar Imagen De Un Proyecto En Un Html? v3ctor General 1 Viernes, 10 Julio 2015, 17:25 Ver último mensaje
vuott
 

Publicar nuevo tema  Responder al tema  Página 2 de 2
Ir a la página Anterior  1, 2

Usuarios navegando en este tema: 0 registrados, 0 ocultos y 1 invitado
Usuarios registrados conectados: Ninguno


 
Lista de permisos
No puede crear mensajes
No puede responder temas
No puede editar sus mensajes
No puede borrar sus mensajes
No puede votar en encuestas
No puede adjuntar archivos
Puede descargar archivos
No puede publicar eventos en el calendario



  

 

cron