You would use a graphics editing application. Adobe Fireworks is popular for this, Photoshop is always a viable option, GIMP would be a free option, and the list goes on.

A spritesheet is simply one single image containing multiple sprites. Within the game you would load the single spritesheet and then only display one portion at any given appropriate time. It's more efficient to load into memory the single image than dozens more. Hence why spritesheets are used.

So keeping that in consideration: I would grid out the spritesheet into equal sections and ensure no one sprite exceeds said dimensions. Or at least not in a way you cannot effectively account for within your engine.

You could even encode the actual size of each fragment into the sheet, but that would not be something you'd easily do by just copying and pasting images in gimp of photoshop.
The way would be to either add metadata in a comment field that some formats (like JPEG) understand, or encode it directly into the pixel values of the corner pixels of each fragment (e.g. the colour value of the first 2 pixels to be read from each fragment could indicate the number of pixels horizontally and vertically, the colour values of the last 2 pixels the starting position in the sheet of the next fragment).