Moj*_*aba 3 printing graphics matlab figure parfor
我正在使用parfor循环生成并保存大量数字。由于图中将显示大量数据,因此图的分辨率必须较高,约为920 dpi。使用normal for,该功能可以正常工作。但是,当我们切换到parfor所生成和保存的图片的分辨率时,其分辨率将变得很低。
这是图形句柄创建部分:
mainFig=figure('visible','off');
set(mainFig, 'Renderer', 'OpenGL');
Run Code Online (Sandbox Code Playgroud)
这是保存部件代码:
print(mainFig,'-djpeg','-r920',strcat(MyDir,measure,sec_suffix,'.jpeg'))
Run Code Online (Sandbox Code Playgroud)
任何的想法?
谢谢
在不显示的情况下进行打印和导出
在可以以MATLAB
nodisplay模式(matlab -nodisplay)启动的UNIX平台(包括Macintosh)上,可以使用可与显示器一起使用的大多数驱动程序进行打印,并导出为大多数相同的文件格式。PostScript和Ghostscript设备nodisplay在UNIX平台上均以模式运行。图形设备-djpeg,-dpng,-dtiff(压缩的TIFF位图),和-tiff(EPS与TIFF预览)工作为好,但在nodisplay他们使用的Ghostscript生成的,而不是使用内置到MATLAB中的驱动器的输出。然而,Ghostscript的忽略-r选项时生成-djpeg,-dpng,-dtiff,和-tiff图像文件。这意味着您无法在运行中更改图像文件的分辨率nodisplay模式。对于
-noFigureWindows启动选项,它在所有平台上均不显示数字,也是如此。在Windows平台上-dwin,,-dwinc和-dsetup选项通常在下运行-noFigureWindows。但是,printpreviewGUI在此模式下不起作用。自然,仅Windows-dwin和-dwinc输出格式不能在带有或不带有显示器的UNIX或Mac平台上使用。
分辨率注意事项
使用
-rnumber指定生成的输出分辨率。通常,使用较高的值将产生较高质量的输出,但以较大的输出文件为代价。它会影响所有MATLAB内置栅格格式的分辨率和输出大小(这些格式在“图形格式文件”表的第四栏中标识)。注意:内置图形格式直接从MATLAB生成,而无需通过Ghostscript库进行转换。同样,在无头(
nodisplay)模式下,内置驱动程序不会写入某些图像格式,就像使用显示器时那样。这些格式-djpeg,-dtiff以及-dpng。此外,-dhdf和-dbmp格式不能在无头模式(但您可以替换所产生-dbmp16m的-dbmp)。有关不使用显示器时进行打印的详细信息,请参见“在没有显示器的情况下进行打印和导出”。与内置的MATLAB格式不同,通过Ghostscript生成的图形输出不会直接服从
-r选项设置。但是,由MATLAB生成的中间PostScript文件作为Ghostscript处理器的输入受-r设置影响,因此可以间接影响最终Ghostscript生成的输出的质量。
-r当使用OpenGL或ZBuffer渲染器并写入一种MATLAB内置栅格格式,或者生成包含嵌入式栅格图像的矢量输出时(例如PostScript),该选项对输出质量的影响在普通放大倍数下可能微妙。或PDF)。当以更高的放大倍率查看或打印输出时,指定更高的分辨率的效果更加明显,因为更大的-r设置可提供更多的数据以缩放图像。生成完全矢量化的输出时(例如使用Painters渲染器输出矢量格式(例如PostScript或PDF)时),分辨率设置会影响输出的详细程度。设置较高的分辨率会产生更清晰的输出(但是分辨率的微小变化可能没有明显的效果)。例如,不使用实线(
'-')线型的线的间隙宽度可能会受到影响。
parfor会生成无头的MATLAB实例(Windows和Unix),因此根据上述说明,工作进程将回退到忽略该-r选项的Ghostscript打印驱动程序。
将图形导出为光栅图形格式(PNG,JPEG,TIFF等)时,有两种情况:
如果您在常规会话中打印,MATLAB将使用其内置驱动程序直接生成图形文件,并且应遵循您指定的分辨率
另一方面,如果以无头模式打印,则MATLAB将在内部以Postscript矢量格式导出图形,然后使用Ghostscript使用以下Ghostscript选项将其转换为所需的栅格格式:
-dNOPAUSE -q
-I"C:\Program Files\MATLAB\R2014a\sys\extern\win64\ghostscript\ps_files"
-I"C:\Program Files\MATLAB\R2014a\sys\extern\win64\ghostscript\fonts"
-sDEVICE=jpeg
-g576x432
-sOutputFile="file.jpeg"
Run Code Online (Sandbox Code Playgroud)
如您所见,由于某些原因,在将PS文件转换为其他格式时,MATLAB在无头模式下使用了固定目标尺寸576x432。
这是一些用于快速实验的代码。我已经在本地并行池上对其进行了测试;所有栅格格式(PNG,JPEG,TIFF,PPM)的固定尺寸均为576x432(-r如前所述,该选项被忽略)。也通过将PS文件转换为PDF(使用-sDEVICE=pdfwriteGhostscript输出设备)来生成PDF 。
fmt = {'ppm', 'tiff', 'png', 'jpeg', 'epsc2', 'pdf'};
outfolder = 'C:\Users\Amro\Desktop\print_test';
parpool(4)
parfor i=1:4
fig = figure(i);
% a random plot
ax = axes('Parent',fig);
plot(ax, cumsum(rand(1000,1)-0.5))
% save in each specified format (-r option is mostly ignored)
for f=1:numel(fmt)
print(fig, ['-d' fmt{f}], '-r920', ...
fullfile(outfolder,sprintf('plot%d.%s',i,fmt{f})));
drawnow
end
% also save FIG-file
hgsave(fig, sprintf('plot%d.fig',i))
close(fig);
end
delete(gcp)
Run Code Online (Sandbox Code Playgroud)
以我的看法,您应该将其导出为EPS文件,然后将其手动转换为所需的任何格式。这样,您就可以在调用的Ghostscript命令中指定目标图像大小(我不会理会print -r分辨率选项,因为它对矢量格式影响很小)
替代方法是在内部导出FIG文件parfor。然后,您可以在带有显示的普通MATLAB会话中加载它们,并以所需的分辨率和格式依次打印:
for i=1:4
fig = hgload('plotXX.fig');
movegui(fig, 'center')
print(fig, '-djpeg', '-r920', 'outXX.jpeg')
close(fig)
end
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
3472 次 |
| 最近记录: |