mira lo que se me ocurre es algo por el estilo 
 
colocas un input file con el estilo en visibility:hidden y mediante un java script lo puedes invocar una vez hecho esto lo que puedes hacer es recuperar el path de tu archivo en una variable y despues de tus debidas validaciones cambiar tu imagen por otra con el texto de guardar ahora o algo por el estilo. como sea aqui te dejo un ejemplo del como lo haria yo. 
la primer parte de la magia la haces con javaScript y html y te quedaria algo asi: 
 Código PHP:
    <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml" >
<head runat="server">
    <title></title>
    
    <script type="text/javascript">
        function ActiveFileUpload() {
            var filehide = document.getElementById('HideFile');
            filehide.click();
            if (filehide.value.length > 0) {
                 document.getElementById('upload').style.visibility = 'visible';
                 document.getElementById('img_Path').style.visibility = 'hidden';
                 document.getElementById('lbruta').innerHTML = filehide.value.toString();
                
            }
                        
        }
     </script>
     
     <style>
            .hide{
                visibility:hidden;
            }
     </style>
</head>
<body>
    <form id="form1" runat="server">
    <div>
        <a id="img_Path" onclick="ActiveFileUpload();"><img src="Images/Onion.jpg" alt="Activar"/></a>
        <asp:ImageButton ID="upload" runat="server" 
            ImageUrl="~/Images/Onion2.jpg" CssClass="hide" />
        <input id = "HideFile" style="visibility:hidden;" type="file" runat="server" />
        <asp:Label ID="lbruta" runat="server" ></asp:Label>
    </div>
    </form>
</body>
</html> 
   
  la segunda parte que es la de subir el archivo al servidor la resuelves con ASP y te quedaria algo asi: 
Código:
 Private Sub Cmd_Subir_Archivo_Click(ByVal sender As System.Object, ByVal e As System.Web.UI.ImageClickEventArgs) 
        Dim Ext As String = LCase(System.IO.Path.GetExtension(HideFile.PostedFile.FileName))
        Dim Ruta = "Temp\" & System.IO.Path.GetFileName(HideFile.PostedFile.FileName)
        'Adjuntamos el Objeto Obtenido mediante el File Upload
        HideFile.PostedFile.SaveAs(Ruta)
    End Sub
  ahi me avisas como te fue! esto sirve y pues es lo mas rapido que se me ocurrio.. 
si quieres el ejemplo de lo que hice contactame y te lo mando con mucho gusto por correo suerte y espero te sirva