entre Desarrolladores

Recibe ayuda de expertos

Registrate y pregunta

Es gratis y fácil

Recibe respuestas

Respuestas, votos y comentarios

Vota y selecciona respuestas

Recibe puntos, vota y da la solución

Pregunta

1voto

¿Cómo extraer los binarios de una imagen?

Hola.

Todo se reduce a 0 y 1 como dicen, eso significa que un jpg al fin de cuentas es solo un grupo de binarios y eso es lo que me interesa, copiar esos binarios en un txt, mi objetivo es tener los 0/1 y usar estos para convertirlos nuevamente en la imagen original.

Gracias.

1voto

Peter comentado

¿En qué lenguaje?

Saludos.

1voto

Jade comentado

Esperaba más hacerlo en un software, no soy programador sin embargo sé un poco de Python... lo básico. Espero se pueda prescindir de eso.

2votos

magarzon comentado

¿Y para qué quieres hacer eso? Es que no se me ocurre ningún caso en el que pueda ser "útil" tener un archivo de texto de 0 y 1 en lugar del archivo binario. Y ten en cuenta que te va a ocupar, mínimo, 8 veces más que el archivo original.

1voto

Jade comentado

Para mi si me es muy útil y no diré en qué, porque en la red es normal ver pesimistas y no quisiera opiniones sobre lo que intento hacer.

2votos

magarzon comentado

Pues esa es una mala actitud. La gente no es que sea pesimista, es que a lo mejor tiene más experiencia que tú, y sus opiniones te pueden ser de mucha utilidad. A lo mejor lo que quieres hacer es imposible, o se hace mejor de otra manera, y vas a perder el tiempo antes de darte cuenta por ti mismo.

Como me imagino por dónde pueden ir los tiros, ya te aviso de una cosa: practicamente todos los formatos de imagen están comprimidos, por lo que si te esperas que, por ejemplo, una imagen de un cuadrado negro sobre fondo blanco fuera algo como:

11111
10001
10001
11111

Y quisieras editar esos 0 y 1, para convertirlo en otra cosa, va a ser imposible.

Por tanto, estás convirtiendo un formato binario, a un formato texto, con el que no vas a poder hacer prácticamente nada.

Te animo a que nos cuentes tu idea, y podamos darte nuestra opinión (las críticas sirven para aprender también).

1voto

Jade comentado

Para trabajar con esos binarios creo es necesario entender el lenguaje máquina y pues no, no quiero hacer eso (a más de que en estos tiempos ni en inglés te enseñan a comprender el lenguaje máquina, mínimo el Ensamblador). En fin me pasé con lo de pesimista pero por darte una idea, vi hace un tiempo como alguien usó los binarios de una imagen y los convirtió en música instrumental (claro, era horrible pero sorprendente) algo así quiero hacer pero no es música el objetivo. Por el momento nada exigente solo lo básico, extraer los binarios en texto plano (no editarlos) y volverlos a dejar como estaban originalmente.

1voto

magarzon comentado

No, no tiene nada que ver el formato binario con el que se guardan las imágenes (o cualquier otro tipo de archivo multimedia, ya puestos), con el lenguaje máquina ni el ensamblador.

Un archivo de imagen lo que tiene es una estructura determinada (que varía según el formato), donde se indica qué significa cada "trozo" de bytes dentro del fichero. Por ejemplo, puede ser que los primeros n bytes sirvan para indicar qué formato tiene el archivo, los siguientes n bytes para indicar el tamaño, o la resolución, o la paleta de colores a usar... y por último habrá un trozo más grande (en principio) donde estén los datos de la imagen en sí. En este trozo más grande están codificados, de alguna manera (depende del formato) cada pixel de la imagen. Pero además hay que tener en cuenta, como ya te dije, que puede ser un formato con compresión (por ejemplo JPG o PNG), con lo que antes de "gestionar" estos datos de la imagen, hay que descomprimir la información.

Pero NUNCA es necesario transformar la información a 0 y 1 (hablando con propiedad, ya tenemos esa información en 0 y 1), y mucho menos pasarlo a texto. Ese programa que transformaba imagen en música lo que hacía era convertir un formato binario (el de la imagen) en otro formato binario (el de la música). No es necesario (ni útil) transformarlo a "modo texto".

Un programa que hiciera algo así, pasar de imagen a música, pasando por "modo texto", (que ya te avanzo que no existe nada parecido, porque, reitero, no es útil hacerlo así, te lo tendrías que programar tú), tendría que:

  1. Leer la cabecera del archivo (en binario), para obtener los metadatos de la imagen
  2. Ir a la parte del archivo donde está guardada la información de la imagen propiamente dicha
  3. Leer (en binario) esa información
  4. Descomprimir la información (si es el caso)
  5. Leer cada byte, y transformarlo en un grupo de 8 caracteres conteniendo los caracteres 0 o 1
  6. Bien sea después de leer cada byte, o al leer y transformar todos los bytes, recorrer cada 0 y 1 Y VOLVER A TRANSFORMALOS EN UN BYTE (o su representación decimal de un número entre 0 y 255), porque cualquier cosa que quieras hacer, por ejemplo música, con solo 0 y 1 estás muy limitado (a dos tonos, o dos notas)

1voto

Jade comentado

Uhm nos salimos de tema jaja lo de la música fue solo un ejemplo que te expuse, no recuerdo muy bien como lo hizo el user arrastró un bmp a Winhex y con los hexadecimales editó la cabecera para que la PC lo interprete como un mp3 (o wav, ni idea no recuerdo), jamás el user trabajó en binario y jamás tuvo una opción "automática" de imagen a música jajaja no! fue todo 100% manual, el detalle es que Winhex no tiene la necesidad de transformar los hexadecimales a binario, no lo hace, pero ya me dejaste en claro que no existe nada que transforme desde un fichero a binario en texto plano, al menos esto ya es un avance.

Aparte de todo tengo otra pregunta, como mencioné el "user" trabajaba con los hexadecimales que como bien sabrás son lo más cercano al binario, el tipo entendía que una imagen y música son dos cosas distintas para nosotros pero para el CPU son solo ceros y unos, entonces, conoces algún libro que explique el cómo las señales eléctricas de los binarios(0/off y 1/on) hacen que en pantalla aparezca una imagen, en los parlantes suene una música, que internamente se haga un cálculo, uff tantas cosas, no importa el idioma del libro.

1voto

magarzon comentado

A ver, aclarando: binario, decimal, hexadecimal (y octal, así para completar los que se suelen usar), no son más que diferentes sistemas de numeración, cada uno con una base aritmética diferente: 2 en el binario, 8 en el octal, 10 en el decimal y 16 en el hexadecimal (de ahí los prefijos, bi-, oct-, dec-, hexa-). La base aritmética es el orden de magnitud en que se ve incrementada cada cifra de un número, dependiendo de su posición (por ejemplo en decimal, el número 275, el 5 está aumentado en 10⁰, es decir, nada, el 7 en 10¹, es decir, "representa" 70, y el 2 en 10², es decir, "representa" 200. Además, coincide en el número de "símbolos" que es posible utilizar para representar un número: en el binario solo 2, el 0 y el 1, en el decimal 10, del 0 al 9, en el hexadecimal 16, del 0 al 9 y de la A a la F.

Cuando hablamos de un archivo en formato binario en realidad deberíamos estar hablando de un archivo en formato "octario", pues la porción más pequeña del mismo es un byte (8 bits). Como ya dije, con 8 bits (8 0 y 1 en binario) se pueden representar desde el 00000000 al 1111111, que representado en decimal sería desde el 0 al 255 y en hexadecimal desde el 00 al FF.

Como ya expliqué en el otro comentario, los archivos binarios, ya sea una imagen, un archivo de música o cualquier otra cosa, se componen de una cabecera, con los metadatos (la información de qué es ese fichero y qué características tiene), y los datos en sí a continuación. Por tanto, lo que hizo ese usuario fue cambiar la cabecera y decirle que un BMP fuera un MP3 o WAV, pero los datos seguían siendo los mismos, por eso sonaba tan mal.

Para "codificar" una imagen en formato BMP, por ejemplo (para otros formatos será diferente), lo que se hace es que se define una paleta de colores, es decir, que podemos tener desde imágenes monocromas (solo dos colores), a imágenes con 256 colores. En el primer caso, como nos vale con 0 o 1 (blanco y negro, p.e.), en cada byte se puede codificar la información de 8 píxeles de la imagen. En el caso de 256 colores, cada byte corresponderá a un color, y entonces el 0 indicará que ese pixel es negro, el 255 que es blanco, y cualquier otro valor entre medias, un color de la paleta de 256 colores. Además en la cabecera del fichero irá toda la información sobre el tamaño de la imagen, la paleta de colores, etc.

Para "codificar" un sonido en formato WAV, por ejemplo, es un poco más complicado. Pero básicamente se trata de convertir la onda de sonido (al final, una función matemática con un valor dado dependiendo del tiempo) a bytes, para lo que hay que tener en cuenta el ratio de muestreo (cuantas milésimas de segundo del sonido o "porción de la curva matemática" voy a representar en un solo byte), el número de bytes utilizados para representar cada muestra...

En definitiva, al final, trabajar con archivos binarios implica conocer el formato del archivo que queremos utilizar, y qué queremos hacer con él. Cualquier procesamiento que hagamos a esos datos siempre será, al final, una función matemática (por ejemplo, si multiplicamos por 2 los valores de cada byte, la imagen se hará más roja (o azul, o verde, tampoco me he puesto a calcularlo) o si es una imagen, se hará más grave, o más aguda, o más "metálica". Pero en definitiva, todo esto se hace en base a números (ya sea representado en binario, decimal o hexadecimal), y no en base a "texto".

Por último, cualquier tutorial o libro de introducción a la informática, supongo que te contará todo esto.

Por favor, accede o regístrate para responder a esta pregunta.

Otras Preguntas y Respuestas


...

Bienvenido a entre Desarrolladores, donde puedes realizar preguntas y recibir respuestas de otros miembros de la comunidad.

Conecta