簡體   English   中英

使用C#從JSignature轉換Base30圖像

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM