Lectura de Bytes de una imagen

Gabriel Genellina gagsl-py2 en yahoo.com.ar
Sab Mayo 19 23:34:34 CEST 2007


En Sat, 19 May 2007 14:22:58 -0300, Francisco José Seva Mora  
<franciscojseva en gmail.com> escribió:

> f= open("/Users/.../archivo","r")  // también he probado con lectura  
> binaria
> entrada = f.read()
> w=open("/Users/.../salida","w")
>
> for i in range(len(entrada)):
>      aux = 0xff & ord(entrada[(2*i)+1]) << 8              //opero sobre  
> un
> byte
>      w.write(str(hex(aux)))----------------------------------------------->aquí
> quiero escribier el byte resultado de la operación previa.

El inverso del ord() de arriba es chr(). Pero tal como esta escrito  
SIEMPRE te va a dar 0, porque lo que esta a la derecha del & (al haberle  
hecho el <<8) tiene siempre el byte bajo en 0, y al hacer el & con 0xff te  
da siempre 0.
Ademas entrada[2*i+1], tal como esta escrito, te va a dar un error cuando  
i se pase de la mitad.

Pongo otro ejemplo cualquiera para mostrar como sería el proceso; le hago  
un XOR a todos los bytes:

f = open("...", "rb") # rb es importante
entrada = f.read()
f.close()

w = open("...","wb") # wb es importante
for i in range(len(entrada)):
   aux = chr(ord(entrada[i]) ^ 0xA5)
   w.write(aux)
w.close()

Pero te puede resultar mas comodo trabajar con array  
http://docs.python.org/lib/module-array.html

 from array import array
arr_entrada = array("B", entrada) # B = unsigned char, bytes 0-255
for i in range(len(arr_entrada)):
   arr_entrada[i] ^= 0xA5

w = open("...","wb") # wb es importante
arr_entrada.tofile(w)
w.close()

-- 
Gabriel Genellina

------------ próxima parte ------------
_______________________________________________
Python-es mailing list
Python-es en aditel.org
http://listas.aditel.org/listinfo/python-es


Más información sobre la lista de distribución Python-es