X PixMap
| X PixMap | |
|---|---|
| Some text editors, for example gvim, can display xpm images in graphical form. | |
| Filename extension | .xpm |
| Internet media type |
image/x-xpixmap[1] |
| Developed by | BULL Research |
| Type of format | Image file formats |
| Extended from | XBM |
| Open format? | yes |
X PixMap (XPM) is an image file format used by the X Window System, created in 1989 by Daniel Dardailler and Colas Nahaboo working at Bull Research Center at Sophia Antipolis, France, and later enhanced by Arnaud Le Hors.[2] [3]
It is intended primarily for creating icon pixmaps, and supports transparent pixels. Derived from the earlier XBM syntax, it is a plain text file in the XPM2 format or of a C programming language syntax, which can be included in a C program file.[2]
History
[edit ]XPM1
[edit ]The first (1989) XPM format is relatively similar to the XBM format.[a] Compared to XBM, it uses additional macro definitions and variables for indexed colors, and replaces bits with characters for describing the image. The following is a black-and-white image in the 1989 XPM format.
#define XFACE_format 1 #define XFACE_width 48 #define XFACE_height 48 #define XFACE_ncolors 2 #define XFACE_chars_per_pixel 1 staticchar*XFACE_colors[]={ "a","#ffffff", "b","#000000" }; staticchar*XFACE_pixels[]={ "abaabaababaaabaabababaabaabaababaabaaababaabaaab", // and so on for 48 rows with 48 pixels
XPM2
[edit ]XPM2 (1990) simplifies the format by removing all C code.[b] [c] The structure is simplified to
! XPM2 <Values> <Colors> <Pixels> <Optional Extensions>
- The value section describes the overall dimension of the image similar to the
#definestatements. - The color section defines the values, and a new concept of the "type" of the color. The types may be c for "color", m for "monochrome" output, g for "grayscale", and s for "symbolic", explaining what a defined color is supposed to do.
- The pixels and optional extensions remain as in the original format.
The above file, with width 48, height 4, 2 colors, and 1 character per pixel, becomes:
! XPM2 48 4 2 1 a c #FFFFFF b c #000000 abaabaababaaabaabababaabaabaababaabaaababaabaaab abaabaababaaabaabababaabaabaababaabaaababaabaaab abaabaababaaabaabababaabaabaababaabaaababaabaaab abaabaababaaabaabababaabaabaababaabaaababaabaaab
Colors
[edit ]In addition to hexcodes, the colors can be any of the X11 color names. In addition, None indicates transparency.[4] [5]
The "symbolic" feature permits adjusting colors depending on the context where they are used. Code such as s border c blue could be adjusted on a blue background.
Many-color encoding
[edit ]One tool is known to use only a to p for 16 colors, switching to aa up to dp for 64 colors, but still reading single character encodings for 64 colors; compare Base64.
With more colors the codes use more characters, e.g. aa up to pp for 16 ×ばつ 16 = 256 colors. This is less useful for text editors, because a string ab could be actually the middle of two adjacent pixels dabc. Spaces are allowed as color code, but might be a bad idea depending on the used text editor. Without control codes, backslash, and quote (needed in XPM1 and XPM3) 128 −ひく 33 −ひく 2 =わ 93 ASCII characters are available for single character color codes.
Simplified example: 90 US-ASCII characters could be arranged into nine non-overlapping sets of 10 characters. Thus unambiguous strings of nine characters could set the color of each pixel by its XPM palette index with up to 109 = 1000000000 colors (compare to GIF, which supports only 256).
For XPM2 it is clear how many lines belong to the image – two header lines, the second header line announcing the number of color codes (2 lines in the example above) and rows (height 4 in the example above), e.g. 2 + 2 + 4 = 8 lines.
XPM3
[edit ]The current and last format is XPM3 (1991). It re-introduces the C wrapper, but instead of explicitly showing a file's structure, the strings stored are essentially identical to XPM2.
/* XPM */ staticchar*XFACE[]={ "48 4 2 1", "a c #ffffff", "b c #000000", "abaabaababaaabaabababaabaabaababaabaaababaabaaab", "abaabaababaaabaabababaabaabaababaabaaababaabaaab", "abaabaababaaabaabababaabaabaababaabaaababaabaaab", "abaabaababaaabaabababaabaabaababaabaaababaabaaab" };
If the "values" line contains six instead of four numbers, the additional values indicate the coordinates of a "hotspot", where 0 0 is the upper left corner of a box containing the icon and the default. A "hotspot" is used for mouse pointers and similar applications.
Comparison with other formats
[edit ]The following code displays the same blarg file in the XBM, XPM and PBM formats.
XBM version:
#define test_width 16 #define test_height 7 staticchartest_bits[]={ 0x13,0x00,0x15,0x00,0x93,0xcd,0x55,0xa5,0x93,0xc5,0x00,0x80, 0x00,0x60};
XPM2 version:
! XPM2 16 7 2 1 * c #000000 . c #ffffff **..*........... *.*.*........... **..*..**.**..** *.*.*.*.*.*..*.* **..*..**.*...** ...............* .............**.
XPM3 version:
/* XPM */ staticchar*blarg_xpm[]={ "16 7 2 1", "* c #000000", ". c #ffffff", "**..*...........", "*.*.*...........", "**..*..**.**..**", "*.*.*.*.*.*..*.*", "**..*..**.*...**", "...............*", ".............**." };
PBM file:
P1 16 7 1 1 0 0 1 0 0 0 0 0 0 0 0 0 0 0 1 0 1 0 1 0 0 0 0 0 0 0 0 0 0 0 1 1 0 0 1 0 0 1 1 0 1 1 0 0 1 1 1 0 1 0 1 0 1 0 1 0 1 0 0 1 0 1 1 1 0 0 1 0 0 1 1 0 1 0 0 0 1 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1 0 0 0 0 0 0 0 0 0 0 0 0 0 1 1 0
Application support
[edit ]ACDSee, Amaya, CorelDRAW, GIMP, ImageMagick, IrfanView (formats plugin), PaintShop Pro, PMView, Photoshop (plugins), and XnView among others support XPM.[6] [7] Gravatar also supports XPM.[8] [9]
An X11 libXpm vulnerability was fixed in 2005,[10] and three more in 2023.[11]
FFmpeg version 3.3 or later can decode XPM.[12]
See also
[edit ]- Netpbm – Toolkit for manipulation of images
- CLUT – In computer graphics, a finite set of available colorsPages displaying short descriptions of redirect targets
- X BitMap – File format
Notes
[edit ]- ^ For a description of this format in lieu of the manual (not found on the Internet), use xpm-contrib (formerly part of libXpm proper) converter (xpm2ppm, xpm1to3, xpm1to2c) source code.
- ^ It is also acceptable to use programming language syntaxes for string arrays, but only the C syntax is attested. The "XPM2 C" syntax eventually became the only format in XPM version 3.
- ^ For references on this syntax, see https://gitlab.freedesktop.org/xorg/lib/libxpm/-/blob/master/NEWS.old and the "history" section of libXpm 3.4 manual.
References
[edit ]- ^ .xpm MIME type not registered at IANA
- ^ a b Le Hors, Arnaud (1996年02月01日). XPM Manual: The X PixMap Format (PDF). Groupe Bull. pp. 7–8. Retrieved 2014年01月01日.
- ^ Daniel Dardailler (1996年07月15日). "The XPM Story". Colas Nahaboo and Arnaud Le Hors. Archived from the original on 1997年06月07日. Retrieved 2014年01月01日.
- ^ "The XPM FAQ". X.Org Foundation. 1996. Retrieved 2016年03月12日.
- ^ Murray, James D.; Vanryper, William (1996). XPM File Format Summary . O'Reilly & Associates. ISBN 1-56592-161-5 . Retrieved 2014年01月01日.
{{cite book}}:|work=ignored (help) - ^ Nir Sofer. ".xpm Extension" . Retrieved 2014年01月12日.
- ^ "File Type: X Windows Pixmap". Windows File Association. Microsoft. 2013. Retrieved 2014年01月12日.
- ^ Gravatar unofficial, no XPM2
- ^ Steve Kinzler (2005). "Picons Archive" . Retrieved 2014年01月06日.
picons are in either monochrome XBM format or color XPM and GIF formats
- ^ "libXpm library contains multiple integer overflow vulnerabilities". US-CERT . 2005年10月06日. VU#537878. Retrieved 2014年01月01日.
- ^ "X.Org Security Advisory: Issues handling XPM files in libXpm prior to 3.5.15". 2023年01月17日.
- ^ "FFmpeg 3.3 "Hilbert"". FFmpeg. 2017年04月13日. Retrieved 2017年10月28日.
XPM decoder
See also
[edit ]- X Window System (X11) and X11 color names
- PBM (mono), PGM (grayscale), PPM (color), PNM (any)
- X BitMap