Skip to content

Commit

Permalink
Merge pull request #10 from revisitors/topic_goroutines
Browse files Browse the repository at this point in the history
splitting revisitor to new file and updating docs
  • Loading branch information
taotetek committed Aug 25, 2014
2 parents f7d8594 + b5ac44d commit 8df5b76
Show file tree
Hide file tree
Showing 2 changed files with 65 additions and 58 deletions.
65 changes: 65 additions & 0 deletions image_revisitor.go
Original file line number Diff line number Diff line change
@@ -0,0 +1,65 @@
package gorevisit

import (
"bytes"
"encoding/base64"
"errors"
"fmt"
"image"
"image/gif"
"image/jpeg"
"image/png"
)

// ImageRevisitor, given a RevisitMsg and an image transformation function, runs the
// image data through the transformation and returns a new RevisitMsg with the
// transformed image
func ImageRevisitor(m *RevisitMsg, t func(src image.Image, dst image.RGBA) error) (*RevisitMsg, error) {
reader := m.Content.ByteReader()
srcImg, _, err := image.Decode(reader)
if err != nil {
return m, err
}

dstImg := image.NewRGBA(srcImg.Bounds())
err = t(srcImg, *dstImg)

dstImgBuf := bytes.NewBuffer(nil)

format := m.ImageType()
log.Infof("Processing image in format: %s", format)

switch format {
case "image/jpeg":
err = jpeg.Encode(dstImgBuf, dstImg, nil)
if err != nil {
return m, err
}
case "image/jpg":
err = jpeg.Encode(dstImgBuf, dstImg, nil)
if err != nil {
return m, err
}

case "image/png":
err = png.Encode(dstImgBuf, dstImg)
if err != nil {
return m, err
}
case "image/gif":
err = gif.Encode(dstImgBuf, dstImg, nil)
if err != nil {
return m, err
}
default:
return m, errors.New(fmt.Sprintf("%s is not a supported image format", format))
}

dstImgBase64 := base64.StdEncoding.EncodeToString(dstImgBuf.Bytes())

return &RevisitMsg{
Content: ImageData{
Data: fmt.Sprintf("data:image/%s;base64,%s", format, dstImgBase64),
},
}, nil
}
58 changes: 0 additions & 58 deletions revisit_msg.go
Original file line number Diff line number Diff line change
@@ -1,14 +1,9 @@
package gorevisit

import (
"bytes"
"encoding/base64"
"errors"
"fmt"
"image"
"image/gif"
"image/jpeg"
"image/png"
"io"
"io/ioutil"
"strings"
Expand Down Expand Up @@ -53,59 +48,6 @@ func (r *RevisitMsg) ImageType() string {
return strings.Split(subheader, ";")[0]
}

// ImageRevisitor, given a RevisitMsg and an image transformation function, runs the
// image data through the transformation and returns a new RevisitMsg with the
// transformed image
func ImageRevisitor(m *RevisitMsg, t func(src image.Image, dst image.RGBA) error) (*RevisitMsg, error) {
reader := m.Content.ByteReader()
srcImg, _, err := image.Decode(reader)
if err != nil {
return m, err
}

dstImg := image.NewRGBA(srcImg.Bounds())
err = t(srcImg, *dstImg)

dstImgBuf := bytes.NewBuffer(nil)

format := m.ImageType()
log.Infof("Processing image in format: %s", format)

switch format {
case "image/jpeg":
err = jpeg.Encode(dstImgBuf, dstImg, nil)
if err != nil {
return m, err
}
case "image/jpg":
err = jpeg.Encode(dstImgBuf, dstImg, nil)
if err != nil {
return m, err
}

case "image/png":
err = png.Encode(dstImgBuf, dstImg)
if err != nil {
return m, err
}
case "image/gif":
err = gif.Encode(dstImgBuf, dstImg, nil)
if err != nil {
return m, err
}
default:
return m, errors.New(fmt.Sprintf("%s is not a supported image format", format))
}

dstImgBase64 := base64.StdEncoding.EncodeToString(dstImgBuf.Bytes())

return &RevisitMsg{
Content: ImageData{
Data: fmt.Sprintf("data:image/%s;base64,%s", format, dstImgBase64),
},
}, nil
}

// BytesToDataURI, given a byte array and a content type,
// creates a Data URI of the content
func BytesToDataURI(data []byte, contentType string) string {
Expand Down

0 comments on commit 8df5b76

Please sign in to comment.