2015-04-28 31 views
6

mam obraz z src = "data:image/png;base64....".C# konwersji danych obrazu do tablicy bajtów

chcę przekonwertować ten obraz do tablicy bajtów byte[].

Próbowałem coś takiego:

string[] Base64 = ImageData.Split(new char[] { ',' }); 

byte[] imageBytes = System.Convert.FromBase64String(Base64[1].ToString()); 

Ale myślę, że robię coś źle tutaj.

Proszę o pomoc.

UPDATE:

Oto jak naprawiłem go:

var base64Data = Regex.Match(ImageData.ImageURL, @"data:image/(?<type>.+?),(?<data>.+)").Groups["data"].Value; 

byte[] imageBytes = Convert.FromBase64String(base64Data); 
+0

Co nie działa? –

+0

Wygląda solidnie. Co się dzieje, jeśli uruchomisz to na swoich danych wejściowych? Ponadto, czy na pewno nie ma nawiasów okrągłych lub podobnych, które mogłyby zakłócać dekodowanie BASE64? CSS Data-URI jest zwykle zakończony nawiasami zamykającymi. – PeterK

+0

Czy otrzymujesz wyjątek/błąd? – Tushar

Odpowiedz

-1

nie mam pojęcia, dlaczego chcesz mieć obraz jako bajt-tablicy, ale myślę abour Memorystreams. Ten przykład znajduje się w vb.net:

Private Function GetImageByteArray(im As Image) As Byte() 
    Try 
     Using st As System.IO.MemoryStream = New System.IO.MemoryStream 
      im.Save(st, Imaging.ImageFormat.Raw) 
      Return st.ToArray 
     End Using 
    Finally 
     GC.Collect() 
    End Try 
End Function 


private byte[] GetImageByteArray(Image im) 
{ 
    try 
    { 
     using(MemoryStream st = new MemoryStream()) 
     { 
      im.save(st, ImageFormat.Raw); 
      return st.toarray(); 
     } 
    } 
    finally 
    { 
     GC.Collect(); 
    } 
} 

Ale opisany problem jest bardziej podobny do konwertowania danych z łańcucha na tablicę bajtów.

image im; 
using memorystream st = new memorystream(Convert.FromBase64String(data.substring(data.firstindexof(','))) 
{im = image.fromstream(st);} 
+0

Pytanie dotyczy C#, a nie VB. – mins

+1

Tłumaczenie do C# added – Beinfreiheit

+0

Cóż, oczywiście pobiera dane obrazu jako kodowany ciągi base64 z jakiegoś źródła i potrzebuje bajtów do stworzenia obrazu. Twoje rozwiązanie jest dobre, jeśli już masz * obraz i chcesz uzyskać bajty. Więc nie, nie odpowiada na pytanie. –