package images import ( "bytes" "image" "image/gif" "image/jpeg" "image/png" "io" "github.com/disintegration/imaging" "github.com/seaweedfs/seaweedfs/weed/glog" ) func Cropped(ext string, read io.ReadSeeker, x1, y1, x2, y2 int) (cropped io.ReadSeeker, err error) { srcImage, _, err := image.Decode(read) if err != nil { glog.Error(err) return read, err } bounds := srcImage.Bounds() if x2 > bounds.Dx() || y2 > bounds.Dy() { read.Seek(0, 0) return read, nil } rectangle := image.Rect(x1, y1, x2, y2) dstImage := imaging.Crop(srcImage, rectangle) var buf bytes.Buffer switch ext { case ".jpg", ".jpeg": if err = jpeg.Encode(&buf, dstImage, nil); err != nil { glog.Error(err) } case ".png": if err = png.Encode(&buf, dstImage); err != nil { glog.Error(err) } case ".gif": if err = gif.Encode(&buf, dstImage, nil); err != nil { glog.Error(err) } } return bytes.NewReader(buf.Bytes()), err }