2012-06-13 5 views
2

Я использую плагин JQuery (ScriptCam), чтобы пользователь мог делать снимки с веб-камеры.Как сохранить Asp: Элемент изображения, созданный на стороне клиента

Вот моя кнопка с 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); 

Я также попытался использовать тот же двоичный код в PictureBox элементе в Winforms, но я получил, что Argument Exception: Parameter is not valid ошибки.

Я пытался сделать это со вчерашнего дня.

Так что я подумал, может быть, что-то не так, как я сохраняю двоичные данные. Поскольку я использую текстовое поле как пустой стакан, возможно, двоичный код меняется, а я копирую его в текстовое поле и позже.

Кроме того, изображения, которые я сохраняю таким образом, имеют разные двоичные данные, чем двоичные данные образа другого рабочего компонента.

Так что мне интересно, есть ли способ сохранить это изображение на сервере после того, как я привяжу его атрибут src к JS? Если я смогу сохранить это изображение, я буду использовать образ temp.jpg, тогда я буду генерировать его двоичный код позже.

Заранее спасибо.

ответ

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"; 
Смежные вопросы