Shubi that's an interesting question.
I'll answer your second question first. While the dimensions of the image does affect the size once encoded, I think it is being stored as a PNG file. PNG files deal well with repeated data, so large blocks of colour and small palettes can massively reduce the file size. This can mean an image with large dimensions can take up less space than a smaller one.
Now for the original question it's important to consider that you can store things in 2 ways with the local storage plugin. A piece of binary data ( which is basically what an image is ) can be stored as an a array of bytes ( N ) or a Base64 String ( N * 1.33 * Bytes per character ). Note that the latter is multiplied by the bytes per character, so is dependent on what character encoding is being used underneath. I don't actually know what is used in this situation, and it might vary between browsers.
The best solution is to probably just store the binary data for the image in local storage without converting it to anything, as you know exactly how many bytes will be stored.
The convoluted option would be to do the text encoding yourself with the BinaryData plugin, like so: BinaryData.SetFromText(BinaryData.GetBase64())
and stash it. As BinaryData uses UTF-8 for text you know it would only use 1 byte per character.