Great solution by @hardsetting, But I made some improvements to make it work with Safari(5.1.7) in windows
.image-upload > input {_x000D_
visibility:hidden;_x000D_
width:0;_x000D_
height:0_x000D_
}
_x000D_
<div class="image-upload">_x000D_
<label for="file-input">_x000D_
<img src="https://placehold.it/100/000000/ffffff?text=UPLOAD" style="pointer-events: none"/>_x000D_
</label>_x000D_
_x000D_
<input id="file-input" type="file" />_x000D_
</div>
_x000D_
I have used visibility: hidden, width:0
instead of display: none
for safari issue and added pointer-events: none
in img
tag to make it working if input file type tag is in FORM tag.
Seems working for me in all major browsers.
Hope it helps someone.