[英]Using C# to convert base30 image from jsignature
我需要有關.net方法的幫助,以轉換jsignature導出的數據。 我有一個Android應用程序發送的壓縮數據(例如,“quaok1C2S3Q3W3A2A2I1Uk1y800Z6c1y1y1W2G2w2C2u1O1M1wie800Y2ccm1A1C1Q1S1U2G2y2M1O1u1y4424681y1C1Q2M2Q2w2A2woce_dC200Z2688408ccoeiamiga800000Y48gic1u1ucmaes866402000Z224420000000000002”)base30,為了將它們保存到數據庫,並做一些業務receving數據.NET Web服務(REST)。 目前,我正在嘗試將數據從base30轉換為圖像的一些問題。 例如,我要引用jsignature zip( https://github.com/willowsystems/jSignature )的“ extras”文件夾中的SignatureDataConversion_dotNet代碼,以便進行轉換和管理數據。 但是有些東西對我不起作用...或者,也許我還沒有完全理解如何在.Net中管理base30簽名。
這是我正在使用的一部分代碼:
Base30Converter conv = new Base30Converter();
int[][][] bytearray = conv.GetData(base30_string_from_app);
string actual = jSignature.Tools.SVGConverter.ToSVG(bytearray);
var byteArray = Encoding.ASCII.GetBytes(actual);
using (var stream = new MemoryStream(byteArray))
{
var svgDocument = SvgDocument.Open(stream);
var bitmap = svgDocument.Draw();
bitmap.Save("D:\prova.png", ImageFormat.Png);
}
但是我得到的圖像似乎只是發送的整個簽名的“一部分”,只有一些筆觸。 我還檢查了要處理的字符串:它與應用程序發送的字符串相同。 作為對此的確認,我成功地使用jSignature“ setData”方法將其導入到html畫布上。
預先感謝您的任何幫助
作為在.Net中將base30轉換為svg的可能問題的另一個示例,這里我們從http://willowsystems.github.io/jSignature/#/demo/進行了簽名導出文件的svg轉換。
[svg] [https://] dl.dropboxusercontent.com/u/77767500/SVG_from_jsignature_site.svg
這是相同符號的基數30轉換:
7yf1Ul1H4232121Z4577dabdllhhne1uf6423Y2587ddn1v1x1G1A1D1wpordd8431Z1338ffppkm1v1Db964210Y158b46ffgqkhqfef8673523_3EZ2519332455410Y315329745ba9me5343421200100000Z22345233345323311000Y142853746743121000Z10041112224332_jVZ746ba553200Y12368cabceb8a74200Z234a4ebcebfdbc65Y68afjdjd9f864334_4SZ110000Y3368745322000000Z1123355584323113000000Y31Z101101201001221
嘗試使用轉換
Base30Converter conv = new Base30Converter();
int[][][] bytearray = conv.GetData(stream_to_convert);
string actual = jSignature.Tools.SVGConverter.ToSVG(bytearray);
我得到:
[https://] dl.dropboxusercontent.com/u/77767500/SVG_from_jsignature_lib.svg
如您所見,兩個“ svg”轉換似乎有所不同。 因此,也許.Net的jSignature.Tools中存在某些無法正常工作的問題……
我使用了jSignature軟件包中包含的.NET工具進行了大量的試驗和錯誤,但是,這最終是我從base30 jSignature字符串生成PNG的方式。 我正在使用VB .NET並返回System.Drawing.Image(您可以根據需要輸出):
Public Function GetSignaturePNG() As System.Drawing.Image
'jSignature conversion from base30 to SVG
Dim base30Converter As New jSignature.Tools.Base30Converter()
Dim arrBase30Data As Integer()()() = base30Converter.GetData(Me.SigBase30) 'our original base30 string
Dim strSVG As String = jSignature.Tools.SVGConverter.ToSVG(arrBase30Data)
'first convert it to SVG
Dim mySVG As SvgDocument
Dim newStream As New System.IO.MemoryStream(System.Text.ASCIIEncoding.[Default].GetBytes(strSVG))
mySVG = SvgDocument.Open(newStream, Nothing)
'then convert it to PNG
Dim tempStream As New System.IO.MemoryStream()
mySVG.Draw().Save(tempStream, System.Drawing.Imaging.ImageFormat.Png)
Dim img As System.Drawing.Image = System.Drawing.Image.FromStream(tempStream)
Return img
End Function
2014年6月20日更新:Leo,我能夠將您的base30簽名字符串(在您的原始問題中列出)成功導出為SVG和PNG。 而且我得到了整個“獅子座”簽名,而不僅僅是一些筆觸。 所以我不確定我們在做什么。 您確定要將整個base30字符串傳遞給該函數嗎?
SVGConverter類使用string.Format將小數輸出到字符串。 如果您當前的文化例如設置為德語,它將輸出帶逗號的分數而不是點。 因此,將CultureInfo.InvariantCulture作為該類中每個String.Format的第一個參數添加,以確保SVG輸出的格式為小數點。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.