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