The problem with solving this in content negotiation is that breaks proxy caches. If you serve uncachable html that references either jpg or webp then you can serve those resources as "Cache-Control: public", and if you include a content hash or versioning in the URL then you can send a long cache lifetime. If you use the Accept or User-Agent headers to choose what image format to send them you need to issue a Vary header, and basically all proxy caches will treat that as uncachable.
There's some progress with "Vary: Accept" support, but "Vary: User-Agent" is probably never going to be supported.
There's some progress with "Vary: Accept" support, but "Vary: User-Agent" is probably never going to be supported.