Преобразование строки базы 64 в изображение и сохранение ее
Вот мой код:
protected void SaveMyImage_Click(object sender, EventArgs e)
{
string imageUrl = Hidden1.Value;
string saveLocation = Server.MapPath("~/PictureUploads/whatever2.png") ;
HttpWebRequest imageRequest = (HttpWebRequest)WebRequest.Create(imageUrl);
WebResponse imageResponse = imageRequest.GetResponse();
Stream responseStream = imageResponse.GetResponseStream();
using (BinaryReader br = new BinaryReader(responseStream))
{
imageBytes = br.ReadBytes(500000);
br.Close();
}
responseStream.Close();
imageResponse.Close();
FileStream fs = new FileStream(saveLocation, FileMode.Create);
BinaryWriter bw = new BinaryWriter(fs);
try
{
bw.Write(imageBytes);
}
finally
{
fs.Close();
bw.Close();
}
}
}
Верхнее объявление imageUrl принимает строку изображения Base64, и я хочу преобразовать ее в изображение. Я думаю, что мой набор кода работает только для изображений типа "www.mysite.com/test.jpg", а не для строки Base64. У кого-нибудь есть предложения? Спасибо!
Ответы
Ответ 1
Вот пример, вы можете изменить метод для принятия строкового параметра. Затем просто сохраните объект изображения с помощью image.Save(...).
public Image LoadImage()
{
//data:image/gif;base64,
//this image is a single pixel (black)
byte[] bytes = Convert.FromBase64String("R0lGODlhAQABAIAAAAAAAAAAACH5BAAAAAAALAAAAAABAAEAAAICTAEAOw==");
Image image;
using (MemoryStream ms = new MemoryStream(bytes))
{
image = Image.FromStream(ms);
}
return image;
}
Возможно получить исключение A generic error occurred in GDI+.
, когда байты представляют растровое изображение. Если это происходит, сохраните изображение перед удалением потока памяти (пока он находится внутри оператора using).
Ответ 2
Вы можете сохранить Base64 непосредственно в файл:
string filePath = "MyImage.jpg";
File.WriteAllBytes(filePath, Convert.FromBase64String(base64imageString));
Ответ 3
Вот что я закончил с.
private void SaveByteArrayAsImage(string fullOutputPath, string base64String)
{
byte[] bytes = Convert.FromBase64String(base64String);
Image image;
using (MemoryStream ms = new MemoryStream(bytes))
{
image = Image.FromStream(ms);
}
image.Save(fullOutputPath, System.Drawing.Imaging.ImageFormat.Png);
}
Ответ 4
Я бы предложил через Bitmap:
public void SaveImage(string base64)
{
using (MemoryStream ms = new MemoryStream(Convert.FromBase64String(base64)))
{
using (Bitmap bm2 = new Bitmap(ms))
{
bm2.Save("SavingPath" + "ImageName.jpg");
}
}
}
Ответ 5
В моем случае он работает только с двумя строками кода. Проверьте приведенный ниже код С#:
String dirPath = "C:\myfolder\";
String imgName = "my_mage_name.bmp";
byte[] imgByteArray = Convert.FromBase64String("your_base64_string");
File.WriteAllBytes(dirPath + imgName, imgByteArray);
Что это. Пожалуйста, голосуйте, если вы действительно найдете это решение для вас. Спасибо заранее.
Ответ 6
Если у вас есть строка двоичных данных, которая кодируется Base64, вы должны сделать следующее:
byte[] encodedDataAsBytes = System.Convert.FromBase64String(encodedData);
Вы должны иметь возможность записать результирующий массив в файл.
Ответ 7
В аналогичном сценарии для меня работало следующее:
byte[] bytes = Convert.FromBase64String(Base64String);
ImageTagId.ImageUrl = "data:image/jpeg;base64," + Convert.ToBase64String(bytes);
ImageTagId
- это идентификатор тега изображения ASP.
Ответ 8
Вот рабочий код для преобразования изображения из строки base64 в объект Image
и сохранения его в папке с уникальным именем файла:
public void SaveImage()
{
string strm = "R0lGODlhAQABAIAAAAAAAP///yH5BAEAAAAALAAAAAABAAEAAAIBRAA7";
//this is a simple white background image
var myfilename= string.Format(@"{0}", Guid.NewGuid());
//Generate unique filename
string filepath= "~/UserImages/" + myfilename+ ".jpeg";
var bytess = Convert.FromBase64String(strm);
using (var imageFile = new FileStream(filepath, FileMode.Create))
{
imageFile.Write(bytess, 0, bytess.Length);
imageFile.Flush();
}
}