use utf8;
+{
intro => 'Comparison of image encoding formats, based on <a href="https://cloudinary.com/blog/one_pixel_is_worth_three_thousand_words">Cloudinary</a> research.',
+keywords => [qw( image picture codec encoder encoding decode compression file format type mime )],
codec => {
jpeg => {
name => '<abbr title="Joint Photographic Experts Group">JPEG</abbr>',
},
feature => {
default => {
- children => [qw( quality_photo quality_art speed limits features royalties overhead support )],
+ children => [qw( quality_photo quality_art speed limits features royalties overhead support web )],
},
quality_photo => {
name => 'compression (photo)',
avif => 5,
jxl => 5,
},
- children => [qw( quality_photo_1 quality_photo_2 quality_photo_3 quality_photo_ll )],
+ children => [qw( quality_photo_ll quality_photo_3 quality_photo_2 quality_photo_1 quality_thumbs )],
},
- quality_photo_1 => {
+ quality_thumbs => {
parent => 'quality_photo',
name => 'thumbnails',
+ score => {
+ jpeg => 1,
+ pnm => 1,
+ gif => 2,
+ png => 3,
+ jp2k => 1,
+ webp => 2,
+ heic => 4,
+ avif => 4,
+ jxl => 3,
+ },
+ },
+ quality_photo_1 => {
+ parent => 'quality_photo',
+ name => 'low fidelity',
score => {
jpeg => 2,
pnm => 1,
jp2k => 4,
webp => 3,
heic => 3,
- avif => 3,
+ avif => 2,
jxl => 5,
},
},
avif => 4,
jxl => 5,
},
- children => [qw( animation progressive alpha depthmap overlays authoring reencode compat_jpeg )],
+ children => [qw( animation progressive alpha depthmap overlays vector authoring reencode compat_jpeg )],
},
animation => {
parent => 'features',
jxl => 5,
},
},
+ vector => {
+ parent => 'features',
+ name => 'vector drawing',
+ score => {
+ jpeg => 'n',
+ pnm => 'n',
+ gif => 'n',
+ png => 'n',
+ jp2k => 'n',
+ webp => 'n',
+ heic => 'n',
+ avif => 'n',
+ jxl => [2, undef, 'splines'],
+ },
+ },
alpha => {
parent => 'features',
name => 'alpha transparency',
},
children => [],
},
+ web => {
+ name => 'browser support',
+ score => {
+ jpeg => [5, undef, 'ubiquitous since first inline images (1993)'],
+ pnm => [1, undef, 'rarely by (unix) systems'],
+ xbm => [2, undef, 'common before 200X'],
+ gif => [5, undef, 'predates the web, but unrestricted since 2004'],
+ png => [5, undef, 'problematic prior to IE7, currently ubiquitous'],
+ jp2k => [2, undef, 'just Safari'],
+ webp => [4, undef, 'widespread since 2020'],
+ heic => [1, undef, 'no browser support'],
+ avif => [3, undef, 'significant since 2021 (Safari 2023, no Edge yet)'],
+ jxl => [2, undef, 'experimental, blocked by chrome'],
+ },
+ },
support => {
+ name => 'adoption',
score => {
- jpeg => 5,
- pnm => [2, undef],
- 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'],
+ jpeg => [5, undef, 'standard photography'],
+ pnm => [2, undef, 'uncomplicated bitmap interchange'],
+ gif => [4, undef, 'declining due to limitations'],
+ png => [5, undef, 'standard illustrations'],
+ jp2k => [3, undef, 'limited beyond Apple'],
+ webp => [4, undef, 'mostly online'],
+ heic => [2, undef, 'stored by latest cameras, interchange unlikely'],
+ avif => [3, undef, 'upcoming'],
+ jxl => [2, undef, 'ongoing'],
},
},
overhead => {