LearnBoost является одним из самых плодовитых разработчиков узловых модулей в сообществе, и по этой причине я остановился на node-canvas вместо node-o3-canvas.
Я использовал node-canvas, чтобы разрезать изображение на листы на сервере и отправить их обратно клиенту.Все работает так, как вы ожидаете.Вот пример кода, который вы могли бы написать:
helper = function(x, y, canvas) {
return function(err, str) {
if (!tiles[x]) {
tiles[x] = [];
}
tiles[x][y] = {
data: str
, buffer: canvas.toBuffer()
, covered: true
};
};
};
for (y = 0; y < tilesPerColumn; y += 1) {
for (x = 0; x < tilesPerRow; x += 1) {
//Create a new tile canvas each time so they don't run over each other
tCanvas = new Canvas(chunkSize, chunkSize);
tCtx = tCanvas.getContext('2d');
xOffSet = chunkSize * x;
yOffSet = chunkSize * y;
//Save a set of uncovered tiles to store in memory
tCtx.drawImage(img, xOffSet, yOffSet, chunkSize, chunkSize, 0, 0, chunkSize, chunkSize);
tCanvas.toDataURL(helper(x, y, tCanvas));
}
}
Единственные ошибки, которые у меня были:
- Если вы используете асинхронные методы в node-canvas,Вы должны быть осторожны, чтобы распределять новые экземпляры canvas / context, чтобы не прерывать тот, который может быть при записи / рисовании.
- По какой-то причине мне так и не удалось заставить объект Image-canvas узла работать правильнопри использовании серверных изображений в кодировке base64.Моя проблема заключалась в том, что событие onLoad не сработало, когда свойству src была назначена строка base64.Я не тратил много времени на борьбу с этим, а вместо этого записал изображения во временные файлы, чтобы обойти проблему.