Image formatting
Access text, images, and other media with Nuxt and the Sanity headless CMS.
Global helper
This module defines a global <SanityImage>
component to assist with auto-generating your image URLs. It is a lightweight functional component that simply turns the props into a valid image URL.
Props
assetId
The Sanity asset ID (of the form image-G3i4emG6B8JnTmGoN0UjgAp8-300x450-jpg
).
- Type: string
- Required
projectId
and dataset
These default to the projectId
and dataset
passed into the module options but can be overridden.
- Type: string
All other image transformation options are valid props - see the Sanity documentation for more details.
Example
<template>
<SanityImage
asset-id="image-G3i4emG6B8JnTmGoN0UjgAp8-300x450-jpg"
auto="format"
/>
</template>
Local import
You may wish to import SanityImage
only in the components that need it, if you have disabled the global imageHelper
option.
Example
<template>
<SanityImage
project-id="my-project-id"
asset-id="image-G3i4emG6B8JnTmGoN0UjgAp8-300x450-jpg"
auto="format"
/>
</template>
<script>
import { SanityImage } from '@nuxtjs/sanity/dist/components/sanity-image'
export default {
components: { SanityImage },
}
</script>
Renderless usage
If you pass in a default scopedSlot you can use the <SanityImage>
component as a renderless component to allow you to take full control of the functionality.
Example
<template>
<SanityImage
asset-id="image-G3i4emG6B8JnTmGoN0UjgAp8-300x450-jpg"
auto="format"
>
<template #default="{ src }">
<img :src="src" />
</template>
</SanityImage>
</template>
Using @sanity/image-url
If the SanityImage
helper doesn't cover your needs, you can use the @sanity/image-url
package. One way to add it to your Nuxt project is through a plugin:
import imageUrlBuilder from '@sanity/image-url'
export default ({ $sanity }, inject) => {
const builder = imageUrlBuilder($sanity.config)
function urlFor(source) {
return builder.image(source).auto('format')
}
inject('urlFor', urlFor)
}
Then you can use the global $urlFor
helper:
<template>
<img
:src="$urlFor(movie.image).size(426)"
:alt="movie.title"
height="426"
width="426"
loading="lazy"
/>
</template>