기본 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 declartition은 Base64 이미지 문자열을 받아들이고 있으며, 이미지로 변환하고 싶습니다.내 코드 세트는 Base64 문자열이 아닌 "www.mysite.com/test.jpg"과 같은 이미지에만 사용할 수 있습니다.제안해 주실 분 있나요?고마워요!
다음은 문자열 매개 변수를 받아들이도록 메서드를 수정할 수 있는 예입니다.그런 다음 영상 개체를 영상과 함께 저장합니다.저장(...)합니다.
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+.
바이트가 비트맵을 나타낼 때 사용합니다.이런 경우 메모리 스트림을 폐기하기 전에 이미지를 저장합니다(아직 사용 설명서에 있는 동안).
Base64를 파일에 직접 저장할 수 있습니다.
string filePath = "MyImage.jpg";
File.WriteAllBytes(filePath, Convert.FromBase64String(base64imageString));
이게 제가 결국 하게 된 방법입니다.
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);
}
비트맵을 통해 다음을 제안합니다.
public void SaveImage(string base64)
{
using (MemoryStream ms = new MemoryStream(Convert.FromBase64String(base64)))
{
using (Bitmap bm2 = new Bitmap(ms))
{
bm2.Save("SavingPath" + "ImageName.jpg");
}
}
}
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();
}
}
제 경우 두 줄의 코드만으로 작동합니다.다음 C# 코드를 테스트합니다.
String dirPath = "C:\myfolder\";
String imgName = "my_mage_name.bmp";
byte[] imgByteArray = Convert.FromBase64String("your_base64_string");
File.WriteAllBytes(dirPath + imgName, imgByteArray);
바로 그겁니다.이 솔루션이 정말로 귀하에게 효과가 있다면 상향 투표해 주십시오.잘 부탁드립니다.
이와 유사한 시나리오에서 다음과 같은 작업을 수행할 수 있었습니다.
byte[] bytes = Convert.FromBase64String(Base64String);
ImageTagId.ImageUrl = "data:image/jpeg;base64," + Convert.ToBase64String(bytes);
ImageTagId
ASP 이미지 태그의 ID입니다.
Base64로 인코딩된 이진 데이터 문자열이 있으면 다음을 수행할 수 있습니다.
byte[] encodedDataAsBytes = System.Convert.FromBase64String(encodedData);
결과 배열을 파일에 쓸 수 있어야 합니다.
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;
}
}
사용.MemoryStream
좋은 생각이 아니며 MSDN의 사양을 위반합니다.Image.FromStream()
어디라고 적혀있나요?
이미지 수명 동안 스트림을 열어 두어야 합니다.
더 나은 솔루션은 다음과 같은 방법을 사용하는 것입니다.
public Image ConvertBase64ToImage(string base64)
=> (Bitmap)new ImageConverter().ConvertFrom(Convert.FromBase64String(base64));
NetCore에 있습니다.6.0
, HttpClient 및 비동기 메서드를 새 버전에서 사용할 수 있습니다.File
학급.
구현은 매우 간단합니다.
static async Task DownloadFile(string imageUrl, string pathToSave)
{
var content = await GetUrlContent(url);
if (content != null)
{
await File.WriteAllBytesAsync(pathToSave, content);
}
}
static async Task<byte[]?> GetUrlContent(string url)
{
using (var client = new HttpClient())
using (var result = await client.GetAsync(url))
return result.IsSuccessStatusCode ? await result.Content.ReadAsByteArrayAsync():null;
}
용도는 다음과 같습니다.
await DownloadFile("https://example.com/image.jpg", @"c:\temp\image.jpg");
언급URL : https://stackoverflow.com/questions/5400173/converting-a-base-64-string-to-an-image-and-saving-it 입니다.
'programing' 카테고리의 다른 글
Swift 스크립트에서 터미널 명령을 실행하려면 어떻게 해야 합니까?(예: xcodebuild)입니다. (0) | 2023.04.25 |
---|---|
네트워크 드라이브의 UNC 경로를 찾으시겠습니까? (0) | 2023.04.25 |
UIButton에 여러 줄 텍스트를 추가하려면 어떻게 해야 합니까? (0) | 2023.04.25 |
WPF에서 점선 또는 점선 테두리를 설정하려면 어떻게 해야 합니까? (0) | 2023.04.25 |
WebAPI 2에서 DefaultInlineConstraintResolver 오류가 발생했습니다. (0) | 2023.04.25 |