Coder Social home page Coder Social logo

Comments (7)

joshmarinacci avatar joshmarinacci commented on May 20, 2024

from node-pureimage.

upupzealot avatar upupzealot commented on May 20, 2024

Glad to hear that! love this pure js canvas lib so much.

from node-pureimage.

joshmarinacci avatar joshmarinacci commented on May 20, 2024

I've finished and merged the refactor branch. Could you get the latest build and see if there is still a problem?

from node-pureimage.

upupzealot avatar upupzealot commented on May 20, 2024

Very thx for the updating!
there seems some other problems:
1.SyntaxError: Block-scoped declarations (let, const, function, class) not yet supported outside strict mode
would be fixed if you add a "use strict"; to the src/text.js
2.TypeError: FONT.loadSync is not a function
Not sure how to fix this.

from node-pureimage.

joshmarinacci avatar joshmarinacci commented on May 20, 2024

I can fix the let/const stuff. Can you send me the code you are running so I can identify the loadsync part?

from node-pureimage.

upupzealot avatar upupzealot commented on May 20, 2024

@joshmarinacci It's a part of my project which is big.

'use strict';

const _ = require('lodash');
const co = require('co');
const fs = require('fs');
const path = require('path');
const PImage = require('pureimage');
const Promise = require('bluebird');

const config = require('../config/index.js');

module.exports = (User, options) => {
  const avatarDir = path.resolve(__dirname, '../../client', config.userAvatarMixin.avatarDir);
  if (!fs.existsSync(avatarDir)) {
    fs.mkdir(avatarDir);
  }

  const encodePNG = Promise.promisify((img, fileName, callback) => {
    PImage.encodePNG(
      img,
      fs.createWriteStream(fileName),
      (err) => {
        callback(err, fileName);
      });
  });

  const SIZE = config.userAvatarMixin.size;
  const FONT = PImage.registerFont(
    path.resolve(__dirname, '../../client', config.userAvatarMixin.font),
    'AVATAR FONT');
  FONT.loadSync();
  const BGCOLORS = config.userAvatarMixin.backgroundColors;

  User.observe('after save', (ctx, next) => {
    co(function*() {
      if (ctx.instance && !ctx.instance.avatar) {
        const user = ctx.instance;
        const avatar = PImage.make(SIZE, SIZE);
        const g2d = avatar.getContext('2d');
        g2d.fillStyle = BGCOLORS[_.random(BGCOLORS.length - 1)];
        // g2d.fillRect(0, 0, SIZE, SIZE);
        g2d.fillRect(-1, -1, SIZE + 1, SIZE + 1);
        g2d.fillStyle = '#FFFFFF';
        g2d.setFont('AVATAR FONT', config.userAvatarMixin.fontSize);

        const name = user.username.substr(0, 1).toUpperCase();
        const dimention = g2d.measureText(name);
        dimention.height = dimention.emHeightAscent + dimention.emHeightDescent;
        g2d.fillText(
          name,
          (SIZE - dimention.width) / 2 + 1,
          (SIZE - dimention.height / 2));

        const avatarDir = path.resolve(__dirname, '../../client', config.userAvatarMixin.avatarDir);
        const file = yield encodePNG(avatar, `${avatarDir}/avatar-${user.id}.png`);
        yield user.updateAttribute('avatar', `/${path.basename(avatarDir)}/${path.relative(avatarDir, file)}`);
      }
      next();
    }).catch((err) => {
      console.error(err);
      next(err);
    });
  });
};

I paste it here directly and hope it would help.

from node-pureimage.

joshmarinacci avatar joshmarinacci commented on May 20, 2024

Ah yes. LoadSync doesn't exist anymore. You must load fonts asynchronously using .load(). It works like this

var fnt = PImage.registerFont('tests/fonts/SourceSansPro-Regular.ttf','Source Sans Pro');
fnt.load(function() {
    var img = PImage.make(200,200);
   .. do stuff that uses the font

});

from node-pureimage.

Related Issues (20)

Recommend Projects

  • React photo React

    A declarative, efficient, and flexible JavaScript library for building user interfaces.

  • Vue.js photo Vue.js

    🖖 Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.

  • Typescript photo Typescript

    TypeScript is a superset of JavaScript that compiles to clean JavaScript output.

  • TensorFlow photo TensorFlow

    An Open Source Machine Learning Framework for Everyone

  • Django photo Django

    The Web framework for perfectionists with deadlines.

  • D3 photo D3

    Bring data to life with SVG, Canvas and HTML. 📊📈🎉

Recommend Topics

  • javascript

    JavaScript (JS) is a lightweight interpreted programming language with first-class functions.

  • web

    Some thing interesting about web. New door for the world.

  • server

    A server is a program made to process requests and deliver data to clients.

  • Machine learning

    Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.

  • Game

    Some thing interesting about game, make everyone happy.

Recommend Org

  • Facebook photo Facebook

    We are working to build community through open source technology. NB: members must have two-factor auth.

  • Microsoft photo Microsoft

    Open source projects and samples from Microsoft.

  • Google photo Google

    Google ❤️ Open Source for everyone.

  • D3 photo D3

    Data-Driven Documents codes.