codec: calculate theoretical minimal overhead
[sheet.git] / codec.inc.pl
index 2b1f59031ab95c10428bf8c09b2c500a3dcd60c1..f4d90e345224c8738d0ebcfb183a0f4462eed074 100644 (file)
@@ -36,7 +36,7 @@ codec => {
 },
 feature => {
        default => {
-               children => [qw( quality_photo quality_art speed limits features royalties )],
+               children => [qw( quality_photo quality_art speed limits features royalties overhead support )],
        },
        quality_photo => {
                name => 'compression (photo)',
@@ -438,5 +438,33 @@ feature => {
                },
                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],
+               },
+       },
 },
 }