sanity
Version:
Sanity is a real-time content infrastructure with a scalable, hosted backend featuring a Graph Oriented Query Language (GROQ), asset pipelines and fast edge caches
28 lines (27 loc) • 844 B
text/typescript
export function imageUrlToBlob(
imageUrl: string,
format = 'image/jpeg',
quality = 1,
): Promise<Blob | null> {
if (imageUrl.match(/^webkit-fake-url:\/\//)) {
return Promise.reject(new Error('Cannot read image contents from webkit fake url'))
}
return new Promise((resolve, reject) => {
const loader = new Image()
loader.crossOrigin = 'anonymous'
loader.referrerPolicy = 'strict-origin-when-cross-origin'
loader.onload = () => {
const canvas = document.createElement('canvas')
canvas.width = loader.width
canvas.height = loader.height
const ctx = canvas.getContext('2d')
ctx?.drawImage(loader, 0, 0, canvas.width, canvas.height)
try {
canvas.toBlob(resolve, format, quality)
} catch (error) {
reject(error)
}
}
loader.src = imageUrl
})
}