将图像控件转换为字节数组 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的主要内容,如果未能解决你的问题,请参考以下文章

在 C# 中将 Base64 字节数组解码为图像

ASP.Net MVC:如何显示模型中的字节数组图像

无法从数据库中检索字节数组图像并在图片框控件中显示

将 PIL 图像转换为字节数组?

bytearray 到图像 asp.net

将字节数组转换/显示为 bmp/jpeg 图像