5.0.1 • Published 6 years ago
@gluefx/ag-psd v5.0.1
ag-psd
JavaScript library for reading and writing PSD files (Photoshop Document files)
Implemented according to official documentation and fileformat.info.
Limitations
- Supports only RGB, Grayscale and Bitmap color modes
- Supports only 8 bits per channel
- Does not support The Large Document Format (8BPB/PSB)
- Does not support vector/text layers
- Does not support layer masks
- Does not support color palettes
- Does not support all metadata fields
Installing
npm install ag-psd
Usage
Node.js
Reading
Needs node-canvas to read image data or thumbnails
import * as fs from 'fs';
import 'ag-psd/initialize-canvas'; // only needed for reading image data and thumbnails
import { readPsd, initializeCanvas } from 'ag-psd';
const buffer = fs.readFileSync('my-file.psd');
// read only document structure
const psd1 = readPsd(buffer, { skipLayerImageData: true, skipCompositeImageData: true, skipThumbnail: true });
console.log(psd1);
// read document structure and image data
const psd2 = readPsd(buffer);
console.log(psd2);
fs.writeFileSync('layer-1.png', psd2.children[0].canvas.getBuffer());
Writing
import * as fs from 'fs';
import 'ag-psd/initialize-canvas'; // only needed for writing image data and thumbnails
import { writePsdBuffer } from 'ag-psd';
const psd = {
width: 300,
height: 200,
children: [
{
name: 'Layer #1',
}
]
};
const buffer = writePsdBuffer(psd);
fs.writeFileSync('my-file.psd', buffer);
Browser
Reading
import { readPsd } from 'ag-psd';
const xhr = new XMLHttpRequest();
xhr.open('GET', 'my-file.psd', true);
xhr.responseType = 'arraybuffer';
xhr.addEventListener('load', function () {
const buffer = xhr.response;
const psd = readPsd(buffer);
console.log(psd);
document.body.appendChild(psd.children[0].canvas);
}, false);
Writing
saveAs
function from FileSaver.js
import { writePsd } from 'ag-psd';
const psd = {
width: 300,
height: 200,
children: [
{
name: 'Layer #1',
}
]
};
const buffer = writePsd(psd);
const blob = new Blob([buffer], { type: 'application/octet-stream' });
saveAs(blob, 'my-file.psd');
Browser (bundle)
<script src="node_modules/ag-psd/dist/bundle.js"></script>
<script>
var readPsd = agPsd.readPsd;
// rest the same as above
</script>
Options
interface ReadOptions {
/** does not load layer image data */
skipLayerImageData?: boolean;
/** does not load composite image data */
skipCompositeImageData?: boolean;
/** does not load thumbnail */
skipThumbnail?: boolean;
}
interface WriteOptions {
/** automatically generates thumbnail from composite image */
generateThumbnail?: boolean;
/** trims transparent pixels from layer image data */
trimImageData?: boolean;
}
Sample PSD document
{
"width": 300,
"height": 200,
"channels": 3,
"bitsPerChannel": 8,
"colorMode": 3,
"children": [
{
"top": 0,
"left": 0,
"bottom": 200,
"right": 300,
"blendMode": "normal",
"opacity": 255,
"transparencyProtected": false,
"hidden": true,
"clipping": false,
"name": "Layer 0",
"canvas": [Canvas]
},
{
"top": 0,
"left": 0,
"bottom": 0,
"right": 0,
"blendMode": "multiply",
"opacity": 255,
"transparencyProtected": true,
"hidden": false,
"clipping": false,
"name": "Layer 3",
"canvas": [Canvas]
}
],
"canvas": [Canvas]
}
Developing
Building
gulp build
Testing
gulp test # run tests
gulp cov # run tests & coverage
Coding
Watch task with building, testing and code coverage
gulp dev # run with build watch task
gulp dev --coverage # run with build & tests & coverage watch tasks
npm run lint # run tslint
5.0.1
6 years ago