我需要有关.net方法的帮助,以转换jsignature导出的数据。
我有一个Android应用程序正在发送base30压缩数据(例如“ quaok1C2S3Q3W3A2A2I1Uk1y800Z6c1y1y1y1W2G2w2C2u1O1M1wie800Y2ccm1A1C1Q1S1U2G2y2M1O1u1y4424681y1C2Q2A2C2C1C2C1C2C1C2C1C2C1C2C2A1C1C2C2A2C2C2A1C2C2A2C2C2A2C2C2E2C2C2E2C2E2E2C2C2E2C2E2C2E2C2E2C2E2C2E2C2E2E2E2C2E2E2E2C1121E2C1E2C2C1E1C2C2C16881E1C2C2C2C12071C2C2C16882C2C16882C2Y4A4C4A4C过
.NET Web服务(其余)接收数据,以将其保存到数据库中并开展业务。
目前,我正在尝试将数据从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字符串传递给该函数吗?

10-06 13:41