+ jpeg => 5,
+ gif => [5, undef, 'patented before 2003'],
+ png => 5,
+ jp2k => [3, undef, 'ISO specification not freely available'],
+ webp => [4, undef, 'free format, low remaining risk of patent trolls'],
+ heic => ['n', undef, 'heavily patented'],
+ avif => [4, undef, 'free format, risk of patent trolls'],
+ jxl => [4, undef, 'free format, risk of patent trolls'],
+ },
+ children => [],
+ },
+ support => {
+ score => {
+ jpeg => 5,
+ gif => 5,
+ png => 5,
+ jp2k => [2, undef, 'Apple only'],
+ webp => [4, undef, 'modern browsers'],
+ heic => [1, undef, 'stored by latest cameras, no browser support'],
+ avif => [3, undef, 'all modern browsers except Safari and Edge'],
+ jxl => [2, undef, 'upcoming in most browsers'],
+ },
+ },
+ overhead => {
+ name => 'container overhead (file size)',
+ score => {
+ png => [3, 67, 'upto 70 bytes for specific RGBA'],
+ jpeg => [2, 160, '159 bytes minimum for gray, 288 for specific colours'],
+ gif => [4, 35, '43 bytes for transparent'],
+ webp => [4, 34, 'black or transparent lossless; 44-92 bytes lossy'],
+ bpg => [4, 31, 'lossy 29-62 bytes, lossless 37-160'],
+ flif => [5, 14, 'black or transparent; 20 bytes for specific RGBA'],
+ pnm => [5, 8, 'monochrome text PBM; 12 bytes PPM; 69 bytes PAM'],
+ jxl => [5, 12, '512×256 black pixels'],
+ avif => [1, 282, 'container overhead; 457 bytes with alpha'],
+ jp2k => [2, 123, 'experimental results, likely not optimal'],
+ heic => [1, 386],