An open API service indexing awesome lists of open source software.

https://github.com/oov/psd

PSD/PSB(Photoshop) file reader for Go programming language
https://github.com/oov/psd

Last synced: 2 months ago
JSON representation

PSD/PSB(Photoshop) file reader for Go programming language

Awesome Lists containing this project

README

        

# PSD/PSB(Photoshop) file reader for Go programming language

It works almost well but it is still in development.

## How to use

### Example1

Simple psd -> png conversion.

```go
package main

import (
"image"
"image/png"
"os"

_ "github.com/oov/psd"
)

func main() {
file, err := os.Open("image.psd")
if err != nil {
panic(err)
}
defer file.Close()

img, _, err := image.Decode(file)
if err != nil {
panic(err)
}

out, err := os.Create("image.png")
if err != nil {
panic(err)
}
err = png.Encode(out, img)
if err != nil {
panic(err)
}
}
```

### Example2

Extract all layer images.

```go
package main

import (
"fmt"
"image/png"
"os"

"github.com/oov/psd"
)

func processLayer(filename string, layerName string, l *psd.Layer) error {
if len(l.Layer) > 0 {
for i, ll := range l.Layer {
if err := processLayer(
fmt.Sprintf("%s_%03d", filename, i),
layerName+"/"+ll.Name, &ll); err != nil {
return err
}
}
}
if !l.HasImage() {
return nil
}
fmt.Printf("%s -> %s.png\n", layerName, filename)
out, err := os.Create(fmt.Sprintf("%s.png", filename))
if err != nil {
return err
}
defer out.Close()
return png.Encode(out, l.Picker)
}

func main() {
file, err := os.Open("image.psd")
if err != nil {
panic(err)
}
defer file.Close()

img, _, err := psd.Decode(file, &psd.DecodeOptions{SkipMergedImage: true})
if err != nil {
panic(err)
}
for i, layer := range img.Layer {
if err = processLayer(fmt.Sprintf("%03d", i), layer.Name, &layer); err != nil {
panic(err)
}
}
}
```

# Current status

It is not implemented any blending functions because layer composition isn't covered by this package at present.

- [Image Resource Section](http://www.adobe.com/devnet-apps/photoshop/fileformatashtml/#50577409_69883) is parsed but [Image resource IDs](http://www.adobe.com/devnet-apps/photoshop/fileformatashtml/#50577409_38034) are not defined as constant.
- [Global layer mask info](http://www.adobe.com/devnet-apps/photoshop/fileformatashtml/#50577409_17115) is not parsed.
- [Layer blending ranges data](http://www.adobe.com/devnet-apps/photoshop/fileformatashtml/#50577409_21332) is not parsed.
- [Additional Layer Information](http://www.adobe.com/devnet-apps/photoshop/fileformatashtml/#50577409_pgfId-1049436) is parsed but keys are almost not defined as constant.

## Color Modes

### Implemented

- Bitmap 1bit
- Grayscale 8bit
- Grayscale 16bit
- Grayscale 32bit
- Indexed
- RGB 8bit
- RGB 16bit
- RGB 32bit
- CMYK 8bit
- CMYK 16bit

### Not implemented

- CMYK 32bit
- Multichannel
- Duotone
- Lab

## Supported Compression Methods

- Raw
- RLE(PackBits)
- ZIP without prediction (not tested)
- ZIP with prediction