c# - 使用C#从jsignature转换base30图像

标签 c# javascript android image

我需要一些有关 .net 方法的帮助来转换 jsignature 导出的数据。 我有一个发送base30压缩数据的Android应用程序(例如“quaok1C2S3Q3W3A2A2I1Uk1y800Z6c1y1y1W2G2w2C2u1O1M1wie800Y2ccm1A1C1Q1S1U2G2y2M1O1u1y4424681y1C1Q2M2Q2w2A2woce_dC200Z 2688408ccoeamiga800000Y48gic1u1ucmaes866402000Z224420000000000002") 和一个 .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 Canvas 上。

预先感谢您的帮助

<小时/>

作为 .Net 中 base30 转换为 svg 可能出现问题的另一个示例,这里我们有来自 http://willowsystems.github.io/jSignature/#/demo/ 的签名导出的 svg 转换。

[svg] [https://] dl.dropboxusercontent.com/u/77767500/SVG_from_jsignature_site.svg

这是相同符号的以 30 为底的转换:

7yf1Ul1H4232121Z4577dabdllhhne1uf6423Y2587ddn1v1x1G1A1D1wpordd8431Z1338ffppkm1v1Db964210Y158b46ffgqkhqfef8673523_3EZ2519332455410Y31532 9745ba9me5343421200100000Z22345233345323311000Y142853746743121000Z10041112224332_jVZ746ba553200Y12368cabceb8a74200Z234a4ebcebfdbc65Y 68afjdjd9f864334_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”转换似乎是不同的。 所以,也许,jSignature.Tools for .Net 中有些东西无法正常工作......

最佳答案

我对 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

更新 6.20.2014:Leo,我能够成功将您的 base30 签名字符串(在您的原始问题中列出)导出为 SVG 和 PNG。我得到了整个“leo”签名,而不仅仅是几个断笔画。所以我不确定我们在做什么不同的事情。您确定要将整个 base30 字符串传递给函数吗?

关于c# - 使用C#从jsignature转换base30图像,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/22195358/

相关文章:

c# - BookSleeve BlockingRemoveLeft 只返回一些插入列表的项目

c# - 统一: Change default lifetime manager for implicit registrations and/or disable them

c# - 为什么 MapHttpAttributeRoutes() 不从属性添加路由?

Android只加载ListView的可见元素

android - Google API 对来自 GoogleAuthUtil.getToken 的一次性授权代码的授予无效

c# - 在 C# ASP.NET View 中动态嵌入 Html 属性

javascript - 如何使用 Javascript 在 Input&lt;input&gt; 和 Select <select> 标签中设置值

javascript - 如何从 angularjs/javascript 中特定位置的数组中删除元素

javascript - 无限水平 slider 具有不同的上一个和下一个动画

android - 在名为 Google map 的程序中