Bilder
Wenn Sie anstelle der integrierten Image-Optimierungs-API von Next.js einen Cloud-Anbieter zur Bildoptimierung verwenden möchten, können Sie next.config.js
wie folgt konfigurieren:
module . exports = {
images : {
loader : ' custom ' ,
loaderFile : ' ./my/image/loader.js ' ,
},
}
Diese loaderFile
muss auf eine Datei relativ zum Stammverzeichnis Ihrer Next.js-Anwendung verweisen. Die Datei muss eine Standardfunktion exportieren, die einen String zurückgibt, zum Beispiel:
' use client '
export default function myImageLoader ({ src, width, quality }) {
return ` https://example.com/ ${ src } ?w= ${ width } &q= ${ quality || 75 } `
}
Alternativ können Sie die loader
-Eigenschaft verwenden, um die Funktion an jede Instanz von next/image
zu übergeben.
Hinweis : Das Anpassen der Bild-Loader-Datei, die eine Funktion akzeptiert, erfordert die Verwendung von Client-Komponenten , um die bereitgestellte Funktion zu serialisieren.
Weitere Informationen zum Konfigurieren des Verhaltens der integrierten Image-Optimierungs-API und der Image-Komponente finden Sie unter Bildkonfigurationsoptionen .
// Docs: https://techdocs.akamai.com/ivm/reference/test-images-on-demand
export default function akamaiLoader ({ src, width, quality }) {
return ` https://example.com/ ${ src } ?imwidth= ${ width } `
}
// Docs: https://aws.amazon.com/developer/application-security-performance/articles/image-optimization
export default function cloudfrontLoader ({ src, width, quality }) {
const url = new URL ( ` https://example.com ${ src } ` )
url . searchParams . set ( ' format ' , ' auto ' )
url . searchParams . set ( ' width ' , width . toString ())
url . searchParams . set ( ' quality ' , (quality || 75 ). toString ())
return url .href
}
// Demo: https://res.cloudinary.com/demo/image/upload/w_300,c_limit,q_auto/turtles.jpg
export default function cloudinaryLoader ({ src, width, quality }) {
const params = [ ' f_auto ' , ' c_limit ' , ` w_ ${ width } ` , ` q_ ${ quality || ' auto ' } ` ]
return ` https://example.com/ ${ params . join ( ' , ' ) }${ src } `
}
// Docs: https://developers.cloudflare.com/images/transform-images
export default function cloudflareLoader ({ src, width, quality }) {
const params = [ ` width= ${ width } ` , ` quality= ${ quality || 75 } ` , ' format=auto ' ]
return ` https://example.com/cdn-cgi/image/ ${ params . join ( ' , ' ) } / ${ src } `
}
// Docs: https://www.contentful.com/developers/docs/references/images-api/
export default function contentfulLoader ({ src, width, quality }) {
const url = new URL ( ` https://example.com ${ src } ` )
url . searchParams . set ( ' fm ' , ' webp ' )
url . searchParams . set ( ' w ' , width . toString ())
url . searchParams . set ( ' q ' , (quality || 75 ). toString ())
return url .href
}
// Docs: https://developer.fastly.com/reference/io/
export default function fastlyLoader ({ src, width, quality }) {
const url = new URL ( ` https://example.com ${ src } ` )
url . searchParams . set ( ' auto ' , ' webp ' )
url . searchParams . set ( ' width ' , width . toString ())
url . searchParams . set ( ' quality ' , (quality || 75 ). toString ())
return url .href
}
// Docs: https://docs.gumlet.com/reference/image-transform-size
export default function gumletLoader ({ src, width, quality }) {
const url = new URL ( ` https://example.com ${ src } ` )
url . searchParams . set ( ' format ' , ' auto ' )
url . searchParams . set ( ' w ' , width . toString ())
url . searchParams . set ( ' q ' , (quality || 75 ). toString ())
return url .href
}
// Docs: https://support.imageengine.io/hc/en-us/articles/360058880672-Directives
export default function imageengineLoader ({ src, width, quality }) {
const compression = 100 - (quality || 50 )
const params = [ ` w_ ${ width } ` , ` cmpr_ ${ compression } ` )]
return ` https://example.com ${ src } ?imgeng=/ ${ params . join ( ' / ' ) `
}
// Demo: https://static.imgix.net/daisy.png?format=auto&fit=max&w=300
export default function imgixLoader ({ src, width, quality }) {
const url = new URL ( ` https://example.com ${ src } ` )
const params = url .searchParams
params . set ( ' auto ' , params . getAll ( ' auto ' ). join ( ' , ' ) || ' format ' )
params . set ( ' fit ' , params . get ( ' fit ' ) || ' max ' )
params . set ( ' w ' , params . get ( ' w ' ) || width . toString ())
params . set ( ' q ' , (quality || 50 ). toString ())
return url .href
}
// Doc (Resize): https://www.pixelbin.io/docs/transformations/basic/resize/#width-w
// Doc (Optimise): https://www.pixelbin.io/docs/optimizations/quality/#image-quality-when-delivering
// Doc (Auto Format Delivery): https://www.pixelbin.io/docs/optimizations/format/#automatic-format-selection-with-f_auto-url-parameter
export default function pixelBinLoader ({ src, width, quality }) {
const name = ' <your-cloud-name> '
const opt = ` t.resize(w: ${ width } )~t.compress(q: ${ quality || 75 } ) `
return ` https://cdn.pixelbin.io/v2/ ${ name } / ${ opt } / ${ src } ?f_auto=true `
}
// Docs: https://www.sanity.io/docs/image-urls
export default function sanityLoader ({ src, width, quality }) {
const prj = ' zp7mbokg '
const dataset = ' production '
const url = new URL ( ` https://cdn.sanity.io/images/ ${ prj } / ${ dataset }${ src } ` )
url . searchParams . set ( ' auto ' , ' format ' )
url . searchParams . set ( ' fit ' , ' max ' )
url . searchParams . set ( ' w ' , width . toString ())
if (quality) {
url . searchParams . set ( ' q ' , quality . toString ())
}
return url .href
}
// Docs: https://sirv.com/help/articles/dynamic-imaging/
export default function sirvLoader ({ src, width, quality }) {
const url = new URL ( ` https://example.com ${ src } ` )
const params = url .searchParams
params . set ( ' format ' , params . getAll ( ' format ' ). join ( ' , ' ) || ' optimal ' )
params . set ( ' w ' , params . get ( ' w ' ) || width . toString ())
params . set ( ' q ' , (quality || 85 ). toString ())
return url .href
}
// Docs: https://supabase.com/docs/guides/storage/image-transformations#nextjs-loader
export default function supabaseLoader ({ src, width, quality }) {
const url = new URL ( ` https://example.com ${ src } ` )
url . searchParams . set ( ' width ' , width . toString ())
url . searchParams . set ( ' quality ' , (quality || 75 ). toString ())
return url .href
}
// Docs: https://thumbor.readthedocs.io/en/latest/
export default function thumborLoader ({ src, width, quality }) {
const params = [ ` ${ width } x0 ` , ` filters:quality( ${ quality || 75 } ) ` ]
return ` https://example.com ${ params . join ( ' / ' ) }${ src } `
}
// Docs: https://imagekit.io/docs/image-transformation
export default function imageKitLoader ({ src, width, quality }) {
const params = [ ` w- ${ width } ` , ` q- ${ quality || 80 } ` ]
return ` https://ik.imagekit.io/your_imagekit_id/ ${ src } ?tr= ${ params . join ( ' , ' ) } `
}
// Dokumentation: https://docs.n7.io/aio/intergrations/
export default function aioLoader ({ src, width, quality }) {
const url = new URL (src, window . location .href)
const params = url .searchParams
const aioParams = params . getAll ( ' aio ' )
aioParams . push ( ` w- ${ width } ` )
if (quality) {
aioParams . push ( ` q- ${ quality . toString () } ` )
}
params . set ( ' aio ' , aioParams . join ( ' ; ' ))
return url .href
}