EPS Utility Toolbox由几种功能组成,可增强内置EPS打印引擎的输出。此工具箱旨在:
*提高EPS标准的依从性:http://partners.adobe.com/public/developer/ps
*提供后代调整
运行epssetup.m首先设置工具箱。
工具箱安装和配置
epssetup -首先运行这个程序来使用这个工具箱
epsfontpath -获取/设置postscript字体搜索路径
EpsFontalias - 获取/设置PostScript字体别名
epsfontlist - 获取搜索路径中的PostScript字体列表
EPS文件生成和转换
epswrite -将图形保存为EPS图像(已修复)
eps2raster -转换EPS图像PNG, BMP, JPEG,或TIFF图像(要求。内容)
EPS文件处理
epsembedfont -嵌入/反嵌入postscript字体(可以嵌入子集或未加密的字体字典)
EPSSETLINESTYLE - 设置线式风格(虚线,虚线和DASH-DOT)
EPSSETBGCOLOR - 设置背景颜色(支持透明度)金宝app
EPSPREVIEW - 添加/删除TIFF预览(REQ。GHOSTSCRIPT)
epssetbbox -设置边界框位置和大小
EPS文件信息
EPSGETBBOX - 获取边界框
epsgetfonts -获取使用的字体
EPS修复功能(由EPSWRITE.M内部调用)
epsfixfonts -修复字体相关问题
EPSFixBackground - 设置数字和轴属性(尤其是颜色)
EpscleanColordict - 清理RGB颜色定义
输入'help epsutil'获取命令窗口帮助。独立的m文件还包括完整的命令窗口帮助文本。
有些文件需要Ghostscript (www.ghostscript.com)安装在计算机上。
设定EPS图像的分辨率及大小:
epswrite(无花果。每股收益','Size',[2 4],'Resolution',600);
大小(= [宽度])以英寸为单位指定,并且在每英寸点处指定分辨率(更高分辨率会增加对象放置的精度)。在MATLAB中键入“帮助epswrite”的全部选项列表。
为作者准备稿件到AIP.org/PEERX -PRESS.ORG,使用
emswrite('fig.eps','embedfont','addsymbol');
嵌入符号字体,因为他们的在线提交系统没有配备符号字体(弄乱所有的TeX字符)。
同时,使用epswrite和eps2raster为我们这些使用pdftex为不接受pdf或png的出版商准备LaTeX手稿。执行
epswrite fig.eps
EPS2RASTER FIG.EPS PNG.
创建Fig.eps和Tim.png。这导致两种格式的相同图像,并且IMO也导致更好的质量图像,而不是直接从MATLAB打印,尤其是在GhostScript的抗锯齿支持。金宝app
提交徽标也使用此工具箱创建:
h =文本(0,0,sprintf (EPS \ nUtility \ nToolbox));
设置(h,'waternalignment','bottom','stopalAlignment','left','fontight','bold');
设置(GCA,'位置',[0.1 0 0.8 1]);
轴关闭
emswrite('logo','size',[150 100] / 200);
eps2箭头('logo','png','解决',200,'deletesource','开')
kesh ikuma(2021)。EPS Utility Toolbox.(//www.tatmou.com/matlabcentral/fileexchange/35429-eps-utility-toolbox), MATLAB中央文件交换。检索.
你好呀,
谢谢你这个提交。这是非常有帮助的。但是,您可能希望查看EPS2Raster.M文件的注释部分。您说应该以像素中指定“大小”。但是,在第247行中,您计算以下内容:
尺寸(:) =圆形(size * opts.resolution);
这为大小向量提供了非常大的数字,因为您将DPI乘以像素中的大小。尺寸应以英寸为单位指定,因此第147行以像素为单位返回正确的大小。如果指定像素中的大小,(例如,150 x 250)和DPI(300)中的分辨率,则为第247行尺寸值获得非常大的数字,这导致计算长度(我从不让它完成)最后给你错误的分辨率。
幸运的是,您不需要更改任何代码来保持它工作,只需更改帮助文件:)尽管,能够以像素为单位指定大小也不错。
另外,当你指定两个非零尺寸时,eps2raster错误。您可能需要为此添加一个错误消息。
再次感谢!
亲爱的Kesh。感谢你的投稿。这是难以置信的。然而,我得到一个错误,当我执行'epsembedfont',为一个特定的eps图像。不是所有的图像都会产生这种错误。我使用上一个版本(v12)。
这是跟踪:
单元格内容指数必须大于0
格栅(第28行)中的错误
fontdata {i(n)} = imgdata(iStart(n):iend(n));
EPSEMBETFONT(第85行)错误
[allfonts,embeddedfonts,embeddedfontdata,imgdata] = getfonts(imgdata);从IMGDATA中删除%FontData
PrintResult_LPI中的错误(第105行)
EpsembedFont([FNA'_cber.eps');
谢谢。
我使用OSX 10.9.5与MATLAB R2014A。当我运行设置文件,我得到了以下错误后,第4步:
步骤4.设置1类型字体搜索路径和字体别名表...
使用RMPREF时出错(第33行)
GROUP和PREF必须已经存在
EPSSetup中的错误(第102行)
Rmpref('epsutil','fontalias')
你知道为什么这个装置不起作用吗?
@kesh,谢谢你发布更新!做得好。
@noah - 我刚上传的最新版本应该解决这些问题。至于EPSCLEANCOLORDICT等,这些只需要在R2014B前进行。MathWorks完全改变了他们的EPS文件结构,使这些功能完全过时。如果使用R2014B,最新的eMSWRITE应自动将其调用转到这些后处理功能。如果您遇到其他问题,请告诉我。
嗨Kesh。谢谢你的投稿。我在R2014b下运行时有一些错误。第一个错误出现在嵌套函数parse_input中,因为如果N==n0, params单元格永远不会转换为结构。移动一行params = struct(params{:});在if语句解决这个问题之前。然后,EPSCLEANCOLORDICT, EPSFIXBACKGROUND和epssetbgcolor函数都给出错误,因为regexp无法匹配你搜索的字符串…我不知道该怎么办……
@sajjad - 不可以。此工具箱不打算以超越“修复”一些已知问题的EPS图像。
使用这个工具箱可以改变eps图像的字体大小吗?
@Chris -我对wma_ fonts也有同样的问题(matlab似乎在某个时候重命名了它们的字体,而illustrator似乎要求在系统上安装指定的字体,即使它嵌入到文件中??)
通过安装TTX并使用它将其重命名为MWA_CMR10和MWA_CMMI10(然后安装这些新字体)来解决问题,通过[使用Mac OS X]解决了问题。有关步骤说明,请参阅:http://www.fontgeek.net/blog/?cat=7.
我还结束了安装Fontforge并替换CMMI10中的一些字形,在我的版本中有点不起了(例如,三角形而不是小数点)
@Khawaja - EPS工具工具箱不能帮助您的问题。epsgetbbox只是返回封装在EPS图像中的所有对象的边界框。
如果它们是简单的形状(例如,一组连接的线段),你可能可以通过写你自己的事务长来“解码”后记。第一步是在PS标准的帮助下,在文本编辑器中查看。eps文件,上面的工具箱描述中有链接。祝你好运。
亲爱的伙伴们,
我需要在.eps文件中提取每个形状的宽度和长度。
但是当我使用epsgetbbox函数时,它会给我一个4元素的向量。
但是在我的。eps文件中有7个形状,如何提取边界框或宽度/长度的每个形状。
我将感谢你的帮助
谢谢你!
@jay - 您不正确地调用emswrite。您需要为EPS文件提供作为第一个参数的文件名。例如,emswrite('myplot.eps','size',[10 15])
也就是说,ESPWRITE应该对你的输入参数集产生一个“官方”错误。我将把这个支票放入下一个版本中。谢谢。
嗨,伙计们,我有以下问题:
epswrite(“大小”,[10]15日)
120如果〜isempty(params.units)
尝试去引用非结构数组字段。
EPSWRITE中的错误(第120行)
如果~ isempty (params.units)
我只运行epssetup,并试图导出一个简单的图形。我用的是matlab 2012b
@Junjie -你的修复是正确的。我在你的帖子之前上传了固定版本,但是新版本中唯一的变化是你建议的。谢谢。
这可能是因为新版本将关键词“painter”改成了“painters”;
当我将“画家”到程序中的“画家”改为“画家”时修复了它。
谢谢你的伟大作品
嗨Kesh,
我只是想利用您的工具箱,这里我有一个问题(可能是相当愚蠢的一个,:))。我有Ghostscript安装和一切成功时,使用epssetup,当我试图使用epswrite生成我的eps文件,我一直得到以下错误:
使用inputcheck>LocalCheckOption错误(第342行)
非法选项'-painter'给出。
inputcheck(第86行)中的错误
opindex = localCheckOption(cur_arg,选项);
打印错误(第166行)
[pj, devices, options] = inputcheck(pj, inputargs{:});
EPSWRITE错误(第187行)
打印(H,Outfile,CMD {:});
我错过了什么吗?顺便说一下,我运行的是64位Windows 8.1
提前致谢,
俊杰
@keshikuma:你是对的,我用matlab内在函数与matlab的“getdata.m”很合作,事实上我不明白它是如何工作的。非常感谢您的帮助
@Michele -你提取所有文件了吗?“getdata。M "在"private"子文件夹中,应该可以通过"epssetlinestyle "访问。只要“private”文件夹和“epssetlinestyle.m”文件夹在同一个文件夹中。
@KeshIkuma:非常感谢你的工具箱。然而,我试图运行epssetlinestyle函数,但我收到了这个消息:
???用于输入参数的未定义功能或方法'getData'
“字符”。
错误在==> epssetlinestyle在94
[epsdata,wmfdata,tifdata] = getData(Infile);
作为输入,我正在使用像epssetlinestyle('myfile.eps','param1',....)的东西
我哪里错了?
再次感谢你
@joseph - getgs()函数在分发中的私有文件夹中。确保您已在下载的zip文件中提取所有文件,保留目录结构。
当我运行此功能时,我收到以下错误:
未定义的功能或变量'getgs'。
eps2raster出错(第101行)
gsexe = getgs();
我从哪里得到'getgs'函数?
@keshikuma,你不知道我有多爱你。我急于完成我的论文,而Matlab EPS / PDF出口给我这么多问题。你只是救了我的生活!太感谢了。
顺便说一句,如果其他人有同样的问题,我已经拥有了同样的问题,将此FEX下载并附上:“尺寸”,“屏幕”到您的ePSWRITE。
再次感谢大家!
@sourabh - 我想我知道你在这里做错了什么。不要在Matlab图中更改字体,请将其默认Helvetica留在默认。然后,以下是步骤:
1)确保“CMU SAN SERIF”是PostScript Type-1字体(.pfa或.pfb文件)。请注意文件的位置。
2)运行epsfontlist,看看是否列出了“CMU SAN SERIF”。如果没有,请运行epsfontpath并将字体文件的位置添加到EPS Utilities路径
3)使用emswrite生成EPS文件
4)使用epsembedfont与“+ helvetica => cmusansserif”(或epsfontlist中列出的任何内容)选项
如果这个程序不行,请直接给我发一个MATLAB示例图及其EPS输出,我们可以整理一下。
我正在尝试在EPS数字中嵌入CMU SANS Serif字体,试图使用EPSWRITE:
epswrite(fhandle,fname,'emedfonts','全部');
但是我仍然看到默认的Courier类型。
查看eps文件,我发现以下字体嵌入:
Courier-Sh-SS和HeoveCheteAlfash-ss
我已经在epsutil \ fonts中放置了所需的pfb文件并重新运行epssetup.m
输出:
步骤2:构建MEX函数…
Decrypt.mexw64成功编译并添加到... \ matlab \ epsutil \私有。
Encrypt.mexw64成功编译并添加到... \ matlab \ epsutil \私有。
...完毕。
第3步:链接到Ghostscript ...
ghostscript可执行文件:“c:\ program文件(x86)\ gs \ gs8.63 \ bin \ gswin32c.exe”
...完毕。
遵循的字体列表,但我想要的字体(CMU SAN SERIF)不在此列表中,也不是嵌入在EPSCRITE编写的EPS文件中的HeogeCatea。
我正在赢得7 64位的Matlab 2013a
我的目标是将数字集成到乳胶稿件中,我想要一致的字体。请帮忙
Sourabh
@Asmus - 你可以更具体地对这个问题吗?您是否收到错误消息或错误的EPS输出?
据我所知(用多屏Win7测试这个特殊情况),图的负面位置不会影响由EPSCRITE产生的EPS打印。
嗨,非常感谢您这个非常包含和彻底的工具箱。
我可能已经错过了一些东西,但似乎紧密边界盒选项有一些问题,在多个屏幕上使用matlab时出现的负面纸张大小。
当新的文件位置被设置在settightpos。没有什么可以解释这种可能性。对吧?还是?
@conrad - 谢谢您报告错误。但是,我很难评估没有EPS输出文件的问题的确切性质。如果您还有兴趣,请给我发电子邮件给我。
此外,如果你下载了最新的版本(我今天刚刚重新上传),你可以将“Postprocessing”选项设置为“off”,这样应该可以消除错误,并生成EPS文件。
嗨Kesh
非常感谢您开发此工具。
我有一个问题,因为我在使用此工具时遇到错误。
我正在使用Mac,所以也许这可能是问题。
如果我不正确地使用该工具,请您告诉我,或者如果有某种方式解决以下问题,请告诉我?
我很欣赏你的时间,提前谢谢!
我的错误如下:
使用Cell / SetDiff> CellsetDiffr2012A(第292行)错误
输入A类的类双和输入B必须是单元格
字符串,除非是一个字符串。
cell/setdiff错误(第84行)
[varargout {1:nlhs}] = cellsetdiffr2012a(varargin {:});
EPSFIXFONTS(第133行)错误
NeededFonts = setdiff (AllFonts EmbeddedFonts);
EPSWRITE中的错误(第190行)
epsfixfonts(输出文件,embedsymbol);
MyProgramv1_060中的错误(第43行)
emswrite(h,'fig.eps')
嗨Kesh,
我刚给你发了一封邮件,里面有解释和文件。非常非常感谢您的时间!!
@Matteo - 你还有getallstr()仍然收到错误吗?如果是这样,你能把你的数字发给我,它会产生错误吗?
至于字体“没有很好地复制”:你是在说奇怪的间距吗?如果是这样的话,不幸的是,目前就是这样。
实际上仍然存在错误。;-)
新的eps文件被生成,但字体没有很好地复制。非常感谢您的宝贵时间!
我想出来,非常抱歉;-)
Matteo.
你好,
这个程序看起来很有用,非常感谢!当运行它时,我得到了这个错误:
索引超过矩阵维度。
GetAllstr(第31行)错误
m = [
epsembedfont错误(第170行)
字符串= struct2cell (getallstr (imgdata));
epsfixfonts错误(第158行)
epsembedfont(输出文件,EmbedFontOptions{:},{}):象征;
我是错误的吗?
非常感谢!
Matteo.
我想分享插图问题的解决方案。我似乎字体被正确嵌入,但是插图者希望使用的字体安装在系统上,以避免具有字体的版权问题。
@bart - 因为我不使用/有插画家,我无法确认你的问题。我看到它的潜在原因。你能试试这个吗?
1.在文本编辑器中打开test6.eps(您只需使用MATLAB编辑器“编辑Test6.eps”)
2.在第5行左右,你应该看到一行以“%% documentneedfonts:”开头
3.将“%%DocumentNeededFonts:”替换为“%%DocumentFonts:”
4.在Illustrator中保存并打开EPS文件
让我知道这是否有任何区别。谢谢
Illustrator CS6抱怨缺少CMB10字体
epsembedfont (' test6.eps ', ' +快递= > CMB10 ', ' + Helvetica = > CMB10”,“——全”);
EPSGETFONTS指出CMB10嵌入
我现在正在工作是x86环境。
我的最终目标是嵌入Verdana字体,但我没有成功。
亲切的问候,
巴特
@bart,是的,matlab(r2013a)无法在64位环境中构建MEX文件。如果您有MS Visual Studio / C ++,则可以使用我的其他提交(//www.tatmou.com/matlabcentral/fileexchange/38720)自己建造它们。
在Windows x64中,我无法编译encrypt.cpp和decrypt.cpp。
这很棒!
但如何支持中国字体?金宝app
@CHRIS - 感谢您的反馈。我很惊讶地听到MWA_CMR10-SS无法在Illustrator中找到。“-SS”表示MWA_CMR10字体的必要子集已嵌入在EPS文件中。
此外,您是否尝试使用epsembedfont函数与字体替换功能?例如,EPSEMBEDFONT(EPSFILE,'+ MWA_CMR10 => CMR10',' - 子集')。您必须首先使用epsfontpath将路径包含到CMR10字体。
嗨Kesh,
优秀的代码。我曾在插画家中获得EPS字体的一个问题。本质上,我缺少了MWA_CMR10-SS和类似字体的错误。我的系统安装了CMR10字体,但不是MWA_CMR10字体。我能够通过从epsfixfonts.mm函数中从字体名称剥离MWA_字符来解决问题。乳胶符号在Illustrator中正确看起来并立即预览。我不确定这是我的系统的具体问题,还是更普遍,但我以为我会告诉你。再次感谢!
@Brian,哈,我觉得你的名字听起来很熟悉:)
@Jens,听起来您正在使用Matlab图中的“不支持的”乳胶字体。金宝app虽然有几种不同的方式来,但最简单的是以下情况:
1.确定缺少的字体名称及其PFB Type-1字体文件(可能已经在您的系统中或从CTAN服务器下载)
2.将PFB字体文件放在“epsutil / fonts”子目录中。
3.使用"EmbedFonts"="All"选项再次运行epswrite。
或者,您可以使用epsfontpath添加文件夹与PFB文件到EPS工具工具箱的字体搜索路径。
如果您可以通过电子邮件发送给我,我会非常乐意检查(和玩)您的EPS文件(请参阅我的FEX配置文件)。
这实际上是@Jens文件(我是来自PXPHelp的Brian g)
我只是想用Illustrator打开他的文件。
这里是字体问题错误信息。
SFRM1000:系统上找不到字体;缺少的字体已被替换。
SFRM1200:在系统中没有找到字体;缺少的字体已被替换。
它可能与未安装CM-Super Font Set的Windows计算机有关。我不确定。
我可以提供其他信息吗?
@Brian,你能具体说说你的EPS数据是如何生成的吗?是否使用{'EmbedFonts','all'}选项?如果Illustrator继续抱怨,你能告诉我它说缺少了哪些字体吗?谢谢。
@kesh和@jens.
我不知道这将有助于,但是当我在Illustrator CS4中打开其中一个数字时,我就可以获得以下字体错误。
SFRM1000:系统上找不到字体;缺少的字体被替换了
SFRM1200:在系统中没有找到字体;缺少的字体被替换了
在这种情况下,字体替换很接近,但并不完美。
@Jens,谢谢你指出bug。无论出于什么原因(兼容性?),Mathworks根据级别1 (deps)或级别2 (deps2)使用不同的命令填充图形背景。我已经修复了bug,最新的代码将在周一更新。-Kesh
亲爱的Kesh Ikuma
该工具在linux下编译,但我得到以下错误
epsfixbackground.m
???索引超过矩阵维度。
错误==> epsfixbackground 71
figdim = str2num (tok {1});% #好吧
临时的错误修复,为一级后记
(钱数,I1,托托)= regexp (imgdata,“sg \ \ s + 1 \ s + s + 0 \ s + 0 \ s + (\ d + \ s + \ d +) \ s +公关\ s +”,“开始”,“结束”,“令牌”,“一旦”);
/ Jens蒙克汉森