使用ExportString转换图形

Chr*_*nen 6 wolfram-mathematica

ExportString可以导出EMF或GIF吗?在这个演示中streamoutput.emf以某种方式被破坏:

Quiet[DeleteFile["C:\\Temp\\thisworks.emf"]];
Quiet[DeleteFile["C:\\Temp\\streamoutput.emf"]];

graphic = Graphics[{Thick, Red, Circle[{#, 0}] & /@ Range[4],
    Black, Dashed, Line[{{0, 0}, {5, 0}}]}];
Export["C:\\Temp\\thisworks.emf", graphic, "EMF"];

file = ExportString[graphic, "EMF"];
stream = OpenWrite["C:\\Temp\\streamoutput.emf", BinaryFormat -> True];
Write[stream, file];
Close[stream];
Run Code Online (Sandbox Code Playgroud)

如果ExportString有效,我可以使用它通过NETLink传输EMF,例如

kernel.Compute("ExportString[Graphics[Rectangle[]], \"EMF\"]");
File.WriteAllText("C:\\Temp\\output.emf", kernel.Result.ToString());
Run Code Online (Sandbox Code Playgroud)

附录

有那个工作.

kernel.Compute("ExportString[Graphics[Rectangle[]],{\"Base64\",\"EMF\"}]");
byte[] decodedBytes = Convert.FromBase64String(kernel.Result.ToString());
File.WriteAllBytes("C:\\Temp\\output.emf", decodedBytes);
Run Code Online (Sandbox Code Playgroud)

Hei*_*ike 8

通过它的外观,Write包括file写入时字符串的引号stream,因此输出文件以类似"GIF....而不是仅仅的方式开始GIF....当使用BinaryWrite而不是Write它似乎工作.例如

file = ExportString[graphic, "GIF"];
stream = OpenWrite["streamoutput.gif", BinaryFormat -> True];
BinaryWrite[stream, file];
Close[stream];
Import["streamoutput.gif"]
Run Code Online (Sandbox Code Playgroud)

产生

streamoutput

所以ExportString至少为GIF生成一个有效的字符串.我没有窗户,所以我无法测试EMF.

  • 我确认此解决方案也适用于Windows上的EMF. (3认同)