You could use the `file` command. It's available on most linux distributions by default, and you can get it for Windows via the GnuWin32 file package.
Call it with:
$ file --mime-type clock.png
clock.png: image/png
Note that it's not 100% accurate - I don't think anything can be theoretically.
If you want to do that in code, there's `libmagic` that provides a C api. It can process either files or in-memory buffers. (`file` uses that on Linux.)