The GitHub wiki for VIPS has a page [1] very relevant to GP's question. It lists two dozen alternatives to VIPS (both command line tools and libraries) and compares how they performed on a load-crop-scale-apply convolution-save task. The source code for each implementation of the task is right there on the page.
[1] https://github.com/jcupitt/libvips/wiki/Speed-and-memory-use