JAMstack
Image Optimization
Vector vs. Raster images
Lossless vs lossy
Sizes
Dimensions | Pixels | File size |
---|---|---|
100 x 100 | 10.000 | 39 KB |
200 x 200 | 40.000 | 156 KB |
300 x 300 | 90.000 | 351 KB |
500 x 500 | 250.000 | 977 KB |
800 x 800 | 640.000 | 2500 KB |
Right Image Format
Format | Transparency | Animation | Browser |
---|---|---|---|
GIF | Yes | Yes | All |
PNG | Yes | No | All |
JPEG | No | No | All |
JPEG XR | Yes | Yes | IE |
WEBP | Yes | Yes | Chrome, Opera, Android |
Open Source Tools
pngquant.org
optipng.sourceforge.net
jpegclub.org/jpegtran
Gatsby Image-API
Gatsby Image
- Resize large images
- Generate multiple images
- Strip all unnecessary metadata and optimize JPEG and PNG compression
- Lazy Load
- Blur-Up or SVG for thumbnails
yarn add gatsby-image
yarn add gatsby-image
const path = require(`path`)
module.exports = {
plugins: [
{
resolve: `gatsby-source-filesystem`,
options: {
name: `images`,
path: path.join(__dirname, `src`, `images`),
},
},
`gatsby-plugin-sharp`,
`gatsby-transformer-sharp`,
],
}
import React from "react"
import { useStaticQuery, graphql } from "gatsby"
import * as S from "../components/styled"
import Img from "gatsby-image"
const Image = () => {
const data = useStaticQuery(graphql`
query {
hera_traced_webp: file(relativePath: { eq: "hera.jpg" }) {
childImageSharp {
fluid(
maxWidth: 1200
duotone: { highlight: "#f00e2e", shadow: "#192555" }
) {
...GatsbyImageSharpFluid_withWebp_tracedSVG
}
}
}
}
`)
Fragments
- GatsbyImageSharpFixed
- GatsbyImageSharpFixed_noBase64
- GatsbyImageSharpFixed_tracedSVG
- GatsbyImageSharpFixed_withWebp
import React from "react"
import { useStaticQuery, graphql } from "gatsby"
import * as S from "../components/styled"
import Img from "gatsby-image"
const Image = () => {
const data = useStaticQuery(graphql`
query {
hera_traced_webp: file(relativePath: { eq: "hera.jpg" }) {
childImageSharp {
fluid(
maxWidth: 1200
duotone: { highlight: "#f00e2e", shadow: "#192555" }
) {
...GatsbyImageSharpFluid_withWebp_tracedSVG
}
}
}
}
`)
Gatsby Image
resize
fluid
fixed
Resize
width
height
rotate
Fluid & Fixed
aspectRatio
base64
duotone
toFormat
Fluid vs Fixed
Sharp Module
https://github.com/lovell/sharp
Checklist
-
Prefer vector formats
- Minify and compress SVG assets
- Pick best raster image format
- Experiment with optimal quality settings for raster formats
- Remove unnecessary image metadata
- Serve scaled images
- Automate
github.com/raufsamestone/jamstack-image
jamstack-image.netlify.com
Thx
raufsamestone.com
@raufsamestone
JAMstack Image Optimization
By Berkay Demirbas
JAMstack Image Optimization
- 86