From 36a95f894a988cecec8f9371cd79159d8590df7f Mon Sep 17 00:00:00 2001 From: Rohan Kumar Date: Thu, 28 Jan 2021 13:10:40 -0800 Subject: [PATCH] Update preferred approach to image processing - Include AVIF - Include dark/light variants if applicable --- assets/p/website_colors.png | Bin 0 -> 15316 bytes assets/p/website_colors.webp | Bin 0 -> 14940 bytes content/posts/website-best-practices.gmi | 13 ++++++++----- content/posts/website-best-practices.md | 18 +++++++++--------- 4 files changed, 17 insertions(+), 14 deletions(-) create mode 100644 assets/p/website_colors.png create mode 100644 assets/p/website_colors.webp diff --git a/assets/p/website_colors.png b/assets/p/website_colors.png new file mode 100644 index 0000000000000000000000000000000000000000..1312e334731a6df5afe698abdba47e9a14745921 GIT binary patch literal 15316 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 aoR1oidS$>^6)p*0MmP1vlHUKw^8f%MNcB?y literal 0 HcmV?d00001 diff --git a/content/posts/website-best-practices.gmi b/content/posts/website-best-practices.gmi index ebafa2f..fb006b3 100644 --- a/content/posts/website-best-practices.gmi +++ b/content/posts/website-best-practices.gmi @@ -118,12 +118,15 @@ You also might want to use the HTML "" element, using JPEG/PNG as a fal Most of my images will probably be screenshots that start as PNGs. My typical flow: -1. Lossy compression with pngquant -2. Losslessly optimize the result with Oxipng and its Zopfli backend (slow) -3. Also create a lossless WebP from the lossy PNG, using cwebp -4. Include the resulting WebP in the page, with a fallback to the PNG using a "" element. +1. Re-size and crop the image. Convert to grayscale if colors aren't important. +2. Lossy compression with pngquant +3. Losslessly optimize the result with Oxipng and its Zopfli backend (slow) +4. Also create a lossless WebP from the lossy PNG and a lossy WebP from the source image, using cwebp. Pick the smaller of the two. +5. Include the resulting WebP in the page, with a fallback to the PNG using a `` element. +6. Create a lossy AVIF image from the original source image, and include it in the `` element if it's smaller than the WebP. +7. If the image is too light, repeat for a dark version of the image to display with a `prefers-dark-mode` media query. -It might seem odd to create a lossless WebP from a lossy PNG, but I've found that it's the best way to get the smallest possible image at the minimum acceptable quality for screenshots with solid backgrounds. +It might seem odd to create a lossless WebP from a lossy PNG, but I've found that it's often the best way to get the smallest possible image at the minimum acceptable quality for screenshots with solid backgrounds. In general, avoid using inline images just for decoration. Only use an image if it significantly adds to your content, and provide alt-text as a fallback. diff --git a/content/posts/website-best-practices.md b/content/posts/website-best-practices.md index 5054fcc..cfdb01a 100644 --- a/content/posts/website-best-practices.md +++ b/content/posts/website-best-practices.md @@ -96,10 +96,7 @@ About custom colors Some users' browsers set default page colors that aren't black-on-white. For instance, Linux users who enable GTK style overrides might default to having white text on a dark background. Websites that explicitly set foreground colors but leave the default background color (or vice-versa) end up being difficult to read. Here's an example: - - -This page with a grey background behind black/grey headers and white-on-white code snippets - +{{< picture name="website_colors" alt="This page with a grey background behind black/grey headers and white-on-white code snippets" >}} If you do explicitly set colors, please also include a dark theme using a media query: `@media (prefers-color-scheme: dark)`. For more info, read the relevant docs [on MDN](https://developer.mozilla.org/en-US/docs/Web/CSS/@media/prefers-color-scheme) @@ -120,12 +117,15 @@ You also might want to use the HTML `` element, using JPEG/PNG as a fal Most of my images will probably be screenshots that start as PNGs. My typical flow: -1. Lossy compression with `pngquant` -2. Losslessly optimize the result with `oxipng` and its Zopfli backend (slow) -3. Also create a lossless WebP from the lossy PNG, using `cwebp` -4. Include the resulting WebP in the page, with a fallback to the PNG using a `` element. +1. Re-size and crop the image. Convert to grayscale if colors aren't important. +2. Lossy compression with `pngquant` +3. Losslessly optimize the result with `oxipng` and its Zopfli backend (slow) +4. Also create a lossless WebP from the lossy PNG and a lossy WebP from the source image, using `cwebp`. Pick the smaller of the two. +5. Include the resulting WebP in the page, with a fallback to the PNG using a `` element. +6. Create a lossy AVIF image from the original source image, and include it in the `` element if it's smaller than the WebP. +7. If the image is too light, repeat for a dark version of the image to display with a `prefers-dark-mode` media query. -It might seem odd to create a lossless WebP from a lossy PNG, but I've found that it's the best way to get the smallest possible image at the minimum acceptable quality for screenshots with solid backgrounds. +It might seem odd to create a lossless WebP from a lossy PNG, but I've found that it's often the best way to get the smallest possible image at the minimum acceptable quality for screenshots with solid backgrounds. In general, avoid using inline images just for decoration. Only use an image if it significantly adds to your content, and provide alt-text as a fallback.