@Gargron You're using sync.Pool, and that is expected behaviour. It doesn't free memory immediately.
https://golang.org/pkg/sync/#Pool
If you would like something more efficient and less hermetic, you should probably implement this using goroutines, and return your image blobs via channels.
That will give you ultimate control and won't be lax with the abuse of memory.
@haitch I never used goroutines before. How would this work?