[英]Image from Base64 to Image
I am asking the user to upload an image, which can be any image format.我要求用户上传一张图片,可以是任何图片格式。
I pass the base64 data to my .Net controller, as well as the filename (From which, I can get the extension).我将 base64 数据以及文件名(从中可以获取扩展名)传递给我的 .Net 控制器。
I am then converting that base64 string into an Image.然后我将该 base64 字符串转换为图像。
public static Image Base64ToImage(string base64String)
{
// Convert base 64 string to byte[]
byte[] imageBytes = Convert.FromBase64String(base64String);
// Convert byte[] to Image
using (var ms = new MemoryStream(imageBytes, 0, imageBytes.Length))
{
Image image = Image.FromStream(ms, true);
return image;
}
}
I get an error:我收到一个错误:
The input is not a valid Base-64 string as it contains a non-base 64 character, more than two padding characters, or an illegal character among the padding characters输入不是有效的 Base-64 字符串,因为它包含非 Base-64 字符、两个以上的填充字符或填充字符中的非法字符
I think it's because the base54 string has:我认为这是因为 base54 字符串具有:
"data:image/jpeg;base64,/9j/4AAQSkZJRgABA ...." at the start. "data:image/jpeg;base64,/9j/4AAQSkZJRgABA ...." 在开头。
So I need to trim off the "data:image/jpeg;base64,", and then save it?所以我需要剪掉“data:image/jpeg;base64,”,然后保存? As I am removing data about the file type, do I need to specify it somewhere else?当我删除有关文件类型的数据时,是否需要在其他地方指定它?
All the example I find don't seem to trim anything off the front.我发现的所有示例似乎都没有从前面修剪任何东西。 They just save the string.他们只是保存字符串。 I'm guessing, something on my side is adding that header?我猜,我这边的某些东西正在添加该标题?
Hi Please find a version of working converters i had been using in the past, Do tell if you need more explanation.嗨,请找到我过去一直使用的工作转换器版本,请告诉您是否需要更多解释。
Seems like your conversion to base64 is the culprit!似乎您转换为 base64 是罪魁祸首!
/// <summary>
///1 Convert String to Image
/// </summary>
/// <param name="commands"></param>
/// <returns></returns>
public Image ConvertStringtoImage(string commands)
{
byte[] photoarray = Convert.FromBase64String(commands);
MemoryStream ms = new MemoryStream(photoarray, 0, photoarray.Length);
ms.Write(photoarray, 0, photoarray.Length);
Image image = System.Drawing.Image.FromStream(ms);
return image;
}
/// <summary>
///2. Read picture from Database and return as image
/// just change the mysql to sql server type.
/// </summary>
/// <param name="commands"></param>
/// <returns></returns>
public Image Readphotofromdb(string commands)
{
Image image = null;
using (MySqlConnection dbConn = new MySqlConnection(connector))
{
using (MySqlCommand cmd = new MySqlCommand(commands, dbConn))
{
dbConn.Open();
using (MySqlDataReader reader = cmd.ExecuteReader())
{
if (reader.Read())
{
byte[] photoarray = Convert.FromBase64String(reader.GetString(0));
MemoryStream ms = new MemoryStream(photoarray, 0, photoarray.Length);
ms.Write(photoarray, 0, photoarray.Length);
image = new Bitmap(ms);
}
}
}
}
MySqlConnection.ClearAllPools();
return image;
}
/// <summary>
/// 3. Convert Image to base64 string
/// </summary>
/// <param name="image"></param>
/// <returns></returns>
public string ConvertImageToString(Image image)
{
byte[] byteArray = new byte[0];
using (MemoryStream stream = new MemoryStream())
{
image.Save(stream, System.Drawing.Imaging.ImageFormat.Png);
stream.Close();
byteArray = stream.ToArray();
}
string base64String = Convert.ToBase64String(byteArray);
return base64String;
}
use image data like /9j/4AAQSkZJRgABAgAAAQABAAD/2wBDAAgGBgcGBQgHBwcJCQgKDBQ......9= instead of data:image/jpeg;base64,/9j/4AAQSkZJRgABAgAAAQABAAD/2wBDAAgGBgcGBQgHBwcJCQgKDBQ.. ....9=使用像 /9j/4AAQSkZJRgABAgAAAQABAAD/2wBDAAgGBgcGBQgHBwcJCQgKDBQ......9= 这样的图像数据代替 data:image/jpeg;base64,/9j/4AAQSkZJRgABAgAAAQABAAD/2wBDAAgGBgcGBQgHBwcJCQg9=
private void GetImage(){
string imagedata="/9j/4AAQSkZJRgABAgAAAQABAAD/2wBDAAgGBgcGBQgHBwcJCQgKDBQ..
....9=";
Image image=ImageFromBase64(imagedata);
}
public static Image ImageFromBase64(string base64String)
{
byte[] imageBytes = Convert.FromBase64String(base64String);
using (var ms = new MemoryStream(imageBytes, 0, imageBytes.Length))
{
Image image = Image.FromStream(ms, true);
return image;
}
}
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.