【问题标题】:Convert Image Control to Byte Array Asp.Net将图像控件转换为字节数组 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 控件中显示的文件是从哪里来的,为什么不直接指向那个文件呢?为什么要将内存中的整个文件作为字节数组?

标签: c# asp.net image bytearray


【解决方案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);它有效。我应该发布我的解决方案吗?
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2015-08-16
  • 2013-05-19
  • 2013-01-14
  • 2013-07-29
相关资源
最近更新 更多