繁体   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