Convert PSD to PNG with Node.js

By  on  

Automating and manipulating media is a fascination of mine, partly because I don't understand the magic behind it and partly because the idea of turning one thing into another is fun and useful.  That latest media tool that has piqued my interest is a JavaScript tool called psd.js.

psd.js is a project that allows you to read PSD files, including:

  • Document structure and size
  • Layer/folder size + positioning, names, visibility, and opacity
  • Font data (via psd-enginedata)
    • Text area contents
    • Font names, sizes, and colors
  • Color mode and bit-depth
  • Vector mask data
  • Flattened image data
  • Layer comps

What the media converter and JavaScript lover in me found most awesome was one basic feature: converting a PSD to PNG with JavaScript!

var PSD = require('psd');
 
PSD.open('homepage.psd').then(function (psd) {
  return psd.image.saveAsPng('homepage.png');
}).then(function () {
  console.log('Finished!');
});

That's a nice, tidy API there and I love that it doesn't require anything other than JavaScript (many other Node.js image libraries require ImageMagick on the machine).  Of course converting PSD to PNG is easy with ImageMagick too, but being able to use Node.js instead opens a whole host of opportunity!

Recent Features

  • By
    7 Essential JavaScript Functions

    I remember the early days of JavaScript where you needed a simple function for just about everything because the browser vendors implemented features differently, and not just edge features, basic features, like addEventListener and attachEvent.  Times have changed but there are still a few functions each developer should...

  • By
    5 More HTML5 APIs You Didn’t Know Existed

    The HTML5 revolution has provided us some awesome JavaScript and HTML APIs.  Some are APIs we knew we've needed for years, others are cutting edge mobile and desktop helpers.  Regardless of API strength or purpose, anything to help us better do our job is a...

Incredible Demos

  • By
    Create a 3D Panorama Image with A-Frame

    In the five years I've been at Mozilla I've seen some awesome projects.  Some of them very popular, some of them very niche, but none of them has inspired me the way the MozVR team's work with WebVR and A-Frame project have. A-Frame is a community project...

  • By
    Create a Dojo Lightbox with dojox.image.Lightbox

    One of the reasons I love the Dojo Toolkit is that it seems to have everything.  No scouring for a plugin from this site and then another plugin from that site to build my application.  Buried within the expansive dojox namespace of Dojo is

Discussion

  1. Thanks for the shout out David! I know you’re primarily focused on Javascript, but for completeness sake I figured I would mention that the Ruby version of the library is currently more feature complete: https://github.com/layervault/psd.rb

    I am planning on porting the rest of the features in the Ruby library to the JS version in the near future though!

  2. This is super! just been looking at jspdf also, Great what can be done on the client side these days.

  3. Doron

    Ryan, it’d be cool to see feature parity with the Ruby version! I wonder how much support is currently provided for working with PSD layers, e.g. applying transformations such as shadows and overlays (See: https://support.cloudinary.com/hc/en-us/articles/115001217949 for examples).

Wrap your code in <pre class="{language}"></pre> tags, link to a GitHub gist, JSFiddle fiddle, or CodePen pen to embed!