MetaTube / imageutil /crop.go
henry99a's picture
Clean commit for Hugging Face Spaces without binary files
ca7217f
package imageutil
import (
"image"
)
func CropImage(img image.Image, rect image.Rectangle) image.Image {
return img.(interface {
SubImage(image.Rectangle) image.Image
}).SubImage(rect)
}
const (
minRatio = 1e-2
maxRatio = 1e2
)
func CropImagePosition(img image.Image, ratio float64, pos float64) image.Image {
if ratio < minRatio || ratio > maxRatio {
return img // no cropping
}
width := img.Bounds().Dx()
height := img.Bounds().Dy()
var (
w, h = width, height //nolint:ineffassign
x, y = 0, 0 // default
)
if w = int(float64(height) * ratio); w < width {
x = max(min(int(float64(width)*pos)-int(float64(w)/2), width-w), 0)
} else if h = int(float64(width) / ratio); h < height {
y = max(min(int(float64(height)*pos)-int(float64(h)/2), height-h), 0)
}
return CropImage(img,
image.Rect(0, 0, w, h).
Add(image.Pt(x, y)).Add(img.Bounds().Min))
}