Use el atributo accept de la etiqueta de entrada. Entonces, para aceptar solo PNG, JPEG y GIF, puede usar el siguiente código:
<input type="file" name="myImage" accept="image/x-png,image/gif,image/jpeg" />
O simplemente:
<input type="file" name="myImage" accept="image/*" />
Tenga en cuenta que esto solo proporciona una pista al navegador sobre qué tipos de archivos mostrar al usuario, pero esto se puede eludir fácilmente, por lo que siempre debe validar el archivo cargado en el servidor también.
Debería funcionar en IE 10+, Chrome, Firefox, Safari 6+, Opera 15+, pero el soporte es muy incompleto en los móviles (a partir de 2015) y, según algunos informes, esto puede evitar que algunos navegadores móviles carguen algo, así que asegúrese de probar bien sus plataformas de destino.
Para obtener asistencia detallada sobre el navegador, consulte http://caniuse.com/#feat=input-file-accept