Use o atributo de aceitação da marca de entrada. Portanto, para aceitar apenas PNGs, JPEGs e GIFs, você pode usar o seguinte código:
<input type="file" name="myImage" accept="image/x-png,image/gif,image/jpeg" />
Ou simplesmente:
<input type="file" name="myImage" accept="image/*" />
Observe que isso fornece apenas uma dica para o navegador sobre quais tipos de arquivos exibir para o usuário, mas isso pode ser facilmente contornado, portanto, você sempre deve validar o arquivo carregado no servidor também.
Ele deve funcionar no IE 10+, Chrome, Firefox, Safari 6+, Opera 15+, mas o suporte é muito superficial em celulares (a partir de 2015) e, segundo alguns relatórios, isso pode realmente impedir que alguns navegadores móveis enviem qualquer coisa, então certifique-se de testar bem suas plataformas de destino.
Para suporte detalhado ao navegador, consulte http://caniuse.com/#feat=input-file-accept