Oto mój kod:
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();
}
}
}
Górna deklaracja imageUrl pobiera ciąg obrazu Base64 i chcę go przekonwertować na obraz. Myślę, że mój zestaw kodu działa tylko dla obrazów takich jak „www.mysite.com/test.jpg”, a nie dla ciągu Base64. Czy ktoś ma jakieś sugestie? Dzięki!
c#
asp.net
image-processing
base64
anthonypliu
źródło
źródło
Możesz zapisać Base64 bezpośrednio do pliku:
string filePath = "MyImage.jpg"; File.WriteAllBytes(filePath, Convert.FromBase64String(base64imageString));
źródło
Image.Save()
). Oba działają, ale z jakiegoś powodu ta wersja zmniejsza rozmiar mojego pliku o 30% bez zauważalnej zmiany jakości obrazuOto, z czym skończyłem.
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); }
źródło
A generic error occurred in GDI+
opisany tutaj błąd . Przeniesienieimage.Save
wnętrza bloku using naprawiło to za mnie.Sugerowałbym za pośrednictwem 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"); } } }
źródło
W moim przypadku działa tylko z dwoma wierszami kodu. Przetestuj poniższy kod C #:
String dirPath = "C:\myfolder\"; String imgName = "my_mage_name.bmp"; byte[] imgByteArray = Convert.FromBase64String("your_base64_string"); File.WriteAllBytes(dirPath + imgName, imgByteArray);
Otóż to. Uprzejmie głosuj, jeśli naprawdę uważasz, że to rozwiązanie działa dla Ciebie. Z góry dziękuję.
źródło
dirPath
musi mieć@
znak przed łańcuchem i..e.@"C:\myfolder\"
albo musisz uciec przed ukośnikami w ciągu, np."C:\\myfolder\\"
Oto działający kod do konwersji obrazu z ciągu base64 na
Image
obiekt i przechowywania go w folderze o unikalnej nazwie pliku: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(); } }
źródło
W podobnym scenariuszu zadziałało dla mnie:
byte[] bytes = Convert.FromBase64String(Base64String); ImageTagId.ImageUrl = "data:image/jpeg;base64," + Convert.ToBase64String(bytes);
ImageTagId
to identyfikator tagu obrazu ASP.źródło
Jeśli masz ciąg danych binarnych zakodowanych w formacie Base64, powinieneś być w stanie wykonać następujące czynności:
byte[] encodedDataAsBytes = System.Convert.FromBase64String(encodedData);
Powinieneś być w stanie zapisać wynikową tablicę do pliku.
źródło
public bool SaveBase64(string Dir, string FileName, string FileType, string Base64ImageString) { try { string folder = System.Web.HttpContext.Current.Server.MapPath("~/") + Dir; if (!Directory.Exists(folder)) { Directory.CreateDirectory(folder); } string filePath = folder + "/" + FileName + "." + FileType; File.WriteAllBytes(filePath, Convert.FromBase64String(Base64ImageString)); return true; } catch { return false; } }
źródło