2011-07-26 20 views
31

Potrzebuję konwertować obraz do adresu URL danych (osadzanie obrazu) w aplikacji Win dla HTML i potrzebuję adresu URL danych (osadzania obrazu) do obrazu.jak przekonwertować obraz do danych URI dla html z C#?

+2

Tytuł lepiej tłumaczy pytanie, jakie jest faktyczne pytanie. –

+0

dzięki Jeff, mam wiele obrazów na dysku lokalnym, obrazy mają inny rozmiar, niektóre obrazy są duże, a niektóre obrazy małe, potrzebuję rozwiązania dla jakiegoś obrazu przekonwertować na HTML i używać w przeglądarce? – hashi

Odpowiedz

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

@Andrew: Podaj technicznie poprawną odpowiedź. – Ankur

21

Czy adres URL danych nie jest po prostu zakodowany w bazie obrazów 64?

To powinno wystarczyć.

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

Jeśli używasz ASP.NET MVC, nieco ujawnił kod z Ankur's answer może być bardziej wygodnym:

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(); 
} 

i wykorzystanie (tylko zastępując @Url.Content z @Url.DataUriContent):

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