matlab新手入门,发现想要保存一张确定尺寸的高分辨率图片存在以下的问题:
matlab版本:r2020a
目的:获得一张尺寸为8cmX5cm的位图
首先开始绘图通用设置:
fig=figure('Units','centimeters', 'Position',[15 8 8 5]);
打印图片:
print(gcf, 'fig,'text.jpg', '-r300','-djpeg'');
查看图片:发现图片大小为56k,分辨率为:945X591, 水平、垂直分辨率为96dpi,此图片放到word中实际尺寸为:15.64cmX25cm
实际尺寸与绘图尺寸完全不同
查找问题发现:
1. matlab绘图存在画图与打印的区别。画图尺寸的设置是图窗fig的大小,打印print的大小则是实际尺寸的大小;
2.分辨率与图像大小是不一致的。在本人以往的认知中,分辨率的大小可以等同于采样率,比如当有1cmX1cm的图像时,此时图像实际尺寸是固定的,而1280的分辨率和1920的分辨率只表示图像长度方向被采样1280次还是1920次,但这个认知在matlab绘图的print中似乎是不合适的。
具体细节可以阅读:
通过阅读以上链接中的内容,我意识到了:在matlab中,像素大小是恒定的,系统的dpi会对图像大小产生很大影响。比如:
在win系统中,1 pixel = 1/96 inch,这就是所谓的96dpi。
当画图时,若设置8cm,则8cm=8/2.54inch=(8/2.54)*96pixels=303pixels;
5cm=5/2.54inch=(5/2.54)*96pixels=189pixelx;
因此绘图时尺寸为:303X189pixels=3.15X1.97inch
当8cmX5cm的图片要print为jpg格式,且分辨率设置为‘-r300’,则垂直、水平分辨率为1inch=300pixels,此时会存在分辨率转换,即机器的分辨率为96dpi,但我希望是300dpi,此时matlab会先绘制成300dpi,再转为电脑默认的96dpi,
因此图片实际大小为:(3.15*300)X(1.97*300)=945X591pixels,
print保存到机器中后就变为:(945/96)X(591/96)=9.84X6.16inch=25X15.64cm,这也是word中显示的尺寸。
————————————
但是,如果打印为无压缩的tif或者打印为png格式,不会出现图片变大的问题
1. print(fig,'test.png', '-r300','-dpng');
图片大小:945X591pixels,放到word中,图片大小为:8cmX5cm
2.print(fig,'test.tif', '-r300','-dtiffn');
图片大小:945X591pixels,水平分辨率、垂直分辨率为:300dpi,放到word中,图片大小为:8cmX5cm