func (this *ResizeRProcessor) Process(img *img4g.Image) error { log.Debug("process resize r") var err error tran := this.Cat.NewTransaction("Command", "ResizeR") defer func() { tran.SetStatus(err) tran.Complete() }() var width, height int64 width, height, err = img.Size() if err != nil { return err } if width <= this.Width && height <= this.Height { return nil } var ( x int64 = 0 y int64 = 0 w int64 = width h int64 = height ) if width > this.Width && height > this.Height { p1 := float64(this.Width) / float64(this.Height) p2 := float64(width) / float64(height) w = 0 h = 0 if math.Abs(p1-p2) > 0.0001 { if p2 > p1 { //以高缩小 h = height w = int64(math.Floor(float64(h) * p1)) x = (width - w) / 2 } if p2 < p1 { //以宽缩小 w = width h = int64(math.Floor(float64(w) / p1)) y = (height - h) / 2 } err = img.Crop(w, h, x, y) if err != nil { return err } } err = img.Resize(this.Width, this.Height) return err } else { if width > this.Width { x = (w - this.Width) / 2 w = this.Width } if height > this.Height { y = (h - this.Height) / 2 h = this.Height } err = img.Crop(w, h, x, y) return err } }
func (this *ResizeCProcessor) Process(img *img4g.Image) error { l4g.Debug("process resize c") var err error tran := this.Cat.NewTransaction(Image, "ResizeC") defer func() { tran.SetStatus(err) tran.Complete() }() var width, height = this.imgWidth, this.imgHeight var wd, ht int64 if width == 0 || height == 0 { wd, ht, err = img.Size() if err != nil { return err } width = wd height = ht } p1 := float64(this.Width) / float64(this.Height) p2 := float64(width) / float64(height) var ( x int64 = 0 y int64 = 0 w int64 = 0 h int64 = 0 ) if math.Abs(p1-p2) > 0.0001 { if p2 > p1 { //以高缩小 h = height w = int64(math.Floor(float64(h) * p1)) x = (width - w) / 2 } if p2 < p1 { //以宽缩小 w = width h = int64(math.Floor(float64(w) / p1)) y = (height - h) / 2 } err = img.Crop(w, h, x, y) if err != nil { return err } } err = img.Resize(this.Width, this.Height) return err }
func (this *ResizeRProcessor) Process(img *img4g.Image) error { l4g.Debug("process resize r") var err error tran := this.Cat.NewTransaction(Image, "ResizeR") defer func() { tran.SetStatus(err) tran.Complete() }() var width, height int64 width, height, err = img.Size() if err != nil { return err } if width <= this.Width && height <= this.Height { return nil } if width > this.Width && height > this.Height { c := ResizeCProcessor{this.Width, this.Height, this.Cat, width, height} err = c.Process(img) return err } var ( x int64 = 0 y int64 = 0 w int64 = width h int64 = height ) if width > this.Width { x = (w - this.Width) / 2 w = this.Width } if height > this.Height { y = (h - this.Height) / 2 h = this.Height } err = img.Crop(w, h, x, y) return err }