jueves, 9 de abril de 2009

Cuántos bits tiene un byte?

Respuestas: qué es eso, no sé, depende de la resolución, depende de la velocidad de "tu internet", depende del mp3, etc....

Cómo es posible que un profesional que trabaje en desarrollo o actividades relacionadas (diseño, edición, etc.) no sepa algo tan fundamental.

Desde las diferencias entre usar los diferentes formatos gráficos (GIF, JPG, PNG, etc.), pasando por la calidad del audio de un archivo MP3, la velocidad de descarga, el peso de las páginas, la codificación de caracteres (ANSI, UTF, etc), el modelado de bases de datos, la resolución de las pantallas, los colores, etc. etc... (5000 etcs más), TODO parte de bits y bytes.

Si no se entiende algo tan básico, entonces todo lo demás estará construido sobre aire.

--- Un ejemplo ---
Una simple página html. Claro, la página por sí misma no pesa mucho, pero tiene gráficos y según el contenido de cada imagen, uno opta por GIF, JPG o PNG. GIF si los colores son "horizontalmente" planos y pocos, JPG si son fotografías, PNG si no son muy grandes y se necesita transparencia (logotipos, formas, etc.).

GIF admite hasta 256 colores, pero por qué ese número? Porque cada punto se almacena como un byte, que es un número entre 0 y 255 (256 valores posibles).
Por qué? Porque un byte se compone de 8 bits (dígitos binarios) y el máximo número de 8 digitos binarios es 11111111 que equivale a 255.

GIF es ideal para comprimir colores planos porque si un byte se repite N veces, entonces sólo se graba UNA vez el valor y luego se indica cuántas veces se repite. Toda una línea de 1024 pixels del mismo color, se graba en apenas 2 o 3 bytes y no en 1024. La compresión es enorme y la calidad perfecta.

Bueno en realidad es perfecta dependiendo de la cantidad de colores de la imagen, ya que GIF utiliza una paleta, es decir, una selección de hasta 256 de los colores más usados por la imagen. Al almacenar el gráfico no se graba realmente cada color, sino el índice en la paleta al que corresponde dicho color.

Y cómo se graba cada color? Cada color se representa como 3 valores básicos, uno para el rojo, otro para el verde y otro para el azul. Cada color básico tiene 256 posibles variaciones (otra vez ese numerito), por qué? porque cada color se guarda como un byte (de nuevo los 8 bits que permiten almacenar un número entre 0 y 255).

JPG en cambio guarda cada punto directamente como 3 bytes sin usar una paleta, pero utiliza una técnica de compresión por pérdida de calidad. Si cada color se puede expresar como 3 números de 256 posibles valores cada uno, tenemos 256 x 256 x 256 que nos dan los famosos 16 millones de colores (aprox) que admite dicho formato. El ojo humano a duras penas logra distinguir tal gama de colores así que en la práctica no se necesita más.

PNG usa una compresión parecida al GIF así que ya se pueden imaginar que "es pesadito". Además PNG usa un byte adicional para la transparencia (tambien expresada en 256 posibles valores). PNG es útil para formas que deban verse bien, no sean muy grandes y especialmente si requieren transparencia.

--- fin del ejemplo ---

Quizá mareó un poco lo anterior verdad? Pero para realmente lograr que una página pese poco, se deben aplicar correctamente los formatos gráficos, pero si no se sabe algo tan básico como bits y bytes, cómo se podrá comprender lo anterior?

Lo mismo se aplica a los caracteres ASCII, ANSI, UTF8, etc.

Sabían que cuando mandan un attachment por mail, durante la transmisión mide 30% más aprox? Por qué? porque se debe expresar los bytes del archivo como caracteres estándar dentro del mail (que sólo admite 7 bits), así que algunos valores deben expresarse en varios bytes.

...y así podría dar N ejemplos, en otro momento quizá profundice sobre los formatos gráficos o por qué alguien caprichosamente quizo usar 8 bits y no 10, 5 o 1 (o quizá no fue un capricho? todo tiene su explicación), por ahora sólo he querido mostrar la importancia de algo tan elemental en el trabajo diario de un desarrollador, diseñador, etc.

Pueden empezar por Wikipedia: BIT y ya si son "atrevidos" lean sobre numeración hexadecimal.

Qué se diviertan :)

No hay comentarios:

Publicar un comentario en la entrada