stringtranslate.com

netpbm

Netpbm (anteriormente Pbmplus) es un paquete de código abierto de programas gráficos y una biblioteca de programación. Se utiliza principalmente en el mundo Unix , donde se puede encontrar incluido en todas las principales distribuciones de sistemas operativos de código abierto , pero también funciona en Microsoft Windows , macOS y otros sistemas operativos. [3]

Formatos de archivo

El proyecto Netpbm utiliza y define varios formatos de gráficos:

son formatos de archivos de imágenes diseñados para intercambiarse fácilmente entre plataformas. A veces también se les conoce colectivamente como formato de mapa arbitrario portátil ( PNM ), [7] [8] que no debe confundirse con el formato de mapa arbitrario portátil (PAM) relacionado. El "número mágico" (Px) al principio de un archivo determina el tipo, no la extensión del archivo, aunque es una buena práctica utilizar la extensión correcta si es posible.

El formato PBM fue inventado por Jef Poskanzer en la década de 1980 como un formato que permitía transmitir mapas de bits monocromáticos dentro de un mensaje de correo electrónico como texto ASCII sin formato, lo que le permitía sobrevivir a cualquier cambio en el formato del texto. [8] Poskanzer desarrolló la primera biblioteca de herramientas para manejar el formato PBM, Pbmplus, lanzada en 1988. Contenía principalmente herramientas para convertir entre PBM y otros formatos gráficos. A finales de 1988, Poskanzer había desarrollado los formatos PGM y PPM junto con sus herramientas asociadas y los había agregado a Pbmplus. El lanzamiento final de Pbmplus fue el 10 de diciembre de 1991.

En 1993, se desarrolló la biblioteca Netpbm para reemplazar la Pbmplus que no se mantenía. Fue simplemente un reempaquetado de Pbmplus con adiciones y correcciones enviadas por personas de todo el mundo. [1]

Descripción

Cada archivo comienza con un número mágico de dos bytes (en ASCII) que identifica el tipo de archivo que es (PBM, PGM y PPM) y su codificación ( ASCII /"normal" o binario/"sin formato"). El número mágico es una P mayúscula seguida de un número de un solo dígito.

Un valor de P7se refiere al formato de archivo PAM que también cubre la biblioteca netpbm. [9]

Los formatos ASCII ("simples") permiten la legibilidad humana y una fácil transferencia a otras plataformas; los formatos binarios ("sin formato") son más eficientes en cuanto al tamaño del archivo, pero pueden tener problemas con el orden de bytes nativo.

En los formatos binarios, PBM usa 1 bit por píxel, PGM usa 8 o 16 bits por píxel y PPM usa 24 bits por píxel: 8 para rojo, 8 para verde, 8 para azul. Algunos lectores y escritores pueden admitir 48 bits por píxel (16 cada uno para R, G y B), pero esto sigue siendo poco común.

Convencionalmente, PGM almacena valores en un espacio de color lineal , pero dependiendo de la aplicación, a menudo puede usar sRGB o una representación gamma simplificada. Los datos del archivo no indican qué espacio de color está utilizando y deben ser elegidos por el usuario u otro software. La PGM de 16 bits casi siempre se almacena como lineal, ya que la corrección gamma suele ser ventajosa sólo en formatos de 8 bits.

Normalmente, el formato PPM de 8 bits almacena colores en un formato no lineal, convencionalmente CIE Rec. 709 para rojo, verde y azul, ajustado por la CIE Rec. Función de transferencia gamma 709. Sin embargo, es muy común almacenar el color utilizando el espacio de color sRGB o, a veces, utilizando el espacio de color lineal . No hay metadatos en el archivo que indiquen qué formato se está utilizando.

ejemplo de PBM

Un ejemplo sencillo del formato PBM es el siguiente. (No se muestran los caracteres de nueva línea al final de cada línea):

P1# Este es un mapa de bits de ejemplo de la letra "J"6 100 0 0 0 1 00 0 0 0 1 00 0 0 0 1 00 0 0 0 1 00 0 0 0 1 00 0 0 0 1 01 0 0 0 1 00 1 1 1 0 00 0 0 0 0 00 0 0 0 0 0

La cadena P1 identifica el formato del archivo. El signo numérico introduce un comentario. Los dos números siguientes dan el ancho y el alto. Luego sigue la matriz con los valores de píxeles (en el caso monocromático aquí, solo ceros y unos).

No es necesario que los píxeles estén bien alineados; el formato ignora los espacios en blanco y los cambios de línea en la sección de datos, aunque se recomienda que ninguna línea tenga más de 76 caracteres. A continuación se muestra la misma imagen:

P1# Este es un mapa de bits de ejemplo de la letra "J"6 10000010000010000010000010000010000010100010011100000000000000

Aquí está la imagen resultante:

Aquí está nuevamente ampliada 20 veces:

Un valor de 0 significa un píxel blanco y un 1 significa un píxel negro. Esto difiere de los otros formatos, donde los valores más altos significan píxeles más brillantes.

El formato binario P4 de la misma imagen representa cada píxel con un solo bit, con 8 píxeles por byte, siendo el primer píxel el bit más significativo. Se agregan bits adicionales al final de cada fila para llenar un byte completo.

Ejemplo de PGM

Los formatos PGM y PPM (ambas versiones ASCII y binaria) tienen un parámetro adicional para el valor máximo (números de grises entre blanco y negro) después de las dimensiones X e Y y antes de los datos de píxeles reales. El negro es 0 y el valor máximo es blanco. (No se muestran los caracteres de nueva línea al final de cada línea).

Ejemplo (ampliado)
P2# Muestra la palabra "FEEP"24 7150 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 00 3 3 3 3 0 0 7 7 7 7 0 0 11 11 11 11 0 0 15 15 15 15 00 3 0 0 0 0 0 7 0 0 0 0 0 11 0 0 0 0 0 0 15 0 0 15 00 3 3 3 0 0 0 7 7 7 0 0 0 11 11 11 0 0 0 15 15 15 15 00 3 0 0 0 0 0 7 0 0 0 0 0 0 11 0 0 0 0 0 15 0 0 0 00 3 0 0 0 0 0 7 7 7 7 0 0 11 11 11 11 0 0 15 0 0 0 00 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0

Ejemplo de PPM

Este es un ejemplo de una imagen RGB en color almacenada en formato PPM. (No se muestran los caracteres de nueva línea al final de cada línea).

Imagen (ampliada)
P3# "P3" significa que se trata de una imagen en color RGB en ASCII# "3 2" es el ancho y alto de la imagen en píxeles# "255" es el valor máximo para cada color# Esto, hasta la línea "255" a continuación, es el encabezado.# Todo lo que sigue son los datos de la imagen: tripletes RGB.# En orden: rojo, verde, azul, amarillo, blanco y negro.3 2255255 0 0 0 255 0 0 0 255255 255 0255 255 255 0 0 0

El formato binario P6 de la misma imagen representa cada componente de color de cada píxel con un byte (por lo tanto, tres bytes por píxel) en el orden rojo, verde y luego azul. El archivo es más pequeño, pero la información del color es más difícil de leer para los humanos. El encabezado permanece en ASCII y los argumentos siguen separados por un espacio en blanco. La información de la imagen binaria viene después del encabezado (que termina con un espacio en blanco).

En el formato binario, el último encabezado debe ser como "255\n", seguido inmediatamente por los datos; cualquier comentario agregado después de 255 se tomará como el inicio de los datos de la imagen y la imagen estará sesgada hacia la derecha (al menos cuando la abra el programa de manipulación de imágenes GIMP (diciembre de 2022)).

El formato PPM no está comprimido y, por lo tanto, requiere más espacio y ancho de banda que un formato comprimido. Por ejemplo, la imagen PNG ( Portable Network Graphics ) de 192 × 128 anterior tiene un tamaño de archivo de 166 bytes. Cuando se convierte a una imagen de 192 × 128 PPM, el tamaño del archivo es 73.848 bytes. El factor de reducción del tamaño del archivo de aproximadamente 100 al convertir a png es típico si la imagen es un dibujo lineal; Si la imagen es una fotografía, es mejor convertirla a jpeg, lo que produce una mayor reducción del tamaño del archivo.

El formato PPM es generalmente un formato intermedio que se utiliza para el trabajo con imágenes antes de convertirlo a un formato más eficiente, por ejemplo el formato PNG, sin pérdida de información en el paso intermedio.

La imagen que se muestra arriba usando solo 0 o el valor máximo para los canales rojo - verde - azul también se puede codificar como:

P3# La misma imagen con ancho 3 y alto 2,# usando 0 o 1 por color (rojo, verde, azul)3 2 11 0 0 0 1 0 0 0 11 1 0 1 1 1 0 0 0

Los espacios en blanco, incluidos los finales de línea y las líneas de comentarios, son sintácticamente equivalentes a un único espacio dentro de los encabezados PNM. Para los formatos planos P1...P3, esto también afecta a las líneas del mapa de píxeles; de hecho, las líneas deberían limitarse a 70 caracteres:

P3 3 2 1 1 0 0 0 1 0 0 0 1 1 1 0 1 1 1 0 0 0

Extensiones

16 bits

La definición original de los formatos binarios PGM y PPM (los formatos P5 y P6) no permitía profundidades de bits superiores a 8 bits. Si bien el formato ASCII puede admitir mayores profundidades de bits, aumenta el tamaño del archivo y, por lo tanto, ralentiza las operaciones de lectura y escritura. En consecuencia, muchos programadores ampliaron el formato para permitir profundidades de bits más altas. El uso de profundidades de bits más altas plantea el problema de tener que decidir el endianidad del archivo. Las diversas implementaciones no se pusieron de acuerdo sobre qué orden de bytes utilizar y algunas conectaron la endianidad de 16 bits con el orden de empaquetado de píxeles. [10] En Netpbm, la implementación estándar de facto de los formatos PNM, el byte más significativo es el primero. [11]

32 bits

PFM (Portable Floatmap) es la extensión no oficial de coma flotante de precisión simple IEEE 754 de cuatro bytes. [12] [13] [14]

  1. La primera línea es el texto ASCII "PF", para un archivo de color, o "Pf", para un archivo en escala de grises.
  2. La siguiente línea de texto ASCII contiene el ancho y el alto, separados por el carácter de espacio hexadecimal 20 o, a veces, con hexadecimal 0A (lo que da como resultado cuatro líneas). Después de cada línea se escribe un carácter de espacio en blanco hexadecimal 0A y no la combinación Windows/DOS CR/LF.
  3. La tercera línea de texto ASCII contiene un número decimal distinto de cero que indica flotantes little-endian para los datos de píxeles cuando son negativos y flotantes big-endian cuando son positivos. El valor absoluto del número indica el rango. Entonces, la tercera línea que contiene -1.0 indica formato little-endian en el rango de cero a uno. (No pueden seguir comentarios).

Después del encabezado, el archivo continúa con números de punto flotante para cada píxel, especificados en orden de izquierda a derecha y de abajo hacia arriba. Algunos programas sugieren PF4 como una extensión adicional para el formato RGBA. [15]

PFM es compatible con los programas Photoshop , [16] GIMP e ImageMagick . Está respaldado por la implementación de referencia de facto netpbm. [12]

Programas

El paquete Netpbm contiene más de 350 programas, [17] la mayoría de los cuales tienen "pbm", "pgm", "ppm", "pam" o "pnm" en sus nombres. Por ejemplo, se podría utilizar pamscalepara reducir una imagen en un 10 %, pamcomppara superponer una imagen sobre otra, pbmtextpara crear una imagen de texto o reducir la cantidad de colores en una imagen con pnmquant.

Los programas están diseñados para ser bloques de construcción mínimos que se pueden usar en varias combinaciones para hacer otras cosas. El paquete Netpbm puede, por ejemplo, utilizar dos programas de conversión sucesivos para convertir una imagen en color en formato GIF en un archivo .bmp :

giftopnm algúnpic.gif > somepic.ppmppmtobmp alguna imagen.ppm > alguna imagen.bmp

Esto se hace más comúnmente como una canalización , para ahorrar tiempo de ejecución y evitar dejar un archivo temporal somepic.ppm alrededor:

giftopnm somepic.gif | ppmtobmp > alguna imagen.bmp

Los programas Netpbm se utilizan frecuentemente como intermediarios para convertir entre formatos oscuros. Por ejemplo, puede que no exista una herramienta para convertir un volcado de ventana X11 ( formato XWD ) directamente a un archivo PICT de Macintosh , pero se puede hacer ejecutando xwdtopnmy luego ppmtopict. (Las herramientas que dicen que generan PNM generan PBM, PGM o PPM. Las herramientas que importan PNM leerán cualquiera de los tres formatos). Como ejemplo más complejo, las herramientas Netpbm pueden convertir XBM de 48 × 48 a Ikon y eventualmente a X-Face. . [18]

Historia

El formato PBM (blanco y negro) fue inventado por Jef Poskanzer a mediados de los años 1980. En ese momento, no existía una forma estándar y confiable de enviar archivos binarios por correo electrónico, y el intento de enviar cualquier cosa que no fuera ASCII de 7 bits por correo electrónico a menudo resultaba en corrupción de datos . PBM fue diseñado para permitir el envío de imágenes por correo electrónico sin dañarse. Poskanzer lanzó el precursor de Netpbm, llamado Pbmplus en 1988. A finales de 1988, Poskanzer había desarrollado los formatos PGM (escala de grises) y PPM (color) y los lanzó con Pbmplus.

La última versión de Pbmplus fue el 10 de diciembre de 1991. Poskanzer nunca lanzó más actualizaciones y, en 1993, se desarrolló Netpbm para reemplazarlo. Al principio, no era más que una versión renombrada de Pbmplus, pero las actualizaciones continuaron hasta 1995, cuando el paquete volvió a ser abandonado. En 1999, el paquete Netpbm fue adquirido por su actual responsable, Bryan Henderson.

En 2000, se agregó PAM a los formatos de archivo de la biblioteca Netpbm permitiendo un canal alfa. [19]

El nombre Netpbm surgió de la colaboración de los desarrolladores de programas a través de Internet , lo que era notable en ese momento; el sistema operativo NetBSD y el juego NetHack recibieron nombres similares. (A diferencia del formato posterior y más extendido de gráficos de red portátiles (PNG), la "red" en el nombre no hace referencia a que la imagen en sí esté optimizada para su transferencia a través de una red).

Formato de gráficos PAM

Portable Arbitrary Map ( PAM ) es una extensión de los antiguos formatos de gráficos binarios P4...P6 , introducidos con netpbm versión 9.7 (agosto de 2000). PAM generaliza todas las funciones de PBM, PGM y PPM y proporciona extensiones. PAM define dos nuevos atributos; profundidad y tipo de tupla :

  1. El atributo de profundidad define la cantidad de canales en la imagen, como 1 para imágenes en escala de grises y 3 para imágenes RGB.
  2. El atributo de tipo de tupla especifica qué tipo de imagen representa el archivo PAM, lo que le permite representar los formatos Netpbm más antiguos, así como extenderse a nuevos usos, por ejemplo, transparencia.

PAM es compatible con XnView y FFmpeg . [21] [22] Como se especifica TUPLTYPE, es opcional; sin embargo, FFmpeg lo requiere.

Diferencias con los formatos más antiguos.

El encabezado del formato de archivo PAM comienza con P7 y (a diferencia de otros formatos) termina en un cierre explícito: "ENDHDR" seguido de un espacio en blanco. Los extremos de línea en un encabezado PAM son importantes; para PNM, los finales de línea son espacios en blanco.

No existe una versión simple (legible por humanos, basada en ASCII ) de PAM. Los archivos PAM siempre son binarios y los intentos de utilizar el conmutador -plaincon programas Netpbm que producen resultados PAM generan un mensaje de error.

Para la versión en blanco y negro de PAM (profundidad 1, tipo de tupla BLACKANDWHITE), correspondiente a PBM, PAM usa un byte por píxel, en lugar del uso de PBM de un bit por píxel (que empaqueta ocho píxeles en un byte). Además, el valor 1 en una imagen PAM de este tipo representa blanco ("luz encendida"), a diferencia del negro en PBM ("tinta encendida").

Transparencia

Todos los tipos de tuplas básicos (BLANCO Y NEGRO, ESCALA DE GRISES y RGB) tienen una variante con un canal de opacidad . El tipo de tupla se crea añadiendo "_ALPHA" como sufijo al tipo de tupla base.

Por ejemplo, una imagen con un tipo de tupla ESCALA DE GRISES equivale a PGM (mapa de grises portátil). GRAYSCALE_ALPHA con transparencia no es posible directamente en PGM. La especificación permite MAXVAL 1 para ESCALA DE GRISES, pero tendría el mismo efecto que BLANCO Y NEGRO.

Un ejemplo en el artículo de BMP muestra una imagen RGBA con 4×2=8 píxeles azules, verdes, rojos y blancos; medio transparente (0x7F) en la primera fila inferior, opaco (0xFF) en la segunda fila superior; maleficio. FF00007F 00FF007F 0000FF7F FFFFFF7F FF0000FF 00FF00FF 0000FFFF FFFFFFFFen orden BGRA . Para PAM, este mapa de bits debe entregarse en orden RGBA , intercambiando el primer y el tercer byte en cada píxel. Las filas BMP generalmente se organizan de abajo hacia arriba, mientras que las filas PAM y PNM se organizan de arriba hacia abajo (es decir, en este ejemplo 0000FFFF 00FF00FF FF0000FF FFFFFFFF 0000FF7F 00FF007F FF00007F FFFFFF7F). El encabezado PAM para este ejemplo podría ser:

0,0: blue 0000FF FF0,1: green 00FF00 FF0,2: red FF0000 FF0,3: white FFFFFF FF1,0: blue 0000FF 7F, half transparent1,1: green 00FF00 7F, half transparent1,2: red FF0000 7F, half transparent1,3: white FFFFFF 7F, half transparent
P7ANCHO 4ALTURA 2PROFUNDIDAD 4MAXVAL 255TUPLTYPE RGB_ALPHAENDHDR

Extensiones

El mecanismo de tipo tupla de PAM permite muchas extensiones. En teoría, PAM se puede ampliar para representar modelos de color como CMYK.

El formato ni siquiera se limita a gráficos, su definición permite su uso para matrices tridimensionales arbitrarias de números enteros sin signo. Algunos programas del paquete Netpbm, por ejemplo pamsummcol , funcionan como procesadores aritméticos matriciales crudos y usan el formato PAM de esta manera.

Licencias

Netpbm consta de cientos de herramientas diferentes, cada una de las cuales se ofrece con una licencia pública de derechos de autor propia. Un análisis del desarrollador de Debian Steve McIntyre de 2001 sugiere en su mayoría licencias de software libres, una licencia no comercial (no libre) y una docena sin licencia alguna (por lo tanto, también no libre). Como se menciona en el análisis, obviamente no cubre los cambios posteriores. [23]

Ver también

Referencias

  1. ^ ab "Historial de Netpbm" . Consultado el 17 de marzo de 2010 .
  2. ^ "CAMBIAR HISTORIAL".
  3. ^ Henderson, Bryan (2013). "Obtener Netpbm". Fuenteforja . Consultado el 2 de febrero de 2021 .
  4. ^ Tipo MIME .pbm no registrado en IANA
  5. ^ Tipo MIME .pgm no registrado en IANA
  6. ^ .ppm tipo MIME no registrado en IANA
  7. ^ ab .pnm tipo MIME no registrado en IANA
  8. ^ ab Murray, James D.; van Ryper, William (abril de 1996). Enciclopedia de formatos de archivos gráficos, segunda edición . O'Reilly . ISBN 1-56592-161-5. Consultado el 27 de febrero de 2014 .
  9. ^ "Diseño del formato de archivo PAM".
  10. ^ "Manual de usuario de Pnmtotiff". documento netpbm en SourceForge . 27 de marzo de 2005.
  11. ^ "página de manual de pamendian". documento netpbm en SourceForge . 10 de octubre de 2012.
  12. ^ ab "Descripción del formato PFM".
  13. ^ "PFM (mapa flotante portátil): simplemente resuelva el problema del formato de archivo".
  14. ^ "Documentación en formato PFM". Archivado desde el original el 31 de diciembre de 2019.
  15. ^ "Secuencias de fuego HDR sintéticas".
  16. ^ "Formatos de archivo en Adobe Photoshop".
  17. ^ "Página de inicio de Netpbm" . Consultado el 3 de mayo de 2023 .
  18. ^ Dairiki, Jeff. "Convertidor X-Face en línea" . Consultado el 2 de marzo de 2014 .
  19. ^ "Especificación del formato PAM".
  20. ^ Tipo MIME no registrado en IANA : especificación de formato PAM
  21. ^ Gougelet, Pierre-Emmanuel (19 de febrero de 2015). "XnView 2.30". XnView . Consultado el 20 de febrero de 2015 . Formato PAM agregado
  22. ^ "Formatos de imagen". Documentación general de FFmpeg . 2014 . Consultado el 23 de febrero de 2014 .
  23. ^ "Análisis de 2001 de los derechos de autor de Netpbm realizado por Steve McIntyre".

Enlaces externos