我正在尝试将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。当我这样做时,我得到的结果看起来正确,你可以在这里看到:
如果我然后尝试使用ImageMagick转换为这样的EPS:
convert myimage.png myimage.eps
我只用一个黑盒子得到一张图片。为了确认这种行为,我尝试将PNG转换为JPEG,如下所示:
convert myimage.png myimage.jpg
我得到的黑盒子就像你在这里看到的那样:
如果我在Photoshop中打开已解码的png并执行“另存为JPEG”或“另存为EPS”,我会得到我想要的内容。
我现在的问题是......我做错了什么?我上面尝试了相同的代码片段,但将CompressFormat更改为JPEG并获得了相同的黑盒结果。任何有这种图像转换经验的人都可以提供帮助吗?
答案 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