Преобразование изображения в base64

У меня есть следующий код для преобразования изображения в base64:

private void btnSave_Click(object sender, RoutedEventArgs e) { StreamResourceInfo sri = null; Uri uri = new Uri("Checked.png", UriKind.Relative); sri = Application.GetResourceStream(uri); BitmapImage bitmap = new BitmapImage(); bitmap.SetSource(sri.Stream); WriteableBitmap wb = new WriteableBitmap(bitmap); MemoryStream ms = new MemoryStream(); wb.SaveJpeg(ms, bitmap.PixelWidth, bitmap.PixelHeight, 0, 100); byte[] imageBytes = ms.ToArray(); base64 = System.Convert.ToBase64String(imageBytes); } 

И следующий код для получения формы изображения Bitmap base 64:

 public static BitmapImage base64image(string base64string) { byte[] fileBytes = Convert.FromBase64String(base64string); using (MemoryStream ms = new MemoryStream(fileBytes, 0, fileBytes.Length)) { ms.Write(fileBytes, 0, fileBytes.Length); BitmapImage bitmapImage = new BitmapImage(); bitmapImage.SetSource(ms); return bitmapImage; } } 

Поэтому, когда я конвертирую и деконвертировать, он пуст.

Я знаю, что деконвертер работает, потому что, когда я даю ему точную строку:

 string base64="iVBORw0KGgoAAAANSUhEUgAAACQAAAAkCAQAAABLCVATAAACH0lEQVR42q3WoZKrMBQGYGRkIpHEoY9DMrh1nUGtzxPcGV7gCsTaK3iBCqa2ipmrVqLrWrmytjL3nBwoEGD30ja/6JaSj/wp3SEIXjpUoB+Oeg0zpoR+NsyoDVOgi39cbYHAy4MQTc0wOYZepxRBUkn9UxxEiNnXxyYwd6w/438hSddHJilv1tqv664Shle1DeJaJihPV9uNQ+NWBRK2QVSr+GjtaFzOIpdjKFShnoY+Gv0N0u0OVLexY48NQ+68JchdpQu/o1piVMu6faJdwjNWIAYyl55bqGUtbndO53TzCIpUpCkdlEm+V3J3Ir8r3uops2+FkTmvx832IGJwN97xS/5Ti0LQ/WLwtbxMal2ueAwvc2c8CAgSJip5U4+tKHECMlUzq2UcA9EyROuJi6/71dtzWAfVcq0Jw1CsYh13kDDteVoirE+zWtLVinQ8ZAS5YlVlvRHWfi3pakUQL0OOwmp/W/vN6Gt5zBIkzEezxnCtMJsxDIECTYmhp3bej4HHzaalNMyAnzE0UBKp6Z1Do2pwd3JkAH6CxlTs/bZOZ661yMwhohDLQqREMWz8UAvWoUQleggehG5dSPUbv28GJlnKHGJsqPi7vuG/MGTyCGslOtkCOayrGOa/indajdudb6FUpXoepgiLHIIMriddyzrkMBhGAqlOH4U2hKCT2j0NdU8jFbzpZ3LQlh9srPqEQ1Y9lEP2CVa99KHvH8mnrGGdl9V9AAAAAElFTkSuQmCC"; 

Какой мой Checked.png конвертирован в онлайн-конвертер. Он отлично распадается.

И это моя base64, которую я получаю путем преобразования:

 "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" 

Моя проблема в том, что строка, которую я получаю как base64 из моего кода, неверна. * Что я сделал не так? *

Как насчет попытки:

 public static BitmapImage base64image(string base64string) { byte[] fileBytes = Convert.FromBase64String(base64string); using (MemoryStream ms = new MemoryStream(fileBytes)) { Image streamImage = Image.FromStream(ms); context.Response.ContentType = "image/jpeg"; streamImage.Save(context.Response.OutputStream, ImageFormat.Jpeg); return streamImage; } } 

Я согласен с Алексеем в том, что ваш код для чтения изображения в нем выглядит немного странным. Недавно я написал код для аналогичной задачи, которую я делал, что могло бы указать вам в правильном направлении:

  string fileContent = null; /* Check the file actually has some content to display to the user */ if (uploadFile != null && uploadFile.ContentLength > 0) { byte[] fileBytes = new byte[uploadFile.ContentLength]; int byteCount = uploadFile.InputStream.Read(fileBytes, 0, (int)uploadFile.ContentLength); if (byteCount > 0) { fileContent = CreateBase64Image(fileBytes); } } private string CreateBase64Image(byte[] fileBytes) { Image streamImage; /* Ensure we've streamed the document out correctly before we commit to the conversion */ using (MemoryStream ms = new MemoryStream(fileBytes)) { /* Create a new image, saved as a scaled version of the original */ streamImage = ScaleImage(Image.FromStream(ms)); } using (MemoryStream ms = new MemoryStream()) { /* Convert this image back to a base64 string */ streamImage.Save(ms, System.Drawing.Imaging.ImageFormat.Png); return Convert.ToBase64String(ms.ToArray()); } } 

не ответ: больше длинного комментария … OP утверждает, что код декодирования работает отлично, также он выглядит подозрительно. Также предполагается, что код будет проверен для работы с изображениями PNG, но при сохранении кода явно SaveJpeg допустимый JPG с SaveJpeg


Ваш код, создающий stream для чтения, выглядит странно – вы создаете stream поверх существующего массива байтов, чем записываете те же байты в этот stream, и передаете этот stream, не обращаясь к 0 к некоторому методу.

Потенциальное исправление (при условии, что BitampImage может принимать stream JPG):

  • не вызывайте Write вообще, поскольку stream уже имеет нужные вам байты
  • set ms.Position = 0 после записи в stream.

Примечание. Я не уверен, что если вы хотите удалить stream, который является источником для BitmapImage , вам может понадобиться также удалить его.

  • Как невозможно «расшифровать» hash MD5?
  • Преобразование секретного ключа в строку и наоборот
  • Какая лучшая библиотека шифрования в C / C ++?
  • Как использовать шифрование / дешифрование 3DES в Java?
  • Как преобразовать String в SecretKey
  • Определения Truststore и Keystore
  • Как безопасно отправлять пароль через HTTP?
  • Каким образом значения хеша MD5 не являются обратимыми?
  • Шифрование и расшифровка большой строки в java с помощью RSA
  • шифровать данные в SharedPreferences
  • JCE не может аутентифицировать поставщика BC в приложении java swing
  • Давайте будем гением компьютера.