将SignaturePad位图转换为EPS的问题

时间:2014-12-03 17:28:15

标签: bitmap imagemagick xamarin.android imagemagick-convert

我正在尝试将Android的Xamarin SignaturePad组件生成的位图转换为EPS。它需要是EPS,以便我可以将它附加到LaTeX文档(LaTeX仅根据我的知识处理EPS)。

我用来执行此操作的代码如下:

        Bitmap bitmap;
        try
        {
            bitmap = SignaturePadView.GetImage();
        }
        catch (Exception e)
        {
            MvxTrace.Trace(e.StackTrace);
            Finish();
            return;
        }
        string encodedImage;
        using (var stream = new MemoryStream())
        {
            bitmap.Compress(Bitmap.CompressFormat.Png, 100, stream);
            var bitmapData = stream.ToArray();
            encodedImage = Convert.ToBase64String(bitmapData, Base64FormattingOptions.None);
        }

然后我接受该字符串并将其发送到我的服务器后端,后端将其解码为PNG。当我这样做时,我得到的结果看起来正确,你可以在这里看到:

enter image description here

如果我然后尝试使用ImageMagick转换为这样的EPS:

convert myimage.png myimage.eps

我只用一个黑盒子得到一张图片。为了确认这种行为,我尝试将PNG转换为JPEG,如下所示:

convert myimage.png myimage.jpg

我得到的黑盒子就像你在这里看到的那样:

enter image description here

如果我在Photoshop中打开已解码的png并执行“另存为JPEG”或“另存为EPS”,我会得到我想要的内容。

我现在的问题是......我做错了什么?我上面尝试了相同的代码片段,但将CompressFormat更改为JPEG并获得了相同的黑盒结果。任何有这种图像转换经验的人都可以提供帮助吗?

2 个答案:

答案 0 :(得分:2)

基于Cheesebaron的反馈,我能够追踪我的问题。有两种方法可以解决这个问题:

1)。 改变

bitmap = SignaturePadView.GetImage();

bitmap = SignaturePadView.GetImage(Color.Black, Color.White);

这会将填充颜色更改为白色,从而在从签名视图中返回位图时删除透明背景。

2)。 将alpha标记与ImageMagick convert命令一起使用以删除透明度:

convert -alpha background myimage.png test.jpg

答案 1 :(得分:1)

LaTeX不能只为图形或图像嵌入EPS文件。那个时代早已不复存在......

如果你有一个合理的LaTeX安装,你可以使用JPEG,PNG,TIFF和PDF(以及EPS)在你的页面上包含图片。


无论如何,要将带有ImageMagick的PNG转换为JPEG或EPS,请尝试以下命令:

 convert http://i.stack.imgur.com/Uxcm7.png -alpha remove UXcm7.eps
 convert http://i.stack.imgur.com/Uxcm7.png -alpha remove UXcm7.jpg