Fast Go image encoding, decoding, and transformations using OpenCV, libpng, and libjpeg-turbo.
- opencv 2.4.x
- libturbo-jpeg 1.4+
import(
"os"
"github.com/cotap/prism"
)
func main() {
f, _ := os.Open("example.jpg")
img, _ := prism.Decode(f)
defer img.Release() // ensures timely release of C heap memory
_ = img.FlipV()
_ = img.Fit(500, 500)
w, _ := os.Create("resized.jpg")
defer w.Close()
// fast encoding with libjpeg-turbo
prism.EncodeJPEG(w, img, 90)
// or, since prism.Image implements image.Image:
// jpeg.Encode(w, img, &jpeg.Options{Quality: 90})
}
Prism allocates memory for image decoding and processing using the OpenCV
allocator on the C heap. In order to avoid long-term leaks, prism uses Go's
runtime.SetFinalizer
to release C memory when the Go object is GC'd.
HOWEVER, because Go's collector can't see into the C heap, it may not run as
frequently as needed to keep memory usage low. In order to ensure most
efficient memory usage, always call func (img *prism.Image) Release()
after
you're done with an image.