|
Página 2 de 2
|
Cargar Imagen O Texto Desde Fichero Zip Directamente
Autor |
Mensaje |
vuott
Analista Programador
Registrado: Agosto 2013
Mensajes: 2086
Edad: 60 Ubicación:
|
Re: Cargar Imagen O Texto Desde Fichero Zip Directamente
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):
última edición por vuott el Viernes, 13 Noviembre 2015, 01:49; editado 6 veces
|
#11 Jueves, 12 Noviembre 2015, 01:41 |
|
|
tincho
Analista Programador
Registrado: Noviembre 2014
Mensajes: 2565
Edad: 48 Ubicación:
|
Re: Cargar Imagen O Texto Desde Fichero Zip Directamente
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.
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.
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 |
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 |
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 |
|
#12 Viernes, 13 Noviembre 2015, 00:14 |
|
|
jsbsan
Analista Programador
Registrado: Septiembre 2009
Mensajes: 4175
Edad: 51 Ubicación: dos hermanas, sevilla
|
Re: Cargar Imagen O Texto Desde Fichero Zip Directamente
vuott:
Guauuu.... que código más misterioso !!!
|
#13 Viernes, 13 Noviembre 2015, 08:15 |
|
|
jguardon
Administrador
Registrado: Septiembre 2009
Mensajes: 2708
Edad: 57 Ubicación: Granada
|
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"
|
#14 Viernes, 13 Noviembre 2015, 16:15 |
|
|
codificador
Analista Programador
Registrado: Junio 2010
Mensajes: 420
Edad: 114 Ubicación:
|
Re: Cargar Imagen O Texto Desde Fichero Zip Directamente
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
|
#15 Viernes, 13 Noviembre 2015, 19:09 |
|
|
vuott
Analista Programador
Registrado: Agosto 2013
Mensajes: 2086
Edad: 60 Ubicación:
|
Re: Cargar Imagen O Texto Desde Fichero Zip Directamente
última edición por vuott el Martes, 17 Noviembre 2015, 21:59; editado 1 vez
|
#16 Domingo, 15 Noviembre 2015, 16:28 |
|
|
vuott
Analista Programador
Registrado: Agosto 2013
Mensajes: 2086
Edad: 60 Ubicación:
|
Re: Cargar Imagen O Texto Desde Fichero Zip Directamente
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
|
#17 Martes, 17 Noviembre 2015, 21:57 |
|
|
|
Temas parecidos
Temas parecidos
|
Página 2 de 2
|
Usuarios navegando en este tema: 0 registrados, 0 ocultos y 1 invitado Usuarios registrados conectados: Ninguno
|
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
|
|
|
|
|