2

我正在使用 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值保存到我image column的 SQL Server 中。我也这样做了,一切都很好。

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

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

我也尝试在PictureBoxelement in 中使用相同的二进制代码Winforms,但我得到了那个Argument Exception: Parameter is not valid错误。

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

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

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

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

提前致谢。

4

1 回答 1

1

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

通常,我将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";
于 2012-06-13T11:42:50.243 回答