1) Use placeholders durante a construção do layout.
2) Inspecione o elemento para obter as larguras da imagem em telas de desktop, tablet e celular
3) Use o ImageMagick para produzir 12 imagens:
| Formato | Breakpoint | Densidade de pixels |
|---|---|---|
| (WebP, MozJPEG) | (Desktop, Tablet, Mobile) | (1x, 2x) |
1) Use placeholders durante a construção do layout.
<img src="https://via.placeholder.com/800" style="width:100%">
2) Inspecione o elemento para obter as larguras da imagem em telas de desktop, tablet e celular. Verifique as dimensões abaixo em seu layout:
3) Use o ImageMagick para produzir 12 imagens:
| Breakpoint | Densidade de pixels |
Largura da Imagem | Formatos de Imagem |
|---|---|---|---|
| Desktop | 1x | 800px | WebP, MozJPEG |
| Tablet | 1x | 768px | WebP, MozJPEG |
| Mobile | 1x | 414px | WebP, MozJPEG |
| Desktop | 2x | 1600px | WebP, MozJPEG |
| Tablet | 2x | 1136px | WebP, MozJPEG |
| Mobile | 2x | 828px | WebP, MozJPEG |
$ F_NAME=japan-market-osaka-1160297
$ F_EXT=jpg
#resised
$ convert $F_NAME.$F_EXT -quality 80 -resize 800 output/$F_NAME-resized.$F_EXT
#webp
$ convert $F_NAME.$F_EXT -quality 80 -resize 800 output/$F_NAME-lg_1x.webp
$ convert $F_NAME.$F_EXT -quality 80 -resize 768 output/$F_NAME-md_1x.webp
$ convert $F_NAME.$F_EXT -quality 80 -resize 414 output/$F_NAME-sm_1x.webp
$ convert $F_NAME.$F_EXT -quality 80 -resize 1600 output/$F_NAME-lg_2x.webp
$ convert $F_NAME.$F_EXT -quality 80 -resize 1136 output/$F_NAME-md_2x.webp
$ convert $F_NAME.$F_EXT -quality 80 -resize 828 output/$F_NAME-sm_2x.webp
# mozpeg
$ convert $F_NAME.$F_EXT -resize 800 PNM:- | cjpeg -quality 80 -outfile output/$F_NAME-lg_1x.jpg
$ convert $F_NAME.$F_EXT -resize 768 PNM:- | cjpeg -quality 80 -outfile output/$F_NAME-md_1x.jpg
$ convert $F_NAME.$F_EXT -resize 414 PNM:- | cjpeg -quality 80 -outfile output/$F_NAME-sm_1x.jpg
$ convert $F_NAME.$F_EXT -resize 1600 PNM:- | cjpeg -quality 80 -outfile output/$F_NAME-lg_2x.jpg
$ convert $F_NAME.$F_EXT -resize 1136 PNM:- | cjpeg -quality 80 -outfile output/$F_NAME-md_2x.jpg
$ convert $F_NAME.$F_EXT -resize 828 PNM:- | cjpeg -quality 80 -outfile output/$F_NAME-sm_2x.jpg
4) <picture> element
<picture>
<source media="(min-width: 800px)"
srcset="$F_NAME-lg_1x.webp 1x, $F_NAME-lg_2x.webp 2x"
type="image/webp">
<source media="(min-width: 415px)"
srcset="$F_NAME-md_1x.webp 1x, $F_NAME-md_2x.webp 2x"
type="image/webp">
<source media="(max-width: 414px)"
srcset="$F_NAME-sm_1x.webp 1x, $F_NAME-sm_2x.webp 2x"
type="image/webp">
<source media="(min-width: 800px)"
srcset="$F_NAME-lg_1x.jpg 1x, $F_NAME-lg_2x.jpg 2x"
type="image/jpg">
<source media="(min-width: 415px)"
srcset="$F_NAME-md_1x.jpg 1x, $F_NAME-md_2x.jpg 2x"
type="image/jpg">
<source media="(max-width: 414px)"
srcset="$F_NAME-sm_1x.jpg 1x, $F_NAME-sm_2x.jpg 2x"
type="image/jpg">
<img src="$F_NAME-sm_1x.jpg" type="image/jpg" alt="Legenda da imagem" style="width:100%">
</picture>
https://www.pexels.com/photo/japan-market-osaka-peaceful-1160297/
Referência:
Images that are offscreen during the initial pageload are ideal candidates for this technique. Best of all, lazysizes makes this a very simple strategy to implement.
5) LQIP (Low Quality Image Placeholder) pattern
$ convert $F_NAME.$F_EXT -quality 80 -resize 100 PNM:- | cjpeg -outfile output/$F_NAME-lqip.jpg
6) Add Script and Update Image Tags
<script src="https://cdnjs.cloudflare.com/ajax/libs/lazysizes/4.1.5/lazysizes-umd.min.js"></script>
| Before | After |
|---|---|
<img src="flower.jpg"> |
<img data-src="flower.jpg" class="lazyload"> |
<picture>
<source media="(min-width: 800px)"
srcset="$F_NAME-lqip.jpg"
data-srcset="$F_NAME-lg_1x.webp 1x, $F_NAME-lg_2x.webp 2x"
type="image/webp"
class="lazyload">
<source media="(min-width: 415px)"
srcset="$F_NAME-lqip.jpg"
data-srcset="$F_NAME-md_1x.webp 1x, $F_NAME-md_2x.webp 2x"
type="image/webp"
class="lazyload">
<source media="(max-width: 414px)"
srcset="$F_NAME-lqip.jpg"
data-srcset="$F_NAME-sm_1x.webp 1x, $F_NAME-sm_2x.webp 2x"
type="image/webp"
class="lazyload">
<source media="(min-width: 800px)"
srcset="$F_NAME-lqip.jpg"
data-srcset="$F_NAME-lg_1x.jpg 1x, $F_NAME-lg_2x.jpg 2x"
type="image/jpg"
class="lazyload">
<source media="(min-width: 415px)"
srcset="$F_NAME-lqip.jpg"
data-srcset="$F_NAME-md_1x.jpg 1x, $F_NAME-md_2x.jpg 2x"
type="image/jpg"
class="lazyload">
<source media="(max-width: 414px)"
srcset="$F_NAME-lqip.jpg"
data-srcset="$F_NAME-sm_1x.jpg 1x, $F_NAME-sm_2x.jpg 2x"
type="image/jpg"
class="lazyload">
<img src="$F_NAME-sm_1x.jpg"
type="image/jpg"
alt="Legenda da imagem"
style="width:100%">
</picture>
https://www.pexels.com/photo/japan-market-osaka-peaceful-1160297/