[HN Gopher] Optimizing images with the HTML <picture> tag ___________________________________________________________________ Optimizing images with the HTML <picture> tag Author : jfhr Score : 47 points Date : 2022-10-30 18:14 UTC (4 hours ago)
web link (jfhr.me)
w3m dump (jfhr.me)
| daxterspeed wrote: | A significant downside to the element, and alternative | image formats in general, is that when _most_ users wanna | download the image they expect an image format they already know | how to work with. To most users an .avif or .webp are an | annoyance because they reasonable expect most of their tools to | be unable to open these. | | It's disappointing that browser vendors haven't picked up on this | and offered a "Save as PNG/JPEG/GIF" option when downloading | images, but for now if it seems reasonable that if any user would | want to download an image you're displaying then you should | probably stick to the legacy formats. | gnull wrote: | Google search result do this weird trick. When you hover on a | link the line at the bottom the your browser window shows the | actual URL. But if you do "copy link URL" on it, you get a | Google tracker URL in your clipboard. | | Couldn't one do the same thing to make users get jpegs when | they try to save a wepb? How bad would it be? | alwillis wrote: | _A significant downside to the element, and | alternative image formats in general, is that when most users | wanna download the image they expect an image format they | already know how to work with. To most users an .avif or .webp | are an annoyance because they reasonable expect most of their | tools to be unable to open these_ | | Certainly not the case with WebP, which was announced by Google | 12 years ago. On a recent version of macOS, Preview, the Mac's | default image and pdf viewer can open WebP and AVIF files, | making it easy for Mac users to convert to another format if | they wish. Also 3rd party graphics apps have supported WebP for | years now. | | AVIF support isn't as widespread yet but that will quickly | change now. | | BTW, the iOS defaults to saving photographs in HEIC, which the | average consumer has never heard of. | gnull wrote: | My friend is using an old Mac laptop what can't display webp | on webpages. A Mac laptop! | nl wrote: | Webp support on Linux is spotty. The desktop file explorer | for Gnome doesn't support it out-of-the-box for example. | sdfhbdf wrote: | > Safari doesn't support the image/avif MIME type, so it will | skip that one. | | With iOS 16, current one, and newest Safari with macOS Ventura | that support was added, see https://caniuse.com/avif | speps wrote: | FTFY: HTML tag | Null-Set wrote: | The title lost the essential "picture" tag part of it, probably | to html sanitization | jfhr wrote: | yeah I should've thought of that. fixed it now | jeffmc wrote: | For me the biggest win in pages with lots of images is the img | loading=lazy flag- https://developer.mozilla.org/en- | US/docs/Web/Performance/Laz... | | This only loads the image when it scrolls into view | tqkxzugoaupvwqr wrote: | Nitpick: The image is loaded when it's near the viewport so | loading is likely finished when the user reaches the image. | makeworld wrote: | > I'd still recommend including JPEG XL versions of your images, | because chances are that browser support will come eventually. | | Likely not. Chrome is actually deprecating JPEG XL, the news | broke yesterday. | | https://www.phoronix.com/news/Chrome-Deprecating-JPEG-XL | gildas wrote: | > I don't think there's a perfect answer. You simply cannot | predict with 100% certainty what the browser would choose. But | you can get a good approximation by parsing the User-Agent header | | Isn't it the purpose of the "Accept" HTTP header? For example the | last version of Firefox sends "Accept: text/html,application/xhtm | l+xml,application/xml;q=0.9,image/avif,image/webp, _/_ ;q=0.8" | when fetching a page. | geoffeg wrote: | I've been surprised lately by the number of people that don't | know about or understand HTTP headers. One discussion I saw was | on a project that was trying to decide what language to serve a | webpage in. They spent a good amount of time choosing a geo- | location provider and library and then deciding what language | to default to for locations that often had multiple languages. | I asked why they didn't just use the Accept-Language header, | which they weren't aware of. | dmitriid wrote: | I wish more people knew about this: https://github.com/for- | GET/http-decision-diagram and https://github.com/for- | GET/know-your-http-well | levymetal wrote: | Google famously uses geolocation to set language instead of | Accept-Language. They have their reasons, which I disagree | with. | | https://news.ycombinator.com/item?id=30638590 | wwalexander wrote: | Same thing with core UNIX commands, and so many other areas. | We are doomed to incessantly reinvent the wheel and turn | versatile abstractions into single-purpose complications. One | must imagine Sisyphus happy. | Theodores wrote: | Exactly. Just have jpg in the code and serve webp based on | header. Problem solved. | | If you can do avif with better results than webp then do | that. | | You can also vary on the data save if you are really keen. | unilynx wrote: | You can't easily use that with a plain* CDN though - you would | need to add a Vary: Accept header and cache misses will | increase as every variant of Accept: will cache a different | version | | * it seems fixable with things like Lambda@Edge and I wouldn't | be surprised if a smart CDN which already does on-the-fly image | compression had implemented this too | capableweb wrote: | Yup, exactly. Seems like a strange omission. Using the | tag should make that obsolete though, as the browser | can chose which image to fetch without involving the backend, | maybe that's why? | [deleted] | Flocular wrote: | This made me look up jpeg2000 support. And then that made me sad | :D | jjcm wrote: | One caution here, as I'm just recently was working on automated | image encoding for user submitted images - be careful of | AVIF/JXL's encoding time. | | I ran some benchmarks with a raw 48mp iPhone 14 dng file | (converted to png to start with since jxl had issues going from | dng directly) with imagemagick to illustrate. | | jpg conversion: 1.74s | | webp conversion: 3.77s | | avif conversion: 67.96s | | jxl conversion: 42.74s | | Of course there's ways to optimize these, but still it's worth | considering that these newer formats require an order of | magnitude (if not more) increase in time to encode. If you're | doing this for your own static site, it's worth doing. If you're | dealing with user submitted images, make sure you understand the | tradeoffs. | ThatMedicIsASpy wrote: | try sharp | | https://sharp.pixelplumbing.com/ | postcoroner wrote: | I am using sharp to transform jpeg to avif images. The | conversion also takes very long, for my images about 45s | each. | WrtCdEvrydy wrote: | > avif conversion: 67.96s > jxl conversion: 42.74s | | Holy shit-balls? Also I thought that quad bayer would come down | to 12MP for the output? | Panino wrote: | You can also use the picture tag to serve different images based | on the browser's dimensions, to serve the best content and fast. | So people with a TV get a wide image while a phone gets a small | version, for example. The browser itself makes the choice and | GETs the image from a list in the picture tag. | | This could also conceivably be used for user tracking purposes as | a way to determine _without javascript_ the user 's browser | window setting. (I assume CSS can do this too.) | d_bud wrote: | MDN says that img tag purpose is not just to serve as a fallback, | but also to specify size "and other attributes". Does it also | include alt attribute? This is important. Can someone confirm | that? | seanhunter wrote: | The article says The final tag also | specifies common attributes like width, height and alt text. | Those attributes will apply regardless of which source the | browser chooses! | | The official spec for the picture element is here | https://html.spec.whatwg.org/multipage/embedded-content.html... | and it says The picture element is a container | which provides multiple sources to its contained img element to | allow authors to declaratively control or give hints to the | user agent about which image resource to use, based on the | screen pixel density, viewport size, image format, and other | factors. It represents its children. | | So I read that as the alt text (as well as other attributes | other than the actual src url) come from the img tag | masswerk wrote: | It's also the img tag that you style in CSS. So for all layout | purpose, it's still the img element that defines the container | and the picture element is more a syntactical bracket to | associate other source-sets with it. (This isn't very HTML-y, | but, well...) | eyelidlessness wrote: | Adding something I don't currently see mentioned explicitly: | the img tag is the actual presented media element, | picture/source are not displayed without an img tag. So the img | _tag_ itself isn't even a fallback, only its src attribute. | capableweb wrote: | Yes, all attributes from applies to the selected image, | not just width or height. | lgreiv wrote: | I am using the picture tag on my photography blog [1] to serve | optimized images for a range of breakpoints. I also used to serve | WEBP versions of the photos but noticed that (in my audience) the | browser support was sufficiently low to drop the generation step | for them and just serve various size/quality combinations of JPG. | If time allows, I'll also add a super low-res placeholder image | in the background to prevent the slightly jarring layout jumps on | slow desktop connections. | | In combination with static hosting from S3 with CloudFront for | caching, handwritten CSS + JS (except from Turbo), this yields a | close-to-SPA snappiness and feel even on meager connections (as | tested from rural Germany, fellow Germans may understand the | implications). | | The picture tag and the aspect-ratio CSS rule are real MVPs for | dealing with photographs. | | [1] https://44hz.de | randomguy0 wrote: | Set width and height to the ratio of the image to prevent those | layout shifts. | [deleted] ___________________________________________________________________ (page generated 2022-10-30 23:00 UTC)