|
|
|
@ -0,0 +1,42 @@ |
|
|
|
package images |
|
|
|
|
|
|
|
import ( |
|
|
|
"bytes" |
|
|
|
"image" |
|
|
|
"image/color" |
|
|
|
"image/gif" |
|
|
|
"image/jpeg" |
|
|
|
"image/png" |
|
|
|
|
|
|
|
"github.com/chrislusf/seaweedfs/weed/glog" |
|
|
|
"github.com/disintegration/gift" |
|
|
|
) |
|
|
|
|
|
|
|
func Rotate(ext string, data []byte, rotate int) (resized []byte) { |
|
|
|
if rotate < 1 { |
|
|
|
return data |
|
|
|
} |
|
|
|
srcImage, _, err := image.Decode(bytes.NewReader(data)) |
|
|
|
if err == nil { |
|
|
|
var dstImage *image.NRGBA |
|
|
|
g := gift.New( |
|
|
|
gift.Rotate(float32(rotate), color.Opaque, gift.CubicInterpolation), |
|
|
|
) |
|
|
|
dstImage = image.NewNRGBA(g.Bounds(srcImage.Bounds())) |
|
|
|
g.Draw(dstImage, srcImage) |
|
|
|
|
|
|
|
var buf bytes.Buffer |
|
|
|
switch ext { |
|
|
|
case ".png": |
|
|
|
png.Encode(&buf, dstImage) |
|
|
|
case ".jpg", ".jpeg": |
|
|
|
jpeg.Encode(&buf, dstImage, nil) |
|
|
|
case ".gif": |
|
|
|
gif.Encode(&buf, dstImage, nil) |
|
|
|
} |
|
|
|
return buf.Bytes() |
|
|
|
} else { |
|
|
|
glog.Error(err) |
|
|
|
} |
|
|
|
return data |
|
|
|
} |