将图像控件转换为字节数组 Asp.Net
Posted
技术标签:
【中文标题】将图像控件转换为字节数组 Asp.Net【英文标题】:Convert Image Control to Byte Array Asp.Net 【发布时间】:2016-08-11 20:00:03 【问题描述】:目标: - 将 asp.net 图像控件保存到服务器中的文件夹 使用此代码
File.WriteAllBytes(Server.MapPath(imgPath), imageData);
imageData 假设在字节数组中。
现在我在谷歌上搜索了很多关于如何将 Asp.net Image Control 转换为字节数组的内容,但仍然没有找到任何解决方案。 外面的很多例子展示了如何从 UploadFile 控件而不是从图像控件本身保存。
我发现的唯一最接近的就是这个
public static Byte[] ImageToByteArray(Image img)
try
MemoryStream mstImage = new MemoryStream();
img.Save(mstImage, System.Drawing.Imaging.ImageFormat.Jpeg);
Byte[] bytImage = mstImage.GetBuffer();
return bytImage;
catch (Exception ex)
但是我应该传递的正确参数是什么?我尝试传递 Image1.ImageUrl,但它返回错误。
非常感谢任何帮助。
【问题讨论】:
该方法需要一个Image
,所以通过Image1
...但是要求没有什么意义。实际上,每次运行上述代码时,JPEG 伪影都会增加,因为您不必要地再次压缩已经从磁盘读取的图像。 Image 控件中显示的文件是从哪里来的,为什么不直接指向那个文件呢?为什么要将内存中的整个文件作为字节数组?
【参考方案1】:
如果您已经有一个看起来像这样的现有 Image
控件:
<form id="form1" runat="server">
<asp:Image ID="ExampleImageControl" runat="server" ImageUrl="~/Images/YourImage.jpg" />
</form>
您可以创建一个方法来接受您的 Image 控件,读取字节并通过您之前提到的 File.ReadAllBytes()
方法按预期返回它们:
public byte[] ImageControlToByteArray(Image image)
try
// Attempt to find the Image that the control points to
// and read all of it's bytes
return File.ReadAllBytes(Server.MapPath(image.ImageUrl));
catch (Exception ex)
// Uh oh, there was a problem reading the file
return new byte[0];
然后您可以按预期检索字节:
var imagebytes = ImageControlToByteArray(YourImageControl);
【讨论】:
图像控件最初没有 ImageUrl。从网络摄像头捕获后附加图像。在我的 ButtonClick 方法中,它不会识别此方法 ImageControlToByteArray。突出显示该方法将告诉我生成方法存根。 如果发布了实际的图像数据(例如,以便您可以通过服务器端代码访问它),那么您只需要确保在您的图像发布之前不要调用它人口稠密。否则,听起来您将使用一些基于 javascript 的库来填充您的图像(来自您的网络摄像头),那么这可能是一个完全不同的问题。 是的,从网络摄像头捕获后将填充图像。这部分没有问题。现在图像已填充,我想将其保存到服务器中的文件夹中。使用这行代码 File.WriteAllBytes(Server.MapPath(imgPath), imageData); 如果您已经拥有数据(可能使用imageData
)并且您提供了目标路径imgPath
,那么假设没有出现权限问题,那么应该按照预期将该内容保存到您的文件中.
问题已解决。正在转换为字节的 ImageData 不是正确的值。从网络摄像头捕获图像后,我将 image.src 的值存储到隐藏字段。然后,检索要转换为字节数组的隐藏字段内的值。将字节数组值传递给此 File.WriteAllBytes(Server.MapPath(imgPath), imageData);它有效。我应该发布我的解决方案吗?以上是关于将图像控件转换为字节数组 Asp.Net的主要内容,如果未能解决你的问题,请参考以下文章