Utilisez le accepter de la balise d'entrée. Pour n'accepter que les PNG, JPEG et GIF, vous pouvez utiliser le code suivant :
<input type="file" name="myImage" accept="image/png, image/gif, image/jpeg" />
Ou simplement :
<input type="file" name="myImage" accept="image/*" />
Notez que cela ne fournit qu'une indication au navigateur quant aux types de fichiers à afficher à l'utilisateur, mais cela peut être facilement contourné, vous devez donc toujours valider le fichier téléchargé sur le serveur également.
Il devrait fonctionner dans IE 10+, Chrome, Firefox, Safari 6+, Opera 15+, mais la prise en charge est très sommaire sur les mobiles (à partir de 2015) et selon certains rapports, cela pourrait empêcher certains navigateurs mobiles de télécharger quoi que ce soit, alors assurez-vous de bien tester vos plateformes cibles.
Pour une prise en charge détaillée des navigateurs, voir http://caniuse.com/#feat=input-file-accept