Thanks Ofnuts
.
I've implemented most of your suggestions. The only ones I didn't are listed below with reasons why
Let me know if there's anything else that can be improved.

I've implemented most of your suggestions. The only ones I didn't are listed below with reasons why
- lots of common code between the two if/elif blocks. Some of it could be taken out. Personally, I would just set the new canvas/width or height. Then outside of the conditions the code would take care of offsets and such. Yes, the computations would yield 0 for one of the values...
- I don't see the purpose of computing bg_scale, since anyway the background will be sized to the new canvas dimensions that you already have.
Let me know if there's anything else that can be improved.