5 name => '<abbr title="Joint Photographic Experts Group">JPEG</abbr>',
9 name => '<abbr title="Graphics Interchange Format">GIF</abbr>',
13 name => '<abbr title="Portable Network Graphics">PNG</abbr>',
25 name => '<abbr title="High Efficiency Image Container (HEVC in HEIF)">HEIC</abbr>',
29 name => '<abbr title="AV1 Image File Format">AVIF</abbr>',
39 children => [qw( quality_photo quality_art speed limits features royalties )],
42 name => 'compression (photo)',
53 children => [qw( quality_photo_1 quality_photo_2 quality_photo_3 quality_photo_ll )],
56 parent => 'quality_photo',
70 parent => 'quality_photo',
71 name => 'medium fidelity',
84 parent => 'quality_photo',
85 name => 'high fidelity',
98 parent => 'quality_photo',
112 name => 'compression (other images)',
123 children => [qw( quality_art_2 quality_art_ll quality_art_mixed )],
126 name => 'lossy non-photographic',
139 name => 'lossless non-photographic',
151 quality_art_mixed => {
152 name => 'mixed photo/nonphoto',
175 children => [qw( speed_encode speed_decode speed_parallel )],
179 name => 'single-core encode',
182 gif => 3, # palette conversion
193 name => 'single-core decode',
207 name => 'pararellizable',
230 children => [qw( max_dimensions max_bitdepth color_444 hdr max_channels )],
234 name => 'maximum image dimensions',
236 jpeg => [3, '65k²'], # 2**16
237 gif => [3, '65k²'], # 2**16
238 png => [4, '2G²'], # 2**31
239 jp2k => [5, '4G²'], # 2**32
240 webp => [1, '16k²'], # 2**14
241 heic => [2,'8k×4k+', 'tilable, only 512×512 on Apple'], # 8193x4320
242 avif => [3, '65k²+', 'tilable, 7680×4320 with Advanced profile'], # 2**16
243 jxl => [4, '1G²'], # 2**30
248 name => 'precision (max. bit depth)',
251 gif => [1, 8, '256 colour palette per frame'],
255 heic => [3, 10], #TODO 16?
256 avif => [3, 12, '8, 10, 12 bit'],
257 jxl => [5, 32, '24-bit integer or 32-bit float'],
262 name => 'chroma subsampling',
264 jpeg => ['y', undef, '4:2:0, 4:2:2, 4:4:4'],
268 webp => [1, '4:2:0'],
269 heic => [1, '4:2:0'],
270 avif => ['y', undef, '4:2:0, 4:2:2, 4:4:4'],
271 jxl => ['y', undef, 'for JPEG compatibility'],
276 name => 'wide gamut/HDR',
290 name => 'maximum number of channels',
292 jpeg => [3, 4, 'RGB or CMYK'],
293 gif => [3, 3, 'RGB palette'],
294 png => [3, 4, 'RGBA'],
296 webp => [3, 4, 'RGBA'],
297 heic => [3, 3, 'RGB, separate alpha and depth'],
298 avif => [3, 3, 'RGB, separate alpha and depth'],
299 jxl => [4, 4099, 'native XYB'],
313 children => [qw( animation progressive alpha depthmap overlays authoring reencode compat_jpeg )],
316 parent => 'features',
317 name => 'supports animation',
319 jpeg => [2, 'MJPEG'],
321 png => [4, 'APNG', 'later backwards-compatible extension'],
330 parent => 'features',
331 name => 'progressive decoding',
344 parent => 'features',
345 name => 'alpha transparency',
358 parent => 'features',
372 parent => 'features',
373 name => 'overlays (layers)',
386 parent => 'features',
387 name => 'authoring workflow suitability',
400 parent => 'features',
401 name => 'generation loss resilience',
414 parent => 'features',
415 name => 'lossless JPEG recompression',
428 name => 'royalty-free',
431 gif => [5, undef, 'patented before 2003'],
433 jp2k => [3, undef, 'ISO specification not freely available'],
434 webp => [4, undef, 'free format, low remaining risk of patent trolls'],
435 heic => ['n', undef, 'heavily patented'],
436 avif => [4, undef, 'free format, risk of patent trolls'],
437 jxl => [4, undef, 'free format, risk of patent trolls'],