如何保存客户端生成的 asp:image 元素

How to Save Asp:Image Element Generated on the Client Side

本文关键字:asp 元素 image 客户端 何保存 保存      更新时间:2023-09-26

我正在使用JQuery插件(ScriptCam)来允许用户从网络摄像头拍摄快照。

这是我使用 JS 代码的按钮:

<asp:Button ID="btnTakeSnapshot" runat="server" Text="Take SS" OnClientClick="base64_toimage(); return false;" />

JS代码:

function base64_toimage() {  
    document.getElementById('<%= imgBinary.ClientID %>').src = "data:image/png;base64," + $.scriptcam.getFrameAsBase64();  
    document.getElementById('<%= txtImgBinary.ClientID %>').value = $.scriptcam.getFrameAsBase64();  
};

用户单击后,快照将绑定到以下Asp:Image元素:

<asp:Image ID="imgBinary" runat="server" Width="160" Height="120" /> 

我还为此Asp:TextBox编写二进制代码:

<asp:TextBox ID="txtImgBinary" TextMode="MultiLine" runat="server"></asp:TextBox> 

在这里,我想做的是在用户拍摄快照并单击最后一个"保存"按钮后,我将二进制代码从txtImgBinary.Text值保存到 SQL Server 中的image column。我也这样做了,一切都很好。

但是在我将数据库中的二进制值绑定到另一个页面后,它不起作用。我是这样做的:

imgUserPhoto.Attributes.Add("src", "data:image/png;base64," + binaryCodeFromDB);

我还尝试在Winforms PictureBox元素中使用相同的二进制代码,但我得到了Argument Exception: Parameter is not valid错误。

从昨天开始,我一直在尝试这样做。

所以我想也许我保存二进制数据的方式有问题。因为我将文本框用作空玻璃杯,所以在我复制到文本框并稍后从中复制时,二进制代码可能会发生变化。

此外,我以这种方式保存的图像具有与另一个工作组件的图像二进制数据不同的二进制数据。

所以我想知道有没有办法在我用 JS 绑定它的src属性后将此图像保存到服务器?如果我可以保存此图像,我将使用临时.jpg图像,然后稍后将生成其二进制代码。

提前谢谢。

我没有弄错以错误的方式保存代码的可能性。

通常,我将base64数组克隆到文本框,然后将文本框中的值复制到图像列。

可惜我没有意识到byte64数组与byte[]数组不同

因此,在保存此值之前,我进行了以下小对话:

byte[] bytes = Convert.FromBase64String(txtImgBinary.Text);

然后,我将这个bytes数组存储在我的数据库中。现在它工作正常。

<小时 />对于那些感兴趣的人,以下是我稍后如何使用此值:

(对于Asp:Image元素)

Image1.Attributes.Add("src", "data:image/png;base64," + Convert.ToBase64String(bytesValueFromDB));

(对于Winforms PictureBox元素)

MemoryStream stream = new MemoryStream(bytesValueFromDB);
System.Drawing.Image tempImage = System.Drawing.Image.FromStream(stream);
string FName = System.IO.Path.GetDirectoryName(System.Reflection.Assembly.GetExecutingAssembly().Location) + @"'tempImage.jpg";
tempImage.Save(FName);
imageFileName = FName;
ctlPictureBox.ImageLocation = System.IO.Path.GetDirectoryName(System.Reflection.Assembly.GetExecutingAssembly().Location) + @"'tempImage.jpg";