узел-o3-canvas против узла-canvas?

#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? ничего не нашел в документе