I will typically want the image to scale from the center, and thus set this as well:
The basis behind this is to create two elements - one being your image, and the second being your clipping mask (a shape typically, such as a rectangle, polygon, etc.) than then is applied as the clipTo property to your image element. This solution is covered in:
Multiple clipping areas on Fabric.js canvas
To "crop" the image however; this takes more effort as this isn't a default functionality offered by Fabric JS. I've done a fair bit of work around this and have yet to come up with a bullet-proof solution that works for text, images, rectangles, polygons, circles, rotation angles, etc.
To ensure that resizing is done proportinatly, you can simply add the following properties to your image object: