convirtiendo una cadena base 64 en una imagen y guardándola

Aquí está mi código:

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

La statement top imageUrl está tomando una cadena de imagen Base64, y quiero convertirla en una imagen. Creo que mi conjunto de códigos solo funciona para imágenes como “www.misitio.es/test.jpg”, no para una cadena de Base64. Alguien tiene algunas sugerencias? ¡Gracias!

Aquí hay un ejemplo, puede modificar el método para aceptar un parámetro de cadena. Luego simplemente guarde el objeto de imagen con .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; } 

Es posible obtener una excepción. A generic error occurred in GDI+. cuando los bytes representan un bitmap. Si esto sucede, guarde la imagen antes de deshacerse de la secuencia de la memoria (mientras aún está dentro de la instrucción de uso).

Puede guardar Base64 directamente en el archivo:

 string filePath = "MyImage.jpg"; File.WriteAllBytes(filePath, Convert.FromBase64String(base64imageString)); 

Aquí es a lo que terminé yendo.

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

Sugeriría a través de 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"); } } } 

En mi caso, solo funciona con dos líneas de código. Pruebe el siguiente código C #:

 String dirPath = "C:\myfolder\"; String imgName = "my_mage_name.bmp"; byte[] imgByteArray = Convert.FromBase64String("your_base64_string"); File.WriteAllBytes(dirPath + imgName, imgByteArray); 

Eso es. Amablemente vote si realmente encuentra que esta solución funciona para usted. Gracias por adelantado.

Si tiene una cadena de datos binarios codificados en Base64, debería poder hacer lo siguiente:

 byte[] encodedDataAsBytes = System.Convert.FromBase64String(encodedData); 

Debería poder escribir la matriz resultante en un archivo.

En un escenario similar, lo que funcionó para mí fue el siguiente:

 byte[] bytes = Convert.FromBase64String(Base64String); ImageTagId.ImageUrl = "data:image/jpeg;base64," + Convert.ToBase64String(bytes); 

ImageTagId es el ID de la etiqueta de imagen ASP.

Aquí está el código de trabajo para convertir una imagen de una cadena base64 a un objeto de Image y almacenarla en una carpeta con un nombre de archivo único:

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