index.md - sites - public wiki contents of suckless.org | |
git clone git://git.suckless.org/sites | |
Log | |
Files | |
Refs | |
--- | |
index.md (4996B) | |
--- | |
1 FAQ | |
2 === | |
3 | |
4 Why yet another image format? | |
5 ----------------------------- | |
6 Current image formats have integrated compression, making it complicated… | |
7 read the image data. One is forced to use complex libraries like libpng, | |
8 libjpeg, libjpeg-turbo, giflib and others, read the documentation and wr… | |
9 lot of boilerplate in order to get started. | |
10 | |
11 Farbfeld leaves this behind and is designed to be as simple as possible, | |
12 leaving the task of compression to external tools. The simple design, wh… | |
13 the primary objective, implicitly leads to the very good compression | |
14 characteristics, as it often happens when you go with the UNIX philosoph… | |
15 Reading farbfeld images doesn't require any special libraries. The tools… | |
16 just a toolbox to make it easy to convert between common image formats a… | |
17 farbfeld. | |
18 | |
19 How does it work? | |
20 ----------------- | |
21 In Farbfeld, pattern resolution is not done while converting, but while | |
22 compressing the image. For example, farbfeld always stores the alpha-cha… | |
23 even if the image doesn't have alpha-variation. This may sound like a bi… | |
24 at first, but as soon as you compress an image of this kind, the | |
25 compression-algorithm (e.g. bz2) recognizes the pattern that every 48 bi… | |
26 16 bits store the same information. And the compression-algorithms get b… | |
27 and better at this. | |
28 | |
29 Same applies to the idea of having 16 bits per channel. It sounds excess… | |
30 but if you for instance only have a greyscale image, the R, G and B chan… | |
31 will store the same value, which is recognized by the compression algori… | |
32 easily. | |
33 | |
34 This effectively leads to filesizes you'd normally only reach with palet… | |
35 images, and in some cases bz2 even beats png's compression, for instance… | |
36 you're dealing with grayscale data, line drawings, decals and even photo… | |
37 | |
38 Why use 16-Bits-per-channel all the time? Isn't this a total waste? | |
39 ------------------------------------------------------------------- | |
40 Not when you take compression into account. To make this clearer, assume… | |
41 paletted image with 5 colors and no transparency. So the data is only a … | |
42 regular chunks (color1, ..., color5) in a certain order. Compression alg… | |
43 have been designed to recognize those chunks and can even look at how th… | |
44 chunks interact. | |
45 | |
46 Local tests have shown that farbfeld easily beats paletted PNG-images. T… | |
47 yourself and look at the bzipped results! There is no need for special | |
48 grayscale, palette, RGB, 1-, 2-, 4-, 8-, 16-Bit subformats. Just use 16-… | |
49 RGBA all the time and let compression take care of the rest. | |
50 | |
51 Which compression should I use? | |
52 ------------------------------- | |
53 bzip2 is recommended, which is widely available (anybody has it) and giv… | |
54 results. As time will move forward and new algorithms hit the market, th… | |
55 recommendation might be rethought. | |
56 | |
57 Is metadata supported? | |
58 ---------------------- | |
59 | |
60 Almost every image format out there has special offsets or locations | |
61 where metadata is stored. In itself, there are several different metadata | |
62 formats (Exif, XMP, etc.). For farbfeld, to keep it simple, there are | |
63 no provisions within the file format for metadata. Instead, one can | |
64 use so-called sidecar files (also known as buddy files or connected | |
65 files). As an example, to provide metadata for an image.ff.bz2, one can | |
66 add a file called image.xmp that contains XMP metadata for said image. | |
67 | |
68 An added advantage of this approach is that the metadata is independent | |
69 of the image compression. As argued above, compression is vital for | |
70 farbfeld to be used efficiently, but when thinking of an application | |
71 that lists farbfeld-images in a folder, it might want to access | |
72 metadata as fast as possible. | |
73 | |
74 The use of multiple files for one entity is a downside, but it wouldn't | |
75 be a problem at all if modern file systems supported forks. | |
76 | |
77 What about NetPBM? | |
78 ------------------ | |
79 NetPBM is considered to be the most simple format around, however, there… | |
80 room for improvement. In fact, it doesn't help that the format is subdiv… | |
81 into Portable BitMaps, Portable GrayMaps and Portable PixMaps. It's not … | |
82 when a manpage can't give a simple overview of a format in a few sentenc… | |
83 | |
84 NetPBM's big vice is that it has originally been developed to be hand-wr… | |
85 and passed around as plain text. A binary format exists, but still handl… | |
86 optional comments in the header, base 10 ASCII width and height values, | |
87 arbitrary whitespace inside the data and out-of-band image size and colo… | |
88 is too painful for the sane user. | |
89 | |
90 Judging from the usage of the format considering how long it's been arou… | |
91 it's no surprise it never really took off. Additionally, functionality l… | |
92 alpha channels and 16-Bit color depth can only be achieved via extension… | |
93 to it being a textual format it also lacks the desired compression | |
94 characteristics. | |
95 | |
96 The question you have to ask yourself is: Can I read in a format without | |
97 consulting the manpages? If your answer is yes, then the format is simple | |
98 enough. In this regard, NetPBM can be considered to be a failed format. |