Responsive Image Generator
Create mobile, tablet and desktop versions of your images in JPG and WebP, plus the <picture> HTML to serve them, in one go and without uploading anything.
Free · No account · No uploadsJPEG, PNG, WebP, HEIC
Max 10 images · 5MB each
Format
One file per format
Quality
Best quality
Resize for
Optional
Serving a single large image to every device means phones download pixels they will never display. The standard fix is responsive images: several widths of the same picture, and HTML that lets the browser choose the right one. Doing it by hand involves exporting each size in each format and writing srcset attributes without typos. This tool does both steps: for every image you drop, it produces JPG and WebP versions at 375 px (mobile), 768 px (tablet) and 1920 px (desktop), and writes the markup for them.
The Copy code button gives you a <picture> element, in HTML for plain pages, Vue, Angular, Svelte or Astro, or in JSX for React and Next.js, with a WebP <source> and a JPG <img> as a fallback, each with a srcset listing the widths generated (up to three). The <img> includes sizes, the real width and height of the image, which lets the browser reserve space and avoids layout shifts, and loading=lazy. The widths in the srcset are the real widths of the generated files: an image narrower than 1920 px is not enlarged. The file names match the downloaded files, such as photo-mobile.webp, and the ZIP includes the snippets as picture.html and as picture.jsx, with one React component per image.
Two details deserve your attention before pasting the snippet. The sizes attribute defaults to 100vw, meaning the image fills the width of the screen. If it sits in a narrower column, adjust it, for example to (min-width: 1024px) 50vw, 100vw, or the browser will pick larger files than necessary. And lazy loading is right for images further down the page, but for the main image at the top, removing loading=lazy lets it load sooner.
To use it, drop up to 10 images at a time (JPEG, PNG, WebP or HEIC, up to 5 MB each), adjust the quality if you want, and download the files individually or as a ZIP with the HTML and JSX included. Upload the files to your site next to each other and paste the snippet, adjusting the paths if needed. Since everything is generated in your browser, the originals never leave your device, and the new files come without the original metadata.