Si sólo está abriendo el archivo para mostrar los bytes, y no es necesario manipularlo como una imagen, entonces se trata de un simple proceso de abrir el archivo como cualquier otro, leyendo X cantidad de bytes, luego iterando sobre ellos. Algo como:
File.open('path/to/image.file', 'rb') do |fi|
byte_block = fi.read(1024)
byte_block.each_byte do |b|
puts b.asc
end
end
Eso meramente dará como resultado bytes como decimal. Querrá ver los valores de byte y crear valores RGB para determinar los colores, por lo que quizás usar each_slice(3)
y leer en múltiplos de 3 bytes ayude.
Varios formatos de imagen contienen diferentes encabezados y bloques de seguimiento utilizados para almacenar información sobre la imagen, formato de datos e información EXIF para el dispositivo de captura, dependiendo del tipo. Probablemente ir con algo que no esté comprimido sería bueno si vas a leer un archivo y enviar los bytes directamente, como TIFF sin comprimir. Una vez que haya decidido que puede saltar al archivo para saltear encabezados si lo desea, o simplemente leer los también para ver o aprender lo que hay en ellos. La página de Wikipedia Image file formats es un buen lugar para más información sobre los diversos formatos disponibles.
Si solo quiere ver los datos de la imagen, una de las bibliotecas de alto nivel lo ayudará ya que tienen interfaces para captar determinadas secciones de la imagen. Pero, en realidad, acceder a los bytes no es difícil, ni es para saltar.
Si desea obtener más información sobre el bloque EXIF, se utiliza para describir muchos formatos Jpeg y TIFF de diferentes proveedores ExifTool puede ser útil. Está escrito en Perl para que pueda ver cómo funciona el código. Los documentos muestran muy bien los bloques y campos del encabezado, y usted puede leer/escribir valores usando la aplicación.
Estoy en el proceso de probar un nuevo enrutador, así que no he tenido la oportunidad de probar ese código, pero debe estar cerca. Lo verificaré un poco y actualizaré la respuesta si eso no funcionó.
Simplemente curioso; ¿Cómo es el rendimiento de Rmagick en este caso? Trabajo en un motor de juego como un pasatiempo que utiliza una interfaz de usuario de color rubí y su clase de mapa de bits incorporado es extremadamente lenta en lo que respecta al acceso de píxel por píxel. –
La pregunta original indica que el autor ha mirado a RMagick y ha determinado que es "exagerado". – Phrogz
@Phogz ¿Así que bajas? Aunque el OP determina que es excesivo, no significa que lo sea. Si * realmente supieran * lo que necesitaban, no lo habrían preguntado. Esta respuesta es correcta y hace lo que se pide. – Alex