aboutsummaryrefslogtreecommitdiff
path: root/go/images/resizing.go
diff options
context:
space:
mode:
authorChris Lu <chris.lu@gmail.com>2014-05-15 00:30:46 -0700
committerChris Lu <chris.lu@gmail.com>2014-05-15 00:30:46 -0700
commit025589adf87271ff6793c866257cda8e5b97beab (patch)
tree1f3ac73a26af6717ce04d0a1c513c57a987ffdab /go/images/resizing.go
parentf7d6909b6f4ac42209395bf7f4fd3a6377613267 (diff)
downloadseaweedfs-025589adf87271ff6793c866257cda8e5b97beab.tar.xz
seaweedfs-025589adf87271ff6793c866257cda8e5b97beab.zip
Add auto fixing jpg file orientation.
Diffstat (limited to 'go/images/resizing.go')
-rw-r--r--go/images/resizing.go36
1 files changed, 36 insertions, 0 deletions
diff --git a/go/images/resizing.go b/go/images/resizing.go
new file mode 100644
index 000000000..f5077c1fd
--- /dev/null
+++ b/go/images/resizing.go
@@ -0,0 +1,36 @@
+package images
+
+import (
+ "bytes"
+ "github.com/disintegration/imaging"
+ "image"
+ "image/gif"
+ "image/jpeg"
+ "image/png"
+)
+
+func Resized(ext string, data []byte, width, height int) (resized []byte) {
+ if width == 0 && height == 0 {
+ return data
+ }
+ if srcImage, _, err := image.Decode(bytes.NewReader(data)); err == nil {
+ bounds := srcImage.Bounds()
+ var dstImage *image.NRGBA
+ if width == height && bounds.Dx() != bounds.Dy() {
+ dstImage = imaging.Thumbnail(srcImage, width, height, imaging.Lanczos)
+ } else {
+ dstImage = imaging.Resize(srcImage, width, height, imaging.Lanczos)
+ }
+ var buf bytes.Buffer
+ switch ext {
+ case ".png":
+ png.Encode(&buf, dstImage)
+ case ".jpg":
+ jpeg.Encode(&buf, dstImage, nil)
+ case ".gif":
+ gif.Encode(&buf, dstImage, nil)
+ }
+ return buf.Bytes()
+ }
+ return data
+}