2011-07-26 27 views
31

Necesito convertir la imagen a URL de datos (imagen incrustada) en la aplicación Win para HTML y necesito URL de datos (imagen incrustada) en la imagen.cómo convertir Image to Data URI para Html con C#?

+2

El título hace un mejor trabajo al explicar la pregunta, la pregunta real. –

+0

gracias Jeff, tengo muchas imágenes en el disco local, las imágenes tienen diferentes tamaños, algunas imágenes son grandes y otras son pequeñas. Necesito una solución para convertir algunas imágenes a HTML y usarlas en el navegador web. – hashi

Respuesta

54
 public static string GetDataURL(string imgFile) 
     { 
      return "<img src=\"data:image/" 
         + Path.GetExtension(imgFile).Replace(".","") 
         + ";base64," 
         + Convert.ToBase64String(File.ReadAllBytes(imgFile)) + "\" />"; 
     } 
+0

@Andrew: Agregue la respuesta técnicamente correcta. – Ankur

21

¿No es una URL de datos solo la base de la imagen 64 codificada?

Entonces esto debería hacerlo.

var bytes = File.ReadAllBytes("C:\\somepath\\picture.png"); 
var b64String = Convert.ToBase64String(bytes); 
var dataUrl = "data:image/png;base64," + b64String; 
5

Si está utilizando ASP.NET MVC, reveló un poco de código Ankur's answer podría ser más conveniente:

public static string DataUriContent(this UrlHelper url, string path) 
{ 
    var filePath = HttpContext.Current.Server.MapPath(path); 
    var sb = new StringBuilder(); 
    sb.Append("data:image/") 
     .Append((Path.GetExtension(filePath) ?? "png").Replace(".", "")) 
     .Append(";base64,") 
     .Append(Convert.ToBase64String(File.ReadAllBytes(filePath))); 
    return sb.ToString(); 
} 

y el uso (sólo la sustitución de @Url.Content con @Url.DataUriContent):

<img src="@Url.DataUriContent("~/Path/To/Image/yourImage.png")"/>