Foros del Web » Programando para Internet » Python »

Abrir un archivo Fantasma

Estas en el tema de Abrir un archivo Fantasma en el foro de Python en Foros del Web. Hola... ! Quiero que mi codigo abra una imagen, pero no quiero que esa imagen esté en ninguna carpeta para que no se pueda abrir ...
  #1 (permalink)  
Antiguo 23/06/2010, 06:30
Avatar de Bosc  
Fecha de Ingreso: marzo-2010
Mensajes: 43
Antigüedad: 14 años, 1 mes
Puntos: 3
Abrir un archivo Fantasma

Hola... !

Quiero que mi codigo abra una imagen, pero no quiero que esa imagen esté en ninguna carpeta para que no se pueda abrir desde fuera del programa.

¿ Alguna idea de como hacer esto ? ?

Habia pensado:
- Leer la foto en modo binario.
- Usar Pickle para crear un archivo nuevo con esos datos.

Ahora tengo los datos en una variable, ¿ Se puede ejecutar de alguna manera esa variable para que se abra como una imagen ? Lo unico que se me ocurre es crear un archivo en una carpeta temporal justo en el momento que quiera abrir la foto y cuando la quiera cerrar que se elimine el archivo.

Otra manera, pero sigue el mismo patrón:

- Leo los datos binarios de la foto, los codifico en XOR por ejemplo, y los guardo en un archivo nuevo que sera el que utilizare. Cuando quiera abrir la foto: leo el archivo XOR, lo descodifico y ... el mismo problema, como lo ejecuto ???

Me he quedado estancado aqui y alomejor se os ocurren otras ideas mejor de como hacer esto.....

Gracias por vuestras ideas
  #2 (permalink)  
Antiguo 23/06/2010, 09:33
AlvaroG
Invitado
 
Mensajes: n/a
Puntos:
Respuesta: Abrir un archivo Fantasma

¿cuál es la idea detrás de esto? ¿por qué necesitas que el archivo no pueda verse?


Saludos.
  #3 (permalink)  
Antiguo 23/06/2010, 10:06
Avatar de dmassive  
Fecha de Ingreso: febrero-2002
Ubicación: Paraná - Entre Ríos - Argentina
Mensajes: 279
Antigüedad: 22 años, 2 meses
Puntos: 7
Respuesta: Abrir un archivo Fantasma

El lo quiere es contener en una variable, una imagen. Pero sin tener que cargarla en tiempo de ejecucion.

Por ejemplo algo asi:
http://www.velocityreviews.com/forum...as-string.html

Código -:
Ver original
  1. MiVariable = "data:image/gif;base64,R0lGODdhMAAwAPAAAAAAAP///ywAAAAAMAAw
  2. AAAC8IyPqcvt3wCcDkiLc7C0qwyGHhSWpjQu5yqmCYsapyuvUU lvONmOZtfzgFz
  3. ByTB10QgxOR0TqBQejhRNzOfkVJ+5YiUqrXF5Y5lKh/DeuNcP5yLWGsEbtLiOSp
  4. a/TPg7JpJHxyendzWTBfX0cxOnKPjgBzi4diinWGdkF8kjdfnycQ ZXZeYGejmJl
  5. ZeGl9i2icVqaNVailT6F5iJ90m6mvuTS4OK05M0vDk0Q4XUtwv KOzrcd3iq9uis
  6. F81M1OIcR7lEewwcLp7tuNNkM3uNna3F2JQFo97Vriy/Xl4/f1cf5VWzXyym7PH
  7. hhx4dbgYKAAA7"

Yo lo hice en una epoca en Delphi, pero estaria bueno poder hacerlo en Python
__________________
Blümchen... einfach die rave Prinzessin
http://www.dmassive.com.ar/
  #4 (permalink)  
Antiguo 23/06/2010, 10:10
AlvaroG
Invitado
 
Mensajes: n/a
Puntos:
Respuesta: Abrir un archivo Fantasma

Si, eso me quedó claro. Pero pensé que hay también un requisito de seguridad involucrado, y eso era lo que quería saber.

A fijarse en las funciones de pygame (en caso de que sea ese el módulo usado):
http://www.pygame.org/docs/ref/image.html

También vale la pena ver el módulo tempfile.

Sin más datos (por ejemplo, cómo se muestra la imagen en pantalla) es imposible ayudar mejor.


Saludos.

Última edición por AlvaroG; 23/06/2010 a las 10:18
  #5 (permalink)  
Antiguo 24/06/2010, 04:32
Avatar de Bosc  
Fecha de Ingreso: marzo-2010
Mensajes: 43
Antigüedad: 14 años, 1 mes
Puntos: 3
Respuesta: Abrir un archivo Fantasma

Dmassive esa variable con los datos de la imagen se podria abrir sin necesidad de almacenarla en disco? Yo he leido mi imagen en modo binario, y tengo algo parecido a tu variable, pero veo que en la tuya hay unos datos 'extras' : ''data:image/gif'' al principio, parece que son instrucciones al codigo de como debe abrir o ejecutar esa variable

AlvaroG
no utilizo pygame, he mirado tu enlace pero no es lo que necestio.
El modulo tempfile si que me parece una buena opción.
A que te refieres con '' requisito de seguridad involucrado '' esplicamelo porfavor.
La imagen se tendria que mostrar en pantalla = que cualquier imagen que tengamos en el disco duro y que le hagamos doble clic.
  #6 (permalink)  
Antiguo 24/06/2010, 08:02
Avatar de dmassive  
Fecha de Ingreso: febrero-2002
Ubicación: Paraná - Entre Ríos - Argentina
Mensajes: 279
Antigüedad: 22 años, 2 meses
Puntos: 7
Respuesta: Abrir un archivo Fantasma

Si. La idea es esa, colocar los recursos dentro de tu aplicacion. No se como sera en Python porque no lo probe. Pero en Delphi, supongamos, creabas un objeto TPicture y su contenido binario lo incorporabas desde esa varible. Y no esto no es solo para imagen, lo podes hacer con cualquier cosa, por ejemplo, archivos de sonido wav.
__________________
Blümchen... einfach die rave Prinzessin
http://www.dmassive.com.ar/
  #7 (permalink)  
Antiguo 25/06/2010, 08:29
Avatar de Bosc  
Fecha de Ingreso: marzo-2010
Mensajes: 43
Antigüedad: 14 años, 1 mes
Puntos: 3
Respuesta: Abrir un archivo Fantasma

Pues si estaria muy bien saber como se hace con Python, porque yo creo que se tiene que poder.... ¿ no ?
  #8 (permalink)  
Antiguo 25/06/2010, 10:26
AlvaroG
Invitado
 
Mensajes: n/a
Puntos:
Respuesta: Abrir un archivo Fantasma

Cita:
Iniciado por Bosc Ver Mensaje
A que te refieres con '' requisito de seguridad involucrado '' esplicamelo porfavor.
Simple, no has explicado por qué la imagen no debe verse. Si es por comodidad, un archivo temporal que se borre al finalizar el programa es suficiente. Si realmente existe un motivo por el cual la imagen no deba poder extraerse, lo primero que iba a contestar es algo así como "no se puede, a menos que puedas bloquear cosas como la captura de pantalla"

Por otro lado, decís que no usás pygame. Bien, pero ¿qué usás entonces? porque alguna biblioteca externa tendrás que usar para mostrar la imagen. Dependiendo de cuál sea puede haber un método más sencillo y específico.


Saludos.
  #9 (permalink)  
Antiguo 25/06/2010, 12:10
Avatar de Bosc  
Fecha de Ingreso: marzo-2010
Mensajes: 43
Antigüedad: 14 años, 1 mes
Puntos: 3
Respuesta: Abrir un archivo Fantasma

Mira, aver si me esplico mejor:

Tengo un codigo que voy a exportar en formato exe, el codigo es muy sencillo, correrá en consola:

Código Python:
Ver original
  1. import os
  2. def bucle():
  3.     print 'Solo si sabes la clave me veras'
  4.     clave = raw_input (' Introduce la clave: ')
  5.     if clave == '1234':
  6.         os.popen('ImagenOculta.png')
  7.         print 'Good Bye'
  8.     else:
  9.         bucle()
  10. bucle()

Asi que la una función de este codigo es mostrar una imagen pero solo si el usuario conoce la clave. El problema es que con el .exe tambien tengo que distribuir el .png para que el codigo funcione, pero entonces, aunque no sepas la clave, vas a la carpeta abres la imagen directamente y entonces el programa no tiene ningun sentido. No importa que una vez que sepas la clave puedas Imprimir Pantalla y capturar la imagen, lo importante es que no halla forma de abrirla antes.

Como dije, tempfile creo que puede ser una opcion. Pero vuelvo a preguntar si conoceis otras formulas.
  #10 (permalink)  
Antiguo 25/06/2010, 15:01
AlvaroG
Invitado
 
Mensajes: n/a
Puntos:
Respuesta: Abrir un archivo Fantasma

ya, pero no podés simplemente hacer un 'popen(imagen)'. Tus opciones son
1) mostrarla desde el programa mismo (con pygame por ejemplo)
2) copiarla del EXE a alguna carpeta y mostrarla con el visor que el sistema tenga predeterminado.

En el caso 1, la opción de pygame.image sirve (creo) bastante bien.
En el caso 2, también pygame te sirve para almacenar la imagen en tu programa, usando la opción tostring(), y luego guardarla a una carpeta temporal de donde la podrás recoger con el tempfile.

Sin saber exactamente cómo lo usarías, quizás te sirva lo siguiente
http://docs.python.org/library/struct.html <- módulo struct
http://docs.python.org/library/base64.html <- módulo base64, la codificación que usa dmassive en su mensaje.


Saludos.
  #11 (permalink)  
Antiguo 27/06/2010, 03:54
Avatar de Bosc  
Fecha de Ingreso: marzo-2010
Mensajes: 43
Antigüedad: 14 años, 1 mes
Puntos: 3
Respuesta: Abrir un archivo Fantasma

Ok, y que me dices de esto:
Código Python:
Ver original
  1. def getSmallUpArrowData():
  2.     return\
  3. '\x89PNG\r\n\x1a\n\x00\x00\x00\rIHDR\x00\x00\x00\x10\x00\x00\x00\x10\x08\x06\
  4.   \x00\x00\x00\x1f\xf3\xffa\x00\x00\x00\x04sBIT\x08\x08\x08\x08|\x08d\x88\x00\
  5.   \x00\x00<IDAT8\x8dcddbf\xa0\x040Q\xa4{h\x18\xf0\xff\xdf\xdf\xffd\x1b\x00\xd3\
  6.   \x8c\xcf\x10\x9c\x06\xa0k\xc2e\x08m\xc2\x00\x97m\xd8\xc41\x0c \x14h\xe8\xf2\
  7.   \x8c\xa3)q\x10\x18\x00\x00R\xd8#\xec\xb2\xcd\xc1Y\x00\x00\x00\x00IEND\xaeB`\
  8.   \x82'

Utilizando la libreria wxPython, el codigo está sacado de aqui .Lo estoy estudiando pero pareceque las funciones del principio sirven para mostrar una imagen que se guarda en una variable ???
  #12 (permalink)  
Antiguo 27/06/2010, 11:14
AlvaroG
Invitado
 
Mensajes: n/a
Puntos:
Respuesta: Abrir un archivo Fantasma

Pues así parece, no tenía conocimiento de esa opción.
Ese código tiene la imagen guardada en una variable, la convierte primero a una imagen (ImageFromStream) y luego a un bitmap (BitmapFromImage) para mostrarla. Comentanos luego si te sirve :)


Saludos.
  #13 (permalink)  
Antiguo 28/06/2010, 04:49
Avatar de Bosc  
Fecha de Ingreso: marzo-2010
Mensajes: 43
Antigüedad: 14 años, 1 mes
Puntos: 3
Respuesta: Abrir un archivo Fantasma

Bueno pues con wxPython al final me ha salido asi:

Código Python:
Ver original
  1. import wx,cStringIO,base64
  2.  
  3. b64_jpg = \
  4. """/9j/4AAQSkZJRgABAQEAYABgAAD/4QBoRXhpZgAASUkqAAgAAAAEABoBBQABAAAAPgAAABsBBQAB
  5. AAAARgAAACgBAwABAAAAAgAAADEBAgARAAAATgAAAAAAAABgAAAAAQAAAGAAAAABAAAAQm9zYyBQ
  6. eXRob24gSi5MLgD//9sAQwAXEBEUEQ4XFBIUGhgXGyI5JSIfHyJGMjUpOVJIV1VRSFBOW2aDb1th
  7. fGJOUHKbc3yHi5KUklhtoKyfjqqDj5KN/9sAQwEYGhoiHiJDJSVDjV5QXo2NjY2NjY2NjY2NjY2N
  8. jY2NjY2NjY2NjY2NjY2NjY2NjY2NjY2NjY2NjY2NjY2NjY2N/8AAEQgATgBNAwEiAAIRAQMRAf/E
  9. AB8AAAEFAQEBAQEBAAAAAAAAAAABAgMEBQYHCAkKC//EALUQAAIBAwMCBAMFBQQEAAABfQECAwAE
  10. EQUSITFBBhNRYQcicRQygZGhCCNCscEVUtHwJDNicoIJChYXGBkaJSYnKCkqNDU2Nzg5OkNERUZH
  11. SElKU1RVVldYWVpjZGVmZ2hpanN0dXZ3eHl6g4SFhoeIiYqSk5SVlpeYmZqio6Slpqeoqaqys7S1
  12. tre4ubrCw8TFxsfIycrS09TV1tfY2drh4uPk5ebn6Onq8fLz9PX29/j5+v/EAB8BAAMBAQEBAQEB
  13. AQEAAAAAAAABAgMEBQYHCAkKC//EALURAAIBAgQEAwQHBQQEAAECdwABAgMRBAUhMQYSQVEHYXET
  14. IjKBCBRCkaGxwQkjM1LwFWJy0QoWJDThJfEXGBkaJicoKSo1Njc4OTpDREVGR0hJSlNUVVZXWFla
  15. Y2RlZmdoaWpzdHV2d3h5eoKDhIWGh4iJipKTlJWWl5iZmqKjpKWmp6ipqrKztLW2t7i5usLDxMXG
  16. x8jJytLT1NXW19jZ2uLj5OXm5+jp6vLz9PX29/j5+v/aAAwDAQACEQMRAD8A6JO9VrfUYrhI32SR
  17. pKdqM4GGPPHBPoetWk71hWW6PSbS4m2vbxOW2BfmB3EA+/J6cVyU4+6aN6m9RVC1Rbqe6a5QOyTb
  18. EVuQoAGCPTrmoI4ri4h4xKkE7qI5G4lXoMn296rlFc1qKzJLlWsY1tozCv2gQyqML5fPPT+nrWhF
  19. BFCWMUSIW+8VUDP1pco7j6KWilYBKKWiiwDRwCTVaKxtIgqorbVOQpdioOc9CcVZbhCT0qIOGOAe
  20. a2hHQlvUJIYHcyMCG7srFc49cdagN1p+PJEqoEGAEJXH4inXjKts5ZS3HCjua5abzZp3Cps9cVfK
  21. hXOtjNq8BjTY0bZyvXOeuafGIohhSfxJJ/WuRittQsJYpyDzzt9veunglE8CyqCAw6GjlQXLXmJ6
  22. /pTqrYq1UuIXEopaKXKO4xxmMjpWfLcLbOTJlQOpA4ArRf7hrM1Owa8TMUm1wMYPRvrWiViSx5sd
  23. xbF4mEqkcbT1rN0oQwtLGWPm5OUI+Zf8jFcxeWl3YPieNkyeCDwfxqfSLpYbsCU5D4G7PT8aYHTX
  24. JWSPbvY+WM4I5PtV23Ty7eNCSSFA5rkdU1WSeULFOzIp+mcfStCx8TIRsvI9mOjpyPxFAHQ1ZrFt
  25. dcsrp9iuyN6OuP1raoAKKKKAGSnEZNZ73zjIjtZHI7dM1pMMjmm4AGcACgDC1yZpNBdpYTGxZRtP
  26. OOa5GNN7bc49TW34g1o3Upt7YjyEPUD75/wrFMuQ2FwW60AKkDyTrFGCzOcL710UXhRdg825bd32
  27. rwKzfDc8cesR+aoO8FVJ7Men+H413FAHPQ+G2ty5juAxPTcmP610tR1JQAUUUUAB6VDdQ/aLWWHO
  28. PMQrn0yKmooA5az8Jt5qyXky7QcmNRnI+tas+gabLD5YtgnGAycEf4/jWpRQBwd5ot9ZXu2CGaVV
  29. IZJEjJ/l3rtLbzmtozOuJSo3getWKKAI8H0NSUUUAFFFFAH/2Q==
  30. """
  31.  
  32. jpg_ = base64.b64decode(b64_jpg)
  33.  
  34. class jpg(wx.Frame):
  35.     def _init_ctrls(self, parent):
  36.        
  37.         wx.Frame.__init__(self, id=-1, name='', parent=parent,pos=(472, 231), size=(100,150))
  38.                        
  39.  
  40.     def __init__(self, parent):
  41.         self._init_ctrls(parent)
  42.         stream1 = cStringIO.StringIO(jpg_)        
  43.         foto = wx.BitmapFromImage(wx.ImageFromStream(stream1))        
  44.         wx.StaticBitmap(self, -1,foto)
  45.  
  46.  
  47. if __name__ == '__main__':
  48.     app = wx.PySimpleApp()
  49.     frame = jpg(None)
  50.     frame.Show()
  51.  
  52.     app.MainLoop()

Funciona ! El codigo muestra una imagen que no existe en disco.

Última edición por Bosc; 29/06/2010 a las 14:34
  #14 (permalink)  
Antiguo 28/06/2010, 13:19
 
Fecha de Ingreso: abril-2008
Mensajes: 68
Antigüedad: 16 años
Puntos: 0
Respuesta: Abrir un archivo Fantasma

Con este codigo te muestra un ejemplo de como pasar una imagen del disco a strem

Código:
import  cStringIO
import  wx

class TestPanel(wx.Panel):
    def __init__(self, parent, log):
        wx.Panel.__init__(self, parent, -1)

        data = open('bitmaps/image.png', "rb").read()
        stream = cStringIO.StringIO(data)

        bmp = wx.BitmapFromImage( wx.ImageFromStream( stream ))
        wx.StaticText(
            self, -1, "This image was loaded from a Python file-like object:", 
            (15, 15)
            )

        wx.StaticBitmap(self, -1, bmp, (15, 45))#, (bmp.GetWidth(), bmp.GetHeight()))
Esto es parte del paquete de demostracion de wxPython.
Wxpython demo Descargar
  #15 (permalink)  
Antiguo 13/07/2010, 09:27
Avatar de dmassive  
Fecha de Ingreso: febrero-2002
Ubicación: Paraná - Entre Ríos - Argentina
Mensajes: 279
Antigüedad: 22 años, 2 meses
Puntos: 7
De acuerdo Respuesta: Abrir un archivo Fantasma

Por si les sirve, esta utilidad web convierte una Imagen a Base64...

Daily Coding Online Image to Base64 Converter:
http://www.dailycoding.com/Utils/Con...eToBase64.aspx
__________________
Blümchen... einfach die rave Prinzessin
http://www.dmassive.com.ar/

Etiquetas: Ninguno
Atención: Estás leyendo un tema que no tiene actividad desde hace más de 6 MESES, te recomendamos abrir un Nuevo tema en lugar de responder al actual.
Respuesta

SíEste tema le ha gustado a 3 personas




La zona horaria es GMT -6. Ahora son las 11:41.