From c3ef3326d8ca3d9209afd34f6220f78b1eb0dbc2 Mon Sep 17 00:00:00 2001 From: Mischa POSLAWSKY Date: Fri, 29 Oct 2021 15:34:18 +0200 Subject: [PATCH] codec: gif format (best effort comparison) Should definitely be included as major legacy web format, despite palette restrictions not present in other competitors. Colour quantisation can be graded as quality loss similar to 4:2:0 subsampling. --- codec.inc.pl | 43 +++++++++++++++++++++++++++++++++++++++++-- codec.plp | 2 +- 2 files changed, 42 insertions(+), 3 deletions(-) diff --git a/codec.inc.pl b/codec.inc.pl index ab7e841..6b6b4e0 100644 --- a/codec.inc.pl +++ b/codec.inc.pl @@ -5,6 +5,10 @@ codec => { name => 'JPEG', available => 1992, }, + gif => { + name => 'GIF', + available => 1987, + }, png => { name => 'PNG', available => 1996, @@ -38,6 +42,7 @@ feature => { name => 'compression (photo)', score => { jpeg => 3, + gif => 1, png => 1, jp2k => 4, webp => 3, @@ -52,6 +57,7 @@ feature => { name => 'thumbnails', score => { jpeg => 2, + gif => 1, png => 1, jp2k => 3, webp => 4, @@ -65,6 +71,7 @@ feature => { name => 'medium fidelity', score => { jpeg => 3, + gif => 1, png => 1, jp2k => 4, webp => 3, @@ -78,6 +85,7 @@ feature => { name => 'high fidelity', score => { jpeg => 3, + gif => 1, png => 2, jp2k => 4, webp => 2, @@ -91,6 +99,7 @@ feature => { name => 'lossless', score => { jpeg => 1, + gif => 1, png => 2, jp2k => 4, webp => 3, @@ -103,6 +112,7 @@ feature => { name => 'compression (other images)', score => { jpeg => 2, + gif => 1, png => 3, jp2k => 2, webp => 4, @@ -116,6 +126,7 @@ feature => { name => 'lossy non-photographic', score => { jpeg => 2, + gif => 2, png => 3, jp2k => 2, webp => 4, @@ -128,6 +139,7 @@ feature => { name => 'lossless non-photographic', score => { jpeg => 1, + gif => 1, png => 4, jp2k => 2, webp => 5, @@ -140,6 +152,7 @@ feature => { name => 'mixed photo/nonphoto', score => { jpeg => 2, + gif => 1, png => 2, jp2k => 2, webp => 3, @@ -151,6 +164,7 @@ feature => { speed => { score => { jpeg => 5, + gif => 4, png => 4, jp2k => 3, webp => 4, @@ -165,6 +179,7 @@ feature => { name => 'single-core encode', score => { jpeg => 5, + gif => 3, # palette conversion png => 3, jp2k => 4, webp => 4, @@ -178,6 +193,7 @@ feature => { name => 'single-core decode', score => { jpeg => 5, + gif => 5, png => 5, jp2k => 4, webp => 5, @@ -191,6 +207,7 @@ feature => { name => 'pararellizable', score => { jpeg => 2, + gif => 2, png => 2, jp2k => 4, webp => 2, @@ -202,6 +219,7 @@ feature => { limits => { score => { jpeg => 3, + gif => 2, png => 4, jp2k => 5, webp => 2, @@ -216,6 +234,7 @@ feature => { name => 'maximum image dimensions', score => { jpeg => 3, + gif => 3, png => 4, jp2k => 5, webp => 1, @@ -225,6 +244,7 @@ feature => { }, data => { jpeg => '65k²', # 2**16 + gif => '65k²', # 2**16 png => '2G²', # 2**31 jp2k => '4G²', # 2**32 webp => '16k²', # 2**14 @@ -238,6 +258,7 @@ feature => { name => 'precision (max. bit depth)', score => { jpeg => 2, + gif => 2, png => 4, jp2k => 5, webp => 2, @@ -247,6 +268,7 @@ feature => { }, data => { jpeg => 8, + gif => 8, png => 16, jp2k => 38, webp => 8, @@ -260,6 +282,7 @@ feature => { name => 'can do (lossy) 4:4:4', score => { jpeg => 'y', + gif => 'y', png => 'y', jp2k => 'y', webp => 'n', @@ -273,6 +296,7 @@ feature => { name => 'wide gamut/HDR', score => { jpeg => 'n', + gif => 'n', png => 'y', jp2k => 'y', webp => 'n', @@ -286,6 +310,7 @@ feature => { name => 'maximum number of channels', score => { jpeg => 2, + gif => 1, png => 2, jp2k => 5, webp => 2, @@ -295,6 +320,7 @@ feature => { }, data => { jpeg => 4, # cmyk + gif => 3, png => 4, # cmyk jp2k => 2**15, webp => 4, @@ -306,6 +332,7 @@ feature => { features => { score => { jpeg => 2, + gif => 2, png => 3, jp2k => 4, webp => 2, @@ -320,6 +347,7 @@ feature => { name => 'supports animation', score => { jpeg => 2, + gif => 'y', png => 4, jp2k => 2, webp => 'y', @@ -338,6 +366,7 @@ feature => { name => 'progressive decoding', score => { jpeg => 4, + gif => 2, png => 2, jp2k => 5, webp => 'n', @@ -351,6 +380,7 @@ feature => { name => 'alpha transparency', score => { jpeg => 'n', + gif => 3, png => 'y', jp2k => 'y', webp => 'y', @@ -358,12 +388,16 @@ feature => { avif => 'y', jxl => 'y', }, + data => { + gif => '1 bit', + }, }, depthmap => { parent => 'features', name => 'depth map', score => { jpeg => 'n', + gif => 'n', png => 'n', jp2k => 'n', webp => 'n', @@ -377,6 +411,7 @@ feature => { name => 'overlays (layers)', score => { jpeg => 'n', + gif => 'y', png => 'n', jp2k => 'n', webp => 'n', @@ -390,6 +425,7 @@ feature => { name => 'authoring workflow suitability', score => { jpeg => 2, + gif => 2, png => 3, jp2k => 3, webp => 2, @@ -403,7 +439,8 @@ feature => { name => 'generation loss resilience', score => { jpeg => 4, - png => 'n/a', + png => 0, + gif => 0, jp2k => 3, webp => 2, heic => 3, @@ -411,6 +448,7 @@ feature => { jxl => 4, }, data => { + gif => 'n/a', png => 'n/a', }, }, @@ -419,6 +457,7 @@ feature => { name => 'lossless JPEG recompression', score => { jpeg => 0, + gif => 'n', png => 'n', jp2k => 'n', webp => 'n', @@ -434,8 +473,8 @@ feature => { name => 'royalty-free', score => { jpeg => 5, - png => 5, gif => 5, # patents expired + png => 5, jp2k => 3, # specs not freely available webp => 4, # submarine risk heic => 'n', # patents enforced diff --git a/codec.plp b/codec.plp index 27a6cb7..35b97ed 100644 --- a/codec.plp +++ b/codec.plp @@ -22,7 +22,7 @@ my %BOOLSCORE = (y => 5, n => 1);
- +
feature <: my @codecs = sort { -- 2.30.0