En realidad, podría cargar el archivo en una cadena y buscar esa cadena para la secuencia de bytes 0xffc0
utilizando el método str.find()
. Funciona para cualquier secuencia de bytes.
El código para hacer esto depende de un par de cosas. Si abre el archivo en modo binario y está utilizando Python 3 (probablemente ambas mejores prácticas para este escenario), necesitará buscar una cadena de bytes (en lugar de una cadena de caracteres), lo que significa que tiene que ponerle un prefijo a la cadena con b
.
with open(filename, 'rb') as f:
s = f.read()
s.find(b'\xff\xc0')
Si abre el archivo en modo de texto en Python 3, habría que buscar una cadena de caracteres:
with open(filename, 'r') as f:
s = f.read()
s.find('\xff\xc0')
aunque no hay ninguna razón especial para hacer esto. No obtiene ninguna ventaja sobre la forma anterior, y si se encuentra en una plataforma que trata los archivos binarios y los archivos de texto de manera diferente (por ejemplo, Windows), existe la posibilidad de que esto cause problemas.
Python 2 no hace la distinción entre cadenas de caracteres y cadenas de caracteres, por lo que si está utilizando esa versión, no importa si incluye o excluye el b
en b'\xff\xc0'
. Y si su plataforma trata los archivos binarios y los archivos de texto de manera idéntica (por ejemplo, Mac o Linux), no importa si usa 'r'
o 'rb'
como el modo de archivo. Pero aún recomendaría utilizar algo así como el primer ejemplo de código anterior solo para la compatibilidad con versiones anteriores: en caso de que alguna vez cambie a Python 3, es una cosa menos para solucionar.
¿Alguna vez has mirado en imagick? IIRC también hay una biblioteca de pitones para ello. – txwikinger
Tengo, y funciona muy bien, pero es bastante pesado solo para encontrar las dimensiones del archivo. – Parand
debe usar un módulo apropiado para algo como esto http://snippets.dzone.com/posts/show/1021 –