#canvas #node.js
#холст #node.js
Вопрос:
Есть ли у кого-нибудь опыт работы с одним или обоими из них node.js библиотеки? Любопытно услышать об успехах или трудностях с каждым из них.
Комментарии:
1. Там оба от уважаемых авторов. Похоже, что у
node-canvas
были более поздние коммиты, и это повышает вероятность того, что он будет поддерживаться в будущем с более новыми версиями node.js
Ответ №1:
LearnBoost — один из самых плодовитых разработчиков модулей node в сообществе, и по этой причине я предпочел 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 / контекста, чтобы не прерывать тот, который может выполнять запись / рисование.
- По какой-то причине мне так и не удалось заставить объект Image () node-canvas корректно работать при использовании изображений в кодировке base64 на стороне сервера. Моя проблема заключалась в том, что событие onLoad не запускалось, когда свойству src присваивалась строка base64. Я не стал тратить слишком много времени на борьбу с этим, а вместо этого записал изображения во временные файлы, чтобы обойти проблему.
Комментарии:
1. Также он основан на Cairo, с которым сложно работать на серверах, не принадлежащих VPS.
2. Есть успехи в установке Cairo на не VPS? Я смотрю на Heroku прямо сейчас, но не хочу тратить свое время, если это невозможно. Я действительно не хочу создавать свой собственный, если это возможно.
3. Для Cairo есть пакет сборки Heroku . Я лично не использовал это, поэтому пока не могу сказать, работает это или нет.
4. @jslatts «Если вы используете асинхронные методы в node-canvas», вы имеете в виду, что вы можете рисовать асинхронно, используя node canvas? ничего не нашел в документе