Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Feature Request: Support separate base params for auto-avif/webp #395

Open
mplibunao opened this issue Sep 29, 2023 · 0 comments
Open

Feature Request: Support separate base params for auto-avif/webp #395

mplibunao opened this issue Sep 29, 2023 · 0 comments

Comments

@mplibunao
Copy link

mplibunao commented Sep 29, 2023

Hello. First of all, thank you for all the work that you have put into imagor. It's amazing.

Currently, imagor supports IMAGOR_BASE_PARAMS for setting base params like filters:quality(60) for all requests.

However, quality for each format is not consistent as mentioned in https://www.industrialempathy.com/posts/avif-webp-quality-settings#quality-settings-for-a-range-of-jpeg-qualities

JPEG quality 50 60 70 80
AVIF quality 48 51 56 64
WebP quality 55 64 72 82

This means that if I set both IMAGOR_AUTO_WEBP and IMAGOR_AUTO_AVIF to true and set IMAGOR_BASE_PARAMS to filters:quality(56), I will not get a consistent image quality across devices.

Assuming I set the 56 value with avif in mind, users which only support webp or jpeg will get a much lower quality than what I had intended for them to receive.

Currently, my workaround for this is to skip using the auto-webp/auto-avif and instead use the picture element with separate sources for each format so I have better control over the quality of each format like

<picture>
  <source type="image/avif" sizes="(max-width: 639px) 45vw, (min-width: 640px) 65vw, (min-width: 768px) 33vw" srcset="http://localhost:8000/unsafe/480x0/smart/filters:quality(51):format(avif)/office-2.jpg 480w, http://localhost:8000/unsafe/640x0/smart/filters:quality(51):format(avif)/office-2.jpg 640w, http://localhost:8000/unsafe/768x0/smart/filters:quality(51):format(avif)/office-2.jpg 768w, http://localhost:8000/unsafe/1024x0/smart/filters:quality(51):format(avif)/office-2.jpg 1024w">
  <source type="image/webp" sizes="(max-width: 639px) 45vw, (min-width: 640px) 65vw, (min-width: 768px) 33vw" srcset="http://localhost:8000/unsafe/480x0/smart/filters:quality(64):format(webp)/office-2.jpg 480w, http://localhost:8000/unsafe/640x0/smart/filters:quality(64):format(webp)/office-2.jpg 640w, http://localhost:8000/unsafe/768x0/smart/filters:quality(64):format(webp)/office-2.jpg 768w, http://localhost:8000/unsafe/1024x0/smart/filters:quality(64):format(webp)/office-2.jpg 1024w">
  <source type="image/jpeg" sizes="(max-width: 639px) 45vw, (min-width: 640px) 65vw, (min-width: 768px) 33vw" srcset="http://localhost:8000/unsafe/480x0/smart/filters:quality(60):format(jpeg)/office-2.jpg 480w, http://localhost:8000/unsafe/640x0/smart/filters:quality(60):format(jpeg)/office-2.jpg 640w, http://localhost:8000/unsafe/768x0/smart/filters:quality(60):format(jpeg)/office-2.jpg 768w, http://localhost:8000/unsafe/1024x0/smart/filters:quality(60):format(jpeg)/office-2.jpg 1024w">
  <img src="/media/assets/office-2.jpg" alt="Woman walking while smiling in the office" class="max-w-full w-full" loading="lazy" fetchpriority="auto" decoding="async">
</picture>

Unfortunately, as you can see this results in more HTML (or JS if you are using SPA frameworks) especially if you are trying to serve responsive images.

It'd be great if we could add AUTO_AVIF_BASE_PARAMS and AUTO_WEBP_BASE_PARAMS for auto-avif and auto-webp to use then fallback to the original BASE_PARAMS if the Accept headers doesn't include those formats.

This way, instead of using separate source elements for each type, we can revert back to a single img element without the format and quality filters and let imagor set that based on AUTO_AVIF_BASE_PARAMS and AUTO_WEBP_BASE_PARAMS. This should result in 1/3 of the current HTML for each image like:

<img src="/media/assets/office-2.jpg" alt="Woman walking while smiling in the office" class="max-w-full w-full" loading="lazy" fetchpriority="auto" decoding="async" sizes="45vw, media(min-width: 640px) 65vw, media(min-width: 768px) 33vw" srcset="http://localhost:8000/unsafe/480x0/smart/office-2.jpg 480w, http://localhost:8000/unsafe/640x0/smart/office-2.jpg 640w, http://localhost:8000/unsafe/768x0/smart/office-2.jpg 768w, http://localhost:8000/unsafe/1024x0/smart/office-2.jpg 1024w">
@mplibunao mplibunao changed the title Support separate base params for auto-avif/webp Feature Request: Support separate base params for auto-avif/webp Sep 29, 2023
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
None yet
Projects
None yet
Development

No branches or pull requests

1 participant