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 archivos

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

Son formatos de archivos de imagen diseñados para ser intercambiados fácilmente entre plataformas. A veces también se los conoce colectivamente como formato de mapa 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 comienzo de un archivo determina el tipo, no la extensión del archivo, aunque es una buena práctica usar 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 monocromos dentro de un mensaje de correo electrónico como texto ASCII simple, lo que le permitía sobrevivir a cualquier cambio en el formato de 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 fines de 1988, Poskanzer había desarrollado los formatos PGM y PPM junto con sus herramientas asociadas y los agregó a Pbmplus. El lanzamiento final de Pbmplus fue el 10 de diciembre de 1991.

En 1993, se desarrolló la biblioteca Netpbm para reemplazar a Pbmplus, que no recibía mantenimiento. Se trataba simplemente de 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 del que se trata (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 P7hace referencia al formato de archivo PAM que también está cubierto por la biblioteca netpbm. [9]

Los formatos ASCII ("simples") permiten la lectura humana y una fácil transferencia a otras plataformas; los formatos binarios ("sin procesar") son más fáciles de analizar por los programas y más eficientes en cuanto al tamaño de archivo.

En los formatos binarios, PBM utiliza 1 bit por píxel, PGM utiliza 8 o 16 bits por píxel y PPM utiliza 24 o 48 bits por píxel: 8/16 para rojo, 8/16 para verde, 8/16 para azul. El soporte de aplicaciones para las variantes de 16 bits aún es poco frecuente.

La documentación de PGM y PPM define que los valores de gris y color utilizan el espacio de color BT.709 y la función de transferencia gamma . Sin embargo, según la aplicación, el espacio de color utilizado puede ser sRGB , lineal o algún otro espacio de color . No hay metadatos en el archivo que indiquen qué espacio de color se está utilizando.

Ejemplo de PBM

A continuación se muestra un ejemplo sencillo del formato PBM (no se muestran los caracteres de nueva línea al final de cada línea):

P1# Este es un ejemplo de mapa de bits 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 indican el ancho y la altura. A continuación, aparece la matriz con los valores de los píxeles (en el caso monocromático, solo ceros y unos).

No es necesario que los píxeles estén bien alineados; el formato ignora los espacios en blanco y los saltos 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 ejemplo de mapa de bits de la letra "J"6 10000010000010000010000010000010000010100010011100000000000000

Aquí está la imagen resultante:

Aquí está nuevamente ampliado 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. Una fila tiene un ancho de píxeles empaquetado en una longitud de 8 píxeles o un byte. El primer píxel de una fila es el bit más significativo. Los bits adicionales utilizados para que la longitud sea igual a un byte se ignoran. La siguiente fórmula se puede utilizar para calcular la cantidad de bytes necesarios ancho / 8⌉ * alto . Si usamos el ejemplo anterior, ⌈6 / 8⌉ * 10 serían 10 bytes.

P4# Este es un ejemplo de formato binario de la letra "J" con cada byte en notación decimal6 108 8 8 8 8 8 136 112 0 0

Ejemplo de PGM

Los formatos PGM y PPM (tanto las versiones ASCII como binarias) tienen un parámetro adicional para el valor máximo (número de grises entre el negro y el blanco) 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 horas, 7 días a la semana150 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 esta es 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, está el encabezado.# Todo lo que viene después son 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 (es decir, tres bytes por píxel) en el orden rojo, verde y azul. El archivo es más pequeño, pero la información de color es más difícil de leer para los humanos. El encabezado permanece en ASCII y los argumentos siguen estando separados por un espacio en blanco. La información de la imagen binaria aparece después del encabezado (que termina con un espacio en blanco).

En el formato binario, la última línea de encabezado debe ser como "255\n", con los datos inmediatamente después; cualquier comentario agregado después de 255 se tomará como el inicio de los datos de la imagen, y la imagen se inclinará hacia la derecha (al menos cuando se abra con 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 PPM de 192×128, el tamaño del archivo es de 73.848 bytes. El factor de reducción de tamaño de archivo de aproximadamente 100 al convertir a png es típico si la imagen es un dibujo lineal; si la imagen es una foto, es mejor convertirla a jpeg, que produce una mayor reducción de tamaño de archivo.

El formato PPM es generalmente un formato intermedio utilizado para trabajar con imágenes antes de convertir a un formato más eficiente, por ejemplo el formato PNG, sin ninguna 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

El espacio en blanco, incluidos los finales de línea y las líneas de comentarios, es sintácticamente equivalente a un espacio simple dentro de los encabezados PNM. Para los formatos simples P1...P3, esto también afecta a las líneas de mapa de bits; 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 mayores que 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 mayores profundidades de bits. El uso de mayores profundidades de bits enfrenta el problema de tener que decidir sobre el orden de bytes del archivo. Las diversas implementaciones no se pusieron de acuerdo sobre qué orden de bytes utilizar, y algunas relacionaron el orden de bytes de 16 bits con el orden de empaquetamiento de píxeles. [10] La documentación actual de PGM y PPM dice que el byte más significativo es el primero y la implementación de Netpbm también utiliza el orden de bytes big-endian. [11]

32 bits

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

  1. La primera línea es el texto ASCII "PF", para un archivo en color, o "Pf", para un archivo en escala de grises.
  2. La siguiente línea de texto ASCII contiene el ancho y la altura, separados por el carácter de espacio hexadecimal 20 o, a veces, por el carácter 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 CR/LF de Windows/DOS.
  3. La tercera línea de texto ASCII contiene un número decimal distinto de cero que indica los valores de punto flotante little-endian para los datos de píxeles cuando son negativos y los valores de punto flotante big-endian cuando son positivos. El valor absoluto del número indica el rango. Por lo tanto, la tercera línea que contiene -1.0 indica el formato little-endian en el rango de cero a uno. (No se 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 a 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 . Es compatible con 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 puede usar pamscalepara reducir una imagen en un 10%, pamcomppara superponer una imagen sobre otra, pbmtextpara crear una imagen de texto o para reducir la cantidad de colores de una imagen con pnmquant.

Los programas están diseñados para ser bloques de construcción mínimos que se pueden utilizar en diversas 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 :

regalopnm alguna foto.gif > alguna foto.ppmppmtobmp algunaimagen.ppm > algunaimagen.bmp

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

regaloopnm alguna foto.gif | ppmtobmp > alguna foto.bmp

Los programas Netpbm se utilizan frecuentemente como intermediarios para convertir entre formatos poco conocidos. Por ejemplo, puede que no exista ninguna herramienta para convertir un volcado de ventana X11 ( formato XWD ) directamente a un archivo PICT de Macintosh , pero se puede hacer esto ejecutando xwdtopnm, y 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, finalmente, a X-Face . [18]

Historia

El formato PBM (blanco y negro) fue inventado por Jef Poskanzer a mediados de la década de 1980. En ese momento, no existía una forma estándar y confiable de enviar archivos binarios por correo electrónico, e intentar 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 que las imágenes se enviaran por correo electrónico sin que se corrompieran. Poskanzer lanzó el precursor de Netpbm, llamado Pbmplus en 1988. A fines de 1988, Poskanzer había desarrollado los formatos PGM (escala de grises) y PPM (color) y los lanzó con Pbmplus.

El último lanzamiento 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 retomado por su actual mantenedor, Bryan Henderson.

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

El nombre Netpbm proviene de la colaboración entre los desarrolladores de programas a través de Internet , algo que era muy conocido en ese momento; el sistema operativo NetBSD y el juego NetHack recibieron nombres similares. (A diferencia del formato Portable Network Graphics (PNG) posterior y más extendido, la "red" en el nombre no hace referencia a la optimización de la imagen para su transferencia a través de una red).

Formato gráfico PAM

Portable Arbitrary Map ( PAM ) es una extensión de los antiguos formatos gráficos binarios P4...P6 , introducidos con la versión 9.7 de netpbm (agosto de 2000). PAM generaliza todas las características de PBM, PGM y PPM, y permite 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, la 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 anteriores

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

No existe una versión simple (legible para humanos, basada en ASCII ) de PAM. Los archivos PAM son siempre binarios y los intentos de usar el conmutador -plaincon programas Netpbm que producen salida PAM dan como resultado un mensaje de error.

Para la versión en blanco y negro de PAM (profundidad 1, tipo de tupla BLACKANDWHITE), correspondiente a PBM, PAM utiliza un byte por píxel, en lugar de un bit por píxel como en PBM (ocho píxeles en un byte). Además, el valor 1 en una imagen PAM de este tipo representa el 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 GRAYSCALE es equivalente a PGM (mapa de grises portátil). GRAYSCALE_ALPHA con transparencia no es directamente posible en PGM. La especificación permite MAXVAL 1 para GRAYSCALE, pero tendría el mismo efecto que BLACKANDWHITE.

Un ejemplo en el artículo BMP muestra una imagen RGBA con 4×2=8 píxeles de color azul, verde, rojo y blanco; semitransparente (0x7F) en la primera fila inferior, opaca (0xFF) en la segunda fila superior; hexadecimal FF00007F 00FF007F 0000FF7F FFFFFF7F FF0000FF 00FF00FF 0000FFFF FFFFFFFFen orden BGRA . Para PAM, este mapa de bits debe proporcionarse en orden RGBA , intercambiando el primer y tercer byte en cada píxel. Las filas BMP suelen estar dispuestas de abajo a arriba, mientras que para PAM y PNM las filas se proporcionan de arriba a abajo (es decir, para 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 4Valor máximo 255TIPO TUPL RGB_ALFAENDHDR

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 no se limita a los 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 de matrices rudimentarios y utilizan el formato PAM de esta manera.

Licencias

Netpbm consta de cientos de herramientas diferentes, cada una de las cuales se ofrece con una licencia de copyright pública propia. Un análisis realizado por el desarrollador de Debian Steve McIntyre en 2001 sugiere que la mayoría de las licencias son de software libre, una licencia no comercial (que no es libre) y una docena sin licencia ofrecida (que tampoco es libre). Como se menciona en el análisis, obviamente no cubre los cambios realizados desde entonces. [23]

Véase también

Referencias

  1. ^ ab "Historial de Netpbm" . Consultado el 17 de marzo de 2010 .
  2. ^ "HISTORIAL DE CAMBIOS".
  3. ^ Henderson, Bryan (2013). "Getting Netpbm". Sourceforge . Consultado el 2 de febrero de 2021 .
  4. ^ .pbm Tipo MIME no registrado en IANA
  5. ^ .pgm Tipo MIME 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. Recuperado el 27 de febrero de 2014 .
  9. ^ "Disposición del formato de archivo PAM".
  10. ^ "Manual del usuario de Pnmtotiff". netpbm doc en SourceForge . 27 de marzo de 2005.
  11. ^ "página del manual de pamendian". documentación de 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 del formato PFM". Archivado desde el original el 31 de diciembre de 2019.
  15. ^ "Secuencias de fuego HDR sintético".
  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 de 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 . Se agregó el formato PAM
  22. ^ "Formatos de imagen". Documentación general de FFmpeg . 2014. Consultado el 23 de febrero de 2014 .
  23. ^ "Análisis de los derechos de autor de Netpbm realizado en 2001 por Steve McIntyre".

Enlaces externos