简介
无论何时我尝试从base64编码的字符串(通过前端的canvas.toDataURL发送给我)序列化图像时,我都遇到了一个非常奇怪的问题。每当发送的图像使用IEC61966-2-1
编码时,我的图像都会返回null。我尝试使用Windows屏幕截图(shift + win + s)对原始图像进行屏幕截图,并且此图像处理得很好。另一方面,由两个随机在线转换器(png-> png,png-> jpg)转换的原始图像在每种情况下均返回null。
到目前为止我尝试过的事情
我已经查阅了Image.FromStream
的文档,该文档对于负责序列化图像的方法至关重要。另外,我尝试获取有关IEC61966-2-1
格式的一些信息,并大体检查是否还有其他人遇到此问题。由于我对一般格式没有更深入的了解,我发现信息不足以解决这个问题,所以我谦虚地问这个问题。
问题
我该怎么做才能正确序列化以IEC61966-2-1
标准编码的图像?我非常想在前端坚持使用canvas.toDataURL
,因为我可以轻松地将样式应用于画布。
我的代码
1)前端
// assume canvas with id myCanvas defined
// 1 - to base64 string
var canvas = document.getElementById("myCanvas");
var image = canvas.toDataURL("image/png");
image = image.replace('data:image/png;base64,', '');
// 2 - AJAX request to the server
jQuery.ajax({
type: "POST",
url: '@Url.Action("ChangePic", "Ucp")', // assume this is a valid action
data: {pic: image}
});
2)后端
public JsonResult ChangePic(string pic)
{
byte[] imageBytes = Convert.FromBase64String(pic);
using (var ms = new MemoryStream(imageBytes, 0, imageBytes.Length))
{
Image image = Image.FromStream(ms, true, true);
}
// shortened of some fail checks
return Json(new {result = ""});
}
很抱歉,这并不是一个最小的,可重复的示例,那样会更长一些。希望它应该像现在这样足够清楚。
请随时询问其他详细信息/说明。