У меня есть несколько листов спрайтов, по одному на каждую минуту видео. Например, если видео длится 3 минуты, у меня есть sprite.0.jpg, sprite.1.jpg, sprite.2.jpg, что означает 3 листа спрайтов, каждый из которых имеет 60 изображений за 1 секунду.
Это означает, что лист спрайтов с 10 столбцами и 6 строками имеет размер одного изображения 142x80, тогда как общий лист спрайтов имеет размер 1420x480 (см. ниже).
Я хочу создать компонент для предварительного просмотра непрерывной миниатюры видео на холсте. (см. ниже)
Как преобразовать листы Sprite в горизонтальную непрерывную миниатюру видео на холсте Fabricjs?
Я попытался нарисовать первый кадр листа спрайтов на холсте, но не уверен, как разместить все листы спрайтов непрерывно, чтобы холст можно было прокручивать по горизонтали.
// Get the canvas and canvas context
var canvas = document.getElementById("timeline");
var ctx = canvas.getContext("2d");
// Create an image object
var image = new Image();
image.src = "path/to/spritesheet.jpg";
// Wait for the image to load
image.onload = function() {
// Set the canvas size
canvas.width = 1420;
canvas.height = 480;
// Draw the first frame of the sprite sheet
ctx.drawImage(image, 0, 0, 1420, 480, 0, 0, canvas.width, canvas.height);
};
@mrall как насчет того, когда я хочу просмотреть превью часового видео? Это кажется неправильным, так как, я думаю, существует ограничение на ширину холста.



![Безумие обратных вызовов в javascript [JS]](https://i.imgur.com/WsjO6zJb.png)


Я просто собираюсь сосредоточиться на части вашего вопроса, где вы разбиваете лист спрайтов на горизонтальную непрерывную миниатюру, есть и другие проблемы, которые я решаю после примера кода.
Чтобы сделать то, что вы просите, нам нужен цикл на образце листа спрайтов, который вы предоставляете, есть 6 строк, поэтому мы зацикливаем его и рисуем строки в одну.
Вы используете drawImage со всеми параметрами, я предполагаю, что у вас есть ясные основы, если вы не видите больше об этом в документации:
https://developer.mozilla.org/en-US/docs/Web/API/CanvasRenderingContext2D/drawImage#параметры
Вот рабочий образец:
var canvas = document.getElementById("timeline");
var ctx = canvas.getContext("2d");
var image = new Image();
image.src = "https://i.stack.imgur.com/gOk5s.jpg";
image.onload = function() {
for (let i = 0; i < 6; i++)
ctx.drawImage(
image,
0, 80 * i, 1420, 80,
710 * i, 0, 710, 40
);
};canvas {
border: dashed 5px red
}<canvas id = "timeline" width=4260 height=40></canvas>Я вижу в ваших комментариях, что вы добавили:
... как насчет того, когда я хочу посмотреть предварительный просмотр видео продолжительностью 1 час? Это кажется неправильным, так как, я думаю, существует ограничение на ширину холста.
Да, есть ограничение и для каждого браузера:
https://developer.mozilla.org/en-US/docs/Web/HTML/Element/canvas#maximum_canvas_size
Но это гораздо более сложный вопрос, который заслуживает отдельного вопроса...
Спасибо за подробное объяснение. Это полезно в решении моей проблемы. Да, вы правы, для размещения больших видео стоит отдельный вопрос. Для коротких видеороликов выше решение полезно.
Вам нужно будет создать элемент холста шириной 8880 и высотой 480. Внутри div того же размера и абсолютного позиционирования на странице.