Netpbm (anteriormente Pbmplus) es un paquete de código abierto de programas gráficos y una biblioteca de programación. Se utiliza principalmente en Unix , donde se encuentra 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 gráficos:
- formato de mapa de bits portátil ( PBM )
- formato de mapa de grises portátil ( PGM )
- formato de mapa de píxeles portátil ( PPM )
PBM, PGM y PPM, a veces denominados colectivamente formato anymap portátil ( PNM ), son formatos de archivo de imagen diseñados para intercambiarse fácilmente entre plataformas. [ 7 ] [ 8 ] El número mágico al principio de un archivo determina el tipo. Los archivos PNM utilizan un número mágico que consiste en una "P" ASCII seguida de un número que define el tipo de archivo. [ 9 ]
El formato PBM fue inventado por Jef Poskanzer en la década de 1980. Este formato permitía transmitir mapas de bits monocromáticos dentro de un mensaje de correo electrónico como texto ASCII plano, de modo que se conservaran ante cualquier cambio en el formato del texto. [ 8 ] La primera biblioteca para manejar el formato PBM se lanzó en 1988 con el nombre de Pbmplus, y contenía 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 añadido a Pbmplus. La versión final de Pbmplus se lanzó el 10 de diciembre de 1991.
La biblioteca Netpbm se publicó en 1993 para reemplazar a Pbmplus, que en ese entonces no recibía mantenimiento. Reempaquetó la biblioteca original e incorporó correcciones creadas por otros desarrolladores. [ 1 ]
Descripción
Cada archivo comienza con un número mágico de dos bytes en ASCII que identifica el tipo de archivo (PBM, PGM o PPM) y su codificación ( ASCII /"plano" o binario /"sin procesar"). El número mágico es una P mayúscula seguida de un dígito.
La biblioteca Netpbm admite un formato de archivo PAM adicional con un número mágico de P7. [ 10 ]
Los archivos PNM se pueden crear tanto en texto plano como en binario sin procesar. Los formatos ASCII ("plano") permiten la lectura por humanos y una fácil transferencia a otras plataformas, mientras que los formatos binarios ("sin procesar") son más fáciles de analizar por los programas y más eficientes en cuanto al tamaño del 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 y 8/16 para azul. El soporte de aplicaciones para las variantes de 16 bits es poco común. En ambos casos, el encabezado permanece en formato ASCII y los argumentos están separados por un espacio en blanco.
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 u otro . El archivo no contiene metadatos que indiquen qué espacio de color se está utilizando.
Ejemplo de PBM
Un ejemplo sencillo del formato PBM es el siguiente:

P1 # Este es un ejemplo de mapa de bits de la letra "J" 6 10 0 0 0 0 1 0 0 0 0 0 1 0 0 0 0 0 1 0 0 0 0 0 1 0 0 0 0 0 1 0 0 0 0 0 1 0 1 0 0 0 1 0 0 1 1 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0
La cadena P1 identifica el formato del archivo. El signo de número introduce un comentario. Los dos números siguientes indican el ancho y la altura. La matriz siguiente proporciona los valores de los píxeles. Dado que el formato PBM es monocromático y solo admite dos tonos, blanco y negro, la imagen se describe únicamente con unos y ceros. Esto se conoce como mapa de bits .
Las celdas de la matriz no necesitan estar alineadas; el formato ignora los espacios en blanco y los saltos de línea en la sección de datos. La siguiente imagen muestra lo mismo:
P1 # Este es un ejemplo de mapa de bits de la letra "J" 6 10 000010000010000010000010000010000010100010011100000000000000
Un valor de 0 indica un píxel blanco, y un valor de 1, un píxel negro. Esto difiere de los demás formatos, donde los valores más altos indican píxeles más brillantes.
El formato binario P4 de la misma imagen representa cada píxel con un bit. El ancho de la fila en píxeles se indica en la cabecera, empaquetada a una longitud de 8 píxeles o un byte. El primer píxel de la fila es el bit más significativo. Los bits adicionales utilizados para completar la longitud a un byte se ignoran. La siguiente fórmula permite calcular el número de bytes necesarios: ⌈ ancho / 8⌉ * alto . Siguiendo el ejemplo anterior, una cuadrícula de ⌈6 / 8⌉ * 10 requeriría 10 bytes en lugar de 7,5.
P4 # Este es un ejemplo de formato binario de la letra "J", con cada byte en notación decimal. 6 10 8 8 8 8 8 8 136 112 0 0
Ejemplo de PGM
Los formatos PGM y PPM incluyen un parámetro adicional para el valor máximo (número de tonos grises entre el negro y el blanco) después de las dimensiones X e Y y antes de los datos de píxeles propiamente dichos. El negro se representa con un valor de 0 y el valor máximo con un valor de blanco.

P2 # Muestra la palabra "FEEP" 24 7 15 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 3 3 3 3 0 0 7 7 7 7 0 0 11 11 11 11 0 0 15 15 15 15 0 0 3 0 0 0 0 0 7 0 0 0 0 0 11 0 0 0 0 0 15 0 0 15 0 0 3 3 3 0 0 0 7 7 7 0 0 0 11 11 11 0 0 0 15 15 15 15 0 0 3 0 0 0 0 0 7 0 0 0 0 0 11 0 0 0 0 0 15 0 0 0 0 0 3 0 0 0 0 0 7 7 7 7 0 0 11 11 11 11 0 0 15 0 0 0 0 0 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 salto de línea al final de cada línea).

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" que aparece 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 2 255 255 0 0 0 255 0 0 0 255 255 255 0 255 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 (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. 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, por lo que requiere más espacio y ancho de banda que un formato comprimido. Por ejemplo, la imagen PNG ( Portable Network Graphics ) de 192 × 128 píxeles tiene un tamaño de archivo de 166 bytes. Al convertirla a una imagen PPM de 192 × 128 píxeles, el tamaño del archivo es de 73 848 bytes. Un 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 fotografía, es mejor convertirla a JPEG , que produce una mayor reducción de tamaño de archivo.
El formato PPM se utiliza generalmente como formato intermedio para el procesamiento de imágenes antes de convertirlas a un formato más eficiente como PNG, sin que se produzca ninguna pérdida de información en el paso intermedio .
La imagen mostrada arriba, utilizando solo 0 o el valor máximo para los canales rojo, verde y azul, se puede codificar de la siguiente manera:
P3 # La misma imagen con ancho 3 y alto 2, # utilizando 0 o 1 por color (rojo, verde, azul) 3 2 1 1 0 0 0 1 0 0 0 1 1 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 solo espacio dentro de los encabezados PNM. Para los formatos simples (P1, P2 y P3), esto también se aplica a las líneas de mapa de píxeles:
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 de 8 bits. Si bien el formato ASCII puede admitir mayores profundidades de bits, aumenta el tamaño de los archivos y ralentiza las operaciones de lectura y escritura. Muchos programadores han extendido el formato para permitir mayores profundidades de bits. Al usar mayores profundidades de bits, el orden de bytes del archivo es importante. Varias implementaciones no han coincidido en qué orden de bytes usar, y algunas relacionaron el orden de bytes de 16 bits con el orden de empaquetamiento de píxeles. [ 11 ] La documentación de PGM y PPM dice que el byte más significativo va primero y la implementación de Netpbm usa el orden de bytes big-endian. [ 12 ]
32 bits
El PFM (Portable Floatmap) es la extensión no oficial de punto flotante de precisión simple IEEE 754 de cuatro bytes. [ 13 ] [ 14 ] [ 15 ]
- La primera línea es el texto ASCII "PF" para un archivo en color o "Pf" para un archivo en escala de grises.
- 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 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.
- La tercera línea de texto ASCII contiene un número decimal distinto de cero que indica el formato little-endian para los datos de píxeles cuando es negativo y el formato big-endian cuando es positivo. 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 permiten comentarios a continuación).
Después del encabezado del archivo, cada píxel se especifica con un número de coma flotante de izquierda a derecha y de abajo hacia arriba. Algunos programas sugieren PF4 como una extensión adicional para el formato RGBA. [ 16 ]
PFM es compatible con los programas Photoshop , [ 17 ] GIMP e ImageMagick . También es compatible con la implementación de referencia de facto netpbm. [ 13 ]
Programas
El paquete Netpbm contiene más de 350 programas, [ 18 ] la mayoría de los cuales tienen "pbm", "pgm", "ppm", "pam" o "pnm" en sus nombres. Por ejemplo, se podría usar pamscalepara reducir una imagen en un 10%, pamcomppara superponer una imagen sobre otra, pbmtextpara crear una imagen de texto o para reducir el número de colores en una imagen con pnmquant.
Los programas están diseñados como bloques de construcción mínimos que pueden usarse en diversas combinaciones para realizar otras tareas. El paquete Netpbm puede, por ejemplo, usar dos programas de conversión sucesivos para convertir una imagen en color en formato GIF en un archivo .bmp :
regaloopnm algunafoto.gif > algunafoto.ppm ppmtobmp algunaimagen.ppm > algunaimagen.bmp
Este tipo de operación se suele realizar mediante una canalización para ahorrar tiempo de ejecución y evitar la creación de un archivo temporal:
giftopnm algunafoto.gif | ppmtobmp > algunafoto.bmp
Los programas Netpbm se utilizan frecuentemente como intermediarios para convertir entre formatos poco comunes. Por ejemplo, puede que no exista una herramienta para convertir directamente un volcado de ventana X11 (formato XWD ) a un archivo PICT de Macintosh , pero se puede hacer ejecutando xwdtopnm, y luego ppmtopict. (Las herramientas que indican 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 . [ 19 ]
Historia
El formato PBM (blanco y negro) fue inventado por Jef Poskanzer a mediados de la década de 1980. En aquel entonces, no existía un método estándar y fiable para enviar archivos binarios por correo electrónico, y el intento de enviar cualquier cosa que no fuera ASCII de 7 bits solía provocar la corrupción de datos . PBM se diseñó para permitir el envío de imágenes por correo electrónico sin que se corrompieran. Poskanzer lanzó el precursor de Netpbm, llamado Pbmplus, en 1988. A finales de ese mismo año, Poskanzer había desarrollado los formatos PGM (escala de grises) y PPM (color) y los lanzó junto con Pbmplus.
La última versión de Pbmplus se publicó el 10 de diciembre de 1991. Poskanzer no volvió a lanzar 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 quedar abandonado. En 1999, el paquete Netpbm fue retomado por su actual responsable, Bryan Henderson.
En 2000, se agregó PAM a los formatos de archivo de la biblioteca Netpbm, lo que permitió un canal alfa. [ 20 ]
El nombre Netpbm proviene de la colaboración entre los desarrolladores del programa a través de Internet , algo destacable en aquel entonces; el sistema operativo NetBSD y el juego NetHack recibieron sus nombres de forma similar. (A diferencia del formato Portable Network Graphics (PNG), más extendido posteriormente, la palabra "net" en el nombre no se refiere a que la imagen en sí esté optimizada para su transferencia a través de una red).
Formato gráfico PAM
Portable Arbitrary Map ( PAM ) es una extensión de los formatos gráficos binarios P4...P6 anteriores , introducida 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 .
- El atributo de profundidad define el número de canales de la imagen, como 1 para imágenes en escala de grises y 3 para imágenes RGB.
- El atributo de tipo de tupla especifica qué tipo de imagen representa el archivo PAM, lo que permite que represente los formatos Netpbm más antiguos, así como que se extienda a nuevos usos, por ejemplo, la transparencia .
PAM es compatible con XnView y FFmpeg . [ 22 ] [ 23 ] 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 otros formatos) finaliza con un cierre explícito: "ENDHDR" seguido de un espacio en blanco. Los saltos de línea en un encabezado PAM son significativos; en PNM, los saltos de línea son espacios en blanco.
No existe una versión simple (legible para humanos, basada en ASCII ) de PAM. Los archivos PAM siempre son binarios, y los intentos de usar el modificador -plaincon programas Netpbm que generan 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), que corresponde a PBM, PAM utiliza un byte por píxel, en lugar de un bit por píxel como en PBM (lo que permite almacenar ocho píxeles en un byte). Además, el valor 1 en una imagen PAM representa el blanco ("luz encendida"), a diferencia del negro en PBM ("tinta encendida").
Transparencia
Todos los tipos de tuplas básicas (BLANCO Y NEGRO, ESCALA DE GRIES 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 del artículo sobre BMP muestra una imagen RGBA con 4×2=8 píxeles azules, verdes, rojos y blancos; semitransparente (0x7F) en la primera fila inferior, opaco (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 el tercer byte de cada píxel. Las filas BMP suelen estar dispuestas de abajo hacia arriba, mientras que para PAM y PNM se proporcionan de arriba hacia abajo (es decir, para este ejemplo 0000FFFF 00FF00FF FF0000FF FFFFFFFF 0000FF7F 00FF007F FF00007F FFFFFF7F). El encabezado PAM para este ejemplo podría ser:

P7 ANCHO 4 ALTURA 2 PROFUNDIDAD 4 VALOR MÁXIMO 255 TIPO DE TUPL RGB_ALFA ENDHDR
Extensiones
El mecanismo de tipo tupla de PAM permite muchas extensiones. En teoría, PAM se puede extender para representar modelos de color como CMYK.
El formato no se limita a los gráficos; su definición permite utilizarlo para matrices tridimensionales arbitrarias de enteros sin signo. Algunos programas del paquete Netpbm, como 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 ofrecida con su propia licencia de derechos de autor. Un análisis realizado por el desarrollador de Debian, Steve McIntyre, en 2001, sugiere que en su mayoría se trata de licencias de software libre, una licencia no comercial (no libre) y una docena sin ninguna licencia ofrecida (por lo tanto, también no libres). Como se menciona en el análisis, obviamente no abarca los cambios posteriores. [ 24 ]
Véase también
- Biblioteca de gráficos GD
- Magia gráfica
- ImageMagick
- Lista de comandos de Unix
- X PixMap (comparación de PBM y XPM)
- Mapa de bits X
Referencias
- 1 2 "Historia de Netpbm" . Consultado el 17 de marzo de 2010 .
- ↑ "Historial de cambios" . Consultado el 14 de mayo de 2025 .
- ↑ Henderson, Bryan (2013). "Getting Netpbm" . Sourceforge . Recuperado el 2 de febrero de 2021 .
- ↑ .pbm El tipo MIME no está registrado en IANA.
- ↑ .pgm El tipo MIME no está registrado en IANA
- ↑ .ppm El tipo MIME no está registrado en IANA
- 1 2 .pnm El tipo MIME no está registrado en IANA.
- 1 2 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 .
- ↑ "El formato PBM" . Manual de usuario de Netpbm .
- ↑ "Diseño del formato de archivo PAM" .
- ↑ "Manual de usuario de Pnmtotiff" . Documento de netpbm en SourceForge . 27 de marzo de 2005.
- ↑ "página man pamendian" . Documento netpbm en SourceForge . 10 de octubre de 2012.
- 1 2 "Descripción del formato PFM" .
- ↑ "PFM (Portable Float Map) - Simplemente resuelve el problema del formato de archivo" .
- ↑ "Documentación del formato PFM" . Archivado del original el 31/12/2019.
- ↑ "Secuencias de fuego HDR sintéticas" .
- ↑ "Formatos de archivo en Adobe Photoshop" .
- ↑ "Página principal de Netpbm" . Consultado el 3 de mayo de 2023 .
- ↑ Dairiki, Jeff. "Convertidor X-Face en línea" . Consultado el 2 de marzo de 2014 .
- ↑ "Especificación del formato PAM" .
- ↑ Tipo MIME no registrado en IANA : especificación de formato PAM
- ↑ Gougelet, Pierre-Emmanuel (19 de febrero de 2015). "XnView 2.30" . XnView . Consultado el 20 de febrero de 2015.
Se agregó el formato PAM
. - ↑ "Formatos de imagen" . Documentación general de FFmpeg . 2014. Consultado el 23 de febrero de 2014 .
- ↑ "Análisis de los derechos de autor de Netpbm realizado por Steve McIntyre en 2001" .
Enlaces externos
- Software gráfico gratuito
- Software libre programado en C
- Software libre programado en Perl
- formatos de archivos gráficos
- Bibliotecas gráficas
- Software de procesamiento de imágenes
- Herramientas de programación Unix