WebP to PNG 🥴
У нашому проєкті виникла потреба генерувати PDF-файли. Для цього ми використовуємо бібліотеку
react-pdf - інструмент для створення PDF. Працювати над таким типом завдань — це ще той квест, тому краще оминайте такі задачі.
Нам потрібно вставляти динамічні зображення (на даний момент підтримуємо лише JPG, PNG та WebP). Ми розчарувалися, коли виявилося, що PDF не підтримує формат WebP, а обробка таких зображень була надзвичайно необхідною.
Тому ми обрали, мабуть, найпростішу та найшвидшу стратегію — відмалювати WebP-зображення на canvas і отримати з нього PNG. Виглядає код приблизно так:
function toPNGUsingCavas(src: string) {
const image = new Image()
const { promise, resolve, reject } = Promise.withResolvers()
image.onload = function () {
const canvas = document.createElement('canvas')
canvas.width = image.naturalWidth
canvas.height = image.naturalHeight
const context = canvas.getContext('2d')
if (!context) {
reject(new Error('Could not get canvas context'))
} else {
context.drawImage(image, 0, 0)
resolve(canvas.toDataURL('image/png'))
}
}
image.onerror = reject
image.src = src
return promise
}
Тут, до речі, можете побачити приклад використання
Promise.withResolvers, про який ми розповідали
раніше.
#experience