016_Save_the_picture_in_Matlab中保存图片

2024-08-31 21:12

本文主要是介绍016_Save_the_picture_in_Matlab中保存图片,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

图片文件

Matlab核心功能包括出图,印刷质量的图片输出是Matlab核心竞争力之一,matplotlib疯狂追赶,但还是差距明显。出图的含义就是:打印或者导出图形窗体的内容,可供后续使用。在Matlab中,这个行为被定义为打印和保存。

相关的函数有三类:

  • 导出
    • exportgraphics 导出绘图和图形内容(从R2020a开始)
    • copygraphics 复制图形内容到剪贴板(从R2020a开始)
    • exportapp 导出App Designer应用程序的内容(从R2020b开始)
    • getframe 捕获坐标区或图形窗口的内容作为帧
    • saveas 保存图形为特定文件格式
    • hgexport 导出图形窗口
  • 打印
    • print 打印图形
    • orient 设置打印时的方向(横向和纵向)
  • 保存
    • openfig 打开.fig文件
    • savefig 保存图片

保存

包括其实是一个很好的起点,当我们幸幸苦苦绘制一幅图片,精心调节各种参数,最后得到一个满意的结果,当然希望能够在未来某个时间拿来重用。这个时候,openfigsavefig就很好解决问题。这个函数保存图形窗体完整信息,后续可以通过openfig打开,继续编辑。

% 绘图
figure;
peaks;% 保存图形窗体
savefig(h, 'peaks.fig');
% 或者当前图形窗体
savefig('peaks.fig');

在这里插入图片描述

savefig有一个额外的参数,就是'compact',这个参数可以减小文件大小,但是仅限于R2014b及以后的版本,能把文件刚过150kb减小到100kb出头。

打开保存的文件,用openfig函数,就可以继续编辑。函数提供是否新建窗体、是否显示窗体的选项。类似于对窗体通过set函数设置'Visible'属性来控制可见性,对于不可见的窗体,依然可以通过savefig保存。

% 打开图形窗体
h = openfig('peaks.fig', 'new', 'invisible');% 编辑
title('peaks');
xlabel('x');
ylabel('y');% 保存
savefig(h, 'peaks_new.fig');% 显示
set(h, 'Visible', 'on');

uicontrol保存

在使用上面这对函数时,界面上的uicontrol不会丢,其回调函数也会被保存,因为uicontrol的回调是普通的字符串!这就是为什么GUIDE和基于Figure的App那么渣的原因,因为它们的回调函数是字符串,不是函数句柄,不方便写,不方便用。

h = figure;
peaks;button = uicontrol('Style', 'pushbutton', 'String', 'Save', ...'Position', [20 20 50 20], 'Callback', 'disp(''Save'')');savefig(h, 'peaks.fig');h2 = openfig('peaks.fig', 'new', 'visible');

两个窗体的uicontrol都会被保存,button的回调函数也会被保存。

推荐做法

推荐对于每个自己辛苦画的图片,应该保存一个.fig文件,这样可以在未来继续编辑,而不是重新画一遍,有时候,Matlab的绘图脚本会被弄到面目全非,这时候,打开.fig文件就能救你狗命,别问我为什么知道。

current = string(datetime("now",'Format', "yyyyMMddHHmmss"));   % 保存当前时间
mkdir(current);                                                 % 创建文件夹
figs = findall(0, 'type', 'figure');                            % 获取所有图形窗体,这里的0就是根窗体,也可以用`groot`来引用
fn = @(x)  [x.Name, num2str(x.Number), '.fig'];                 % 生成文件名
arrayfun(@(x) savefig(x, fn(x)), figs);                         % 保存所有图形窗体
arrayfun(@(x), movefile(fn(x), current), figs);                 % 移动文件到备份文件夹

打印

打印是另一个保存的方式,不过是保存到纸上。print函数可以打印图形,也可以保存图形到文件。print函数的参数很多,可以设置很多打印选项,比如打印机、纸张大小、方向、分辨率等等。

% 打印
print -dpng peaks.png;
print -dpdf peaks.pdf;
print -depsc peaks.eps;
print -djpeg peaks.jpg;
print -dtiff peaks.tiff;

print函数的参数-d后面跟的是文件格式,可以是pngpdfepsjpegtiff等等,这些都是Matlab支持的文件格式。

print函数还可以设置很多参数,比如-r设置分辨率,-fillpage填充整个页面,-bestfit最佳适应页面,-loose松散,-tight紧凑,-append追加到文件末尾等等。

还可以打印到剪贴板,这样就可以直接粘贴到Word、PPT等软件中。

导出

exportgraphics函数可以导出图形,这个函数是从R2020a开始引入的,可以导出图形到很多格式,比如pngpdfepsjpegtiff等等。这个导出将不包括图形窗体中的UI 组件,只含括图形对象。

% 导出
exportgraphics(gcf, 'peaks.png');
exportgraphics(gcf, 'peaks.pdf');

还可以通过Resolution参数设置分辨率,BackgroundColor设置背景颜色(None为透明背景),ContentType设置内容类型等等。

当输出是pdf时,可以设置ContentTypevector,这样输出的pdf文件是矢量图,可以无限放大,不会失真。此外还可以通过Append参数设置是否追加到文件末尾,构成多页pdf文件。

% 导出
exportgraphics(gcf, 'peaks.pdf', 'ContentType', 'vector');% 追加
exportgraphics(gcf, 'peaks.pdf', 'ContentType', 'vector', 'Append', true);

这个函数所针对的图形对象,可以是

  • figure对象,uifigure对象
  • axes对象,Axes对象、PolarAxes对象、GeographicAxes对象
  • 独立的可视化对象,比如heatmap
  • 分块图布局,tiledlayout对象
  • 图中的容器对象:Panel, Tab, ButtonGroup

对于uicontroluixxx那些空间,exportgraphics函数都不支持。可以使用exportapp函数导出App Designer应用程序的内容。

function savapp
f = uifigure;
ax = uiaxes(f,'Position',[25 25 400 375]);
plot(ax,[0 0.3 0.1 0.6 0.4 1])
b = uibutton(f,'Position',[435 200 90 30],'Text','Save Plot');
b.ButtonPushedFcn = @buttoncallback;function buttoncallback(~,~)filter = {'*.jpg';'*.png';'*.tif';'*.pdf';'*.eps'};[filename,filepath] = uiputfile(filter);if ischar(filename)exportgraphics(f,[filepath filename]);endendb2 = uibutton(f,'Position',[435 250 90 30],'Text','Save APP Plot');
b2.ButtonPushedFcn = @buttoncallback2;function buttoncallback2(~,~)filter = {'*.jpg';'*.png';'*.tif';'*.pdf';'*.eps'};[filename,filepath] = uiputfile(filter);if ischar(filename)exportapp(f,[filepath filename]);endend
end

在这里插入图片描述
在这里插入图片描述

如果能够使用新版本的Matlab,推荐使用exportgraphics函数,这个函数导出的图片周围的空白会自动裁剪。

getframeimwrite

这两个函数过于高级,应该只有在需要导出到特殊格式,比如bmp,或者需要构成动画的才去使用。getframe函数可以捕获坐标区或图形窗口的内容作为帧,imwrite函数可以将帧保存为图像文件。

% 获取帧
f = figure;
peaks;
frame = getframe(f);% 保存
imwrite(frame.cdata, 'peaks.bmp');

总结比较

  • savefig保存图形窗体,可以继续编辑
  • print打印图形,也可以保存图形到文件
  • exportgraphics导出图形,不包括图形窗体中的UI组件
  • getframeimwrite可以保存帧为图像文件
  • exportapp导出App Designer应用程序的内容

这篇关于016_Save_the_picture_in_Matlab中保存图片的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/1125002

相关文章

Java实现文件图片的预览和下载功能

《Java实现文件图片的预览和下载功能》这篇文章主要为大家详细介绍了如何使用Java实现文件图片的预览和下载功能,文中的示例代码讲解详细,感兴趣的小伙伴可以跟随小编一起学习一下... Java实现文件(图片)的预览和下载 @ApiOperation("访问文件") @GetMapping("

基于Python开发批量提取Excel图片的小工具

《基于Python开发批量提取Excel图片的小工具》这篇文章主要为大家详细介绍了如何使用Python中的openpyxl库开发一个小工具,可以实现批量提取Excel图片,有需要的小伙伴可以参考一下... 目前有一个需求,就是批量读取当前目录下所有文件夹里的Excel文件,去获取出Excel文件中的图片,并

Java实现数据库图片上传与存储功能

《Java实现数据库图片上传与存储功能》在现代的Web开发中,上传图片并将其存储在数据库中是常见的需求之一,本文将介绍如何通过Java实现图片上传,存储到数据库的完整过程,希望对大家有所帮助... 目录1. 项目结构2. 数据库表设计3. 实现图片上传功能3.1 文件上传控制器3.2 图片上传服务4. 实现

Java实现数据库图片上传功能详解

《Java实现数据库图片上传功能详解》这篇文章主要为大家详细介绍了如何使用Java实现数据库图片上传功能,包含从数据库拿图片传递前端渲染,感兴趣的小伙伴可以跟随小编一起学习一下... 目录1、前言2、数据库搭建&nbsChina编程p; 3、后端实现将图片存储进数据库4、后端实现从数据库取出图片给前端5、前端拿到

Python使用PIL库将PNG图片转换为ICO图标的示例代码

《Python使用PIL库将PNG图片转换为ICO图标的示例代码》在软件开发和网站设计中,ICO图标是一种常用的图像格式,特别适用于应用程序图标、网页收藏夹图标等场景,本文将介绍如何使用Python的... 目录引言准备工作代码解析实践操作结果展示结语引言在软件开发和网站设计中,ICO图标是一种常用的图像

SpringBoot集成图片验证码框架easy-captcha的详细过程

《SpringBoot集成图片验证码框架easy-captcha的详细过程》本文介绍了如何将Easy-Captcha框架集成到SpringBoot项目中,实现图片验证码功能,Easy-Captcha是... 目录SpringBoot集成图片验证码框架easy-captcha一、引言二、依赖三、代码1. Ea

如何使用CSS3实现波浪式图片墙

《如何使用CSS3实现波浪式图片墙》:本文主要介绍了如何使用CSS3的transform属性和动画技巧实现波浪式图片墙,通过设置图片的垂直偏移量,并使用动画使其周期性地改变位置,可以创建出动态且具有波浪效果的图片墙,同时,还强调了响应式设计的重要性,以确保图片墙在不同设备上都能良好显示,详细内容请阅读本文,希望能对你有所帮助...

Python脚本实现图片文件批量命名

《Python脚本实现图片文件批量命名》这篇文章主要为大家详细介绍了一个用python第三方库pillow写的批量处理图片命名的脚本,文中的示例代码讲解详细,感兴趣的小伙伴可以了解下... 目录前言源码批量处理图片尺寸脚本源码GUI界面源码打包成.exe可执行文件前言本文介绍一个用python第三方库pi

Python爬虫selenium验证之中文识别点选+图片验证码案例(最新推荐)

《Python爬虫selenium验证之中文识别点选+图片验证码案例(最新推荐)》本文介绍了如何使用Python和Selenium结合ddddocr库实现图片验证码的识别和点击功能,感兴趣的朋友一起看... 目录1.获取图片2.目标识别3.背景坐标识别3.1 ddddocr3.2 打码平台4.坐标点击5.图

Python利用PIL进行图片压缩

《Python利用PIL进行图片压缩》有时在发送一些文件如PPT、Word时,由于文件中的图片太大,导致文件也太大,无法发送,所以本文为大家介绍了Python中图片压缩的方法,需要的可以参考下... 有时在发送一些文件如PPT、Word时,由于文件中的图片太大,导致文件也太大,无法发送,所有可以对文件中的图