Voici mon code:
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 déclaration top imageUrl prend une chaîne d'image en Base64 et je souhaite la convertir en image. Je pense que mon ensemble de code ne fonctionne que pour des images telles que "www.monsite.com/test.jpg" et non pour une chaîne Base64. Quelqu'un a des suggestions? Merci!
Voici un exemple, vous pouvez modifier la méthode pour accepter un paramètre de chaîne. Ensuite, enregistrez l'objet image avec .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;
}
Il est possible d'obtenir une exception A generic error occurred in GDI+.
lorsque les octets représentent un bitmap. Si cela se produit, enregistrez l'image avant de disposer du flux de mémoire (tout en restant dans l'instruction using).
Vous pouvez enregistrer Base64 directement dans un fichier:
string filePath = "MyImage.jpg";
File.WriteAllBytes(filePath, Convert.FromBase64String(base64imageString));
Voici ce que j'ai fini par aller avec.
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);
}
Je suggérerais via 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");
}
}
}
Dans mon cas, cela ne fonctionne qu'avec deux lignes de code. Testez le code C # ci-dessous:
String dirPath = "C:\myfolder\";
String imgName = "my_mage_name.bmp";
byte[] imgByteArray = Convert.FromBase64String("your_base64_string");
File.WriteAllBytes(dirPath + imgName, imgByteArray);
C'est ça. Merci de voter si vous trouvez que cette solution fonctionne pour vous. Merci d'avance.
Si vous avez une chaîne de données binaires codée en Base64, vous devriez pouvoir effectuer les opérations suivantes:
byte[] encodedDataAsBytes = System.Convert.FromBase64String(encodedData);
Vous devriez être capable d'écrire le tableau résultant dans un fichier.
Dans un scénario similaire, ce qui a fonctionné pour moi a été le suivant:
byte[] bytes = Convert.FromBase64String(Base64String);
ImageTagId.ImageUrl = "data:image/jpeg;base64," + Convert.ToBase64String(bytes);
ImageTagId
est l'ID de la balise d'image ASP.
Voici un code de travail permettant de convertir une image d'une chaîne base64 en un objet Image
et de la stocker dans un dossier avec un nom de fichier unique:
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();
}
}