0 系统配置+软件版本

主机:Dell optiplex 390 MT (i5)

系统+软件:CentOS 6.5 x64, Matlab R2012, R2013

系统+软件:CentOS 6.7 x64, Matlab R2014
两种组合均存在print函数打印结果不正确的问题。

1 问题描述

正常来讲,print会将图像句柄所指向的图片按“所见即所得”的方式打印出来,包括线条粗细和字体大小等属性。

由于CentOS自带的显卡驱动无法很好地控制和使用板载的Nvidia显卡,无论*.fig文件中设置了怎样的字体大小,打印出来的JPEG图片都是特别特别小的字体,而*.fig中的设置完全不同。

从CentOS 6..4一路升级到CentOS 6.7的过程中,这个问题一直没有查找到真正原因,直到最近购买了新显卡,费劲装上了它的Nvidia驱动,重新使用这个print函数制图的时候,才发现真正解决了“所见即所得”的问题。

clf;
x=1:100; y=x;
plot(x,y,'b.'); hold on;; plot(x,sin(x),'g-.');
xlabel('test x');
ylabel('test y');
set(findall(gcf,'Type','text'),'FontSize',20,'FontName','Timew New Roman'); % 将文字设置为20号Times New Roman字体
set(gcf,'PaperPositionMode','auto');
print(gcf,'-djpeg','-r600','test1.jpg'); set(findall(gcf,'Type','text'),'FontSize',12,'FontName','Timew New Roman'); % 将文字设置为12号Times New Roman字体
set(gcf,'PaperPositionMode','auto');
print(gcf,'-djpeg','-r600','test2.jpg');

可以用上述代码测试,看成图的结果是否满足“所见即所得”的效果。如果满足,后文可直接略过。

2 解决办法

2.1 显卡驱动识别

CentOS系统默认是自带显卡驱动程序的,只是它的驱动效果并不好。如果你在matlab命令窗口输入'opengl info'命令,得到类似如下结果,可能就需要为独显单独安装相应的驱动程序了。

% centOS 6.5, Matlab R2013a, 系统自带的显卡驱动,Nvidia显卡的驱动未专门安装
>> opengl info
Version: '2.1 Mesa 10.4.3'
Vendor: 'Mesa Project'
Renderer: 'Software Rasterizer'
MaxTextureSize: 16384
Visual: 'Visual 0x104, (RGBA 32 bits (8 8 8 8), Z depth 24 bits, H...'
Software: 'false'
SupportsGraphicsSmoothing: 0
SupportsDepthPeelTransparency: 1
SupportsAlignVertexCenters: 0
Extensions: {150x1 cell}
MaxFrameBufferSize: 16384

系统自带的显卡驱动,由Matlab R2013a返回的opengl信息,没有看到Nvidia显卡的名字,不可以使用硬件渲染,只能使用软件(光栅化)渲染器。

2.2 单独安装适配的 Nvidia 显卡驱动之后

安装 Nvidia 显卡驱动,具体过程可以参见我的另一篇博客《在CentOS 6.7中安装Nvidia GT730的手记》。文中提到不同的安装方法,如果在设置过程中遇到重启后卡在绿屏的问题,可以尝试博客中的操作过程。至于为什么会绿屏,我也不知道。。。

安装好显卡驱动以后,Matlab R2014b 返回的 opengl 信息,显示已经加载了一块名为 'GeForce GT 730/PCIe/SSE2' 的显卡,可以使用硬件渲染和硬件加速功能。

% centOS 6.7, Matlab R2014b, 专门安装 Nvidia 显卡驱动
>> opengl info
Version: '4.5.0 NVIDIA 352.30'
Vendor: 'NVIDIA Corporation'
Renderer: 'GeForce GT 730/PCIe/SSE2'
MaxTextureSize: 16384
Visual: 'Visual 0x27, (RGBA 32 bits (8 8 8 8), Z depth 24 bits, Hardware acceleration, Double buffer, ...'
Software: 'false'
SupportsGraphicsSmoothing: 1
SupportsDepthPeelTransparency: 1
SupportsAlignVertexCenters: 1
Extensions: {316x1 cell}
MaxFrameBufferSize: 16384

3 测试

最后,再用第1小节中的绘图命令作简单的测试,随着字体大小的调整,生成的*.jpg文件中,字体也应当随着变化的,实现了真正的“所见即所得”。

至此,print命令的bug终于解决了!

4 参考资料

[1] http://www.cnblogs.com/snake553/p/4941163.html     《在CentOS 6.7中安装Nvidia GT730的手记

CentOS 6中MATLAB print函数“所见非所得”bug的解决方案的更多相关文章

  1. 《从零开始学Swift》学习笔记(Day 7)——Swift 2.0中的print函数几种重载形式

    原创文章,欢迎转载.转载请注明:关东升的博客 Swift 2.0中的print函数有4种重载形式: l   print(_:).输出变量或常量到控制台,并且换行. l   print(_:_:).输出 ...

  2. python 中的 print 函数与 list函数

    print()  函数: 传入单个参数时默认回车换行,关键词 end 可以用来避免输出后的回车(换行), 或者以一个不同的字符串结束输出. >>> a, b = 0, 1 >& ...

  3. python中,print函数的sep和end参数

    print函数是我们经常使用的,但是它的sep和end参数或许对很多python使用者相对陌生,他们可以让我们的打印更具有个性化. 先来看下官方解释, sep:分割值与值,默认是一个空格 end:附件 ...

  4. php中的print函数

    php print函数怎么用? 定义和用法 print() 函数输出一个或多个字符串. 注释:print() 函数实际不是一个函数,所以您不必对它使用括号. 提示:print() 函数比 echo() ...

  5. 【转载】 tf.Print() (------------ tensorflow中的print函数)

    原文地址: https://blog.csdn.net/weixin_36670529/article/details/100191674 ------------------------------ ...

  6. python中的print函数

    python3.x中将print由一个声明转变成了一个函数. 官方说法: Converts the print statement to the print() function. print(*ob ...

  7. 把一下程序中的print()函数改写成

    源代码: #include <iostream> using namespace std; void print( int w ) { ; i <= w ; i++ ) { ; j ...

  8. 为什么print在python3中变成了函数?

    转自:http://www.codingpy.com/article/why-print-became-a-function-in-python-3/ 在Python 2中,print是一个语句(st ...

  9. python中print()函数的“,”与java中System.out.print()函数中的“+”

    python中的print()函数和java中的System.out.print()函数都有着打印字符串的功能. python中: print("hello,world!") 输出 ...

随机推荐

  1. 死性不改ISO9000系列系统 2011q4~2016q1

    百度云链接: http://pan.baidu.com/s/1o8rO3W2 密码: kabg 2016q2由于发布没多久,可能会重新修改,暂时不转载.

  2. 后台调取前台js中的函数

    Page.ClientScript.RegisterStartupScript(this.GetType(), "setPicType", "setPicType(2); ...

  3. 前端利器---Bootstrap

    看着那么多大神在博客上都有自己的心得和分享,我虽然工作不久,但也想做一下自己的笔记起码对自己是一次积累和锻炼的过程.所以心血来潮今天就注册了博客. 我今天想说一下Bootstrap,学前台的大概对Bo ...

  4. 利用Javascript判断操作系统的类型实现不同操作系统下的兼容性

    原文地址 http://www.jb51.net/article/33640.htm 在通过Javascript实现客户端和服务端的交互时,有时候需要对操作系统进行判断,以便实现不同操作系统下的兼容性 ...

  5. c# 正则提取小例子

    常用分组语法 分类 代码/语法 说明 捕获 (exp) 匹配exp,并捕获文本到自动命名的组里 (?<name>exp) 匹配exp,并捕获文本到名称为name的组里,也可以写成(?'na ...

  6. 关于C#调用C++ 的DLL传送字符串显示乱码的解决

    最近在做一个程序,想把某些功能用C++写成DLL供C#调用,但是在写好DLL用C#传递字符串参数时,在DLL中显示传送过来的字符串是乱码,DLL里的代码根本无法用这些字符串进行其它的处理.为此,花了一 ...

  7. Macbook Pro配置PHP开发环境

    Macbook Pro配置PHP开发环境 安装环境如下: Mac OS 10.10.1 Apache 2.4.9 PHP 5.5.14 MySQL 5.6.22 Apache配置 在Mac OS 10 ...

  8. iOS - AppRealTest App 真机测试

    前言 1.准备 开发者账号 自从 Xcode7 出来之后,一般的真机测试不需要开发者账号,也就不需要看这篇教程,只有 app 具有 "推送" 等功能的时候,要真机测试就必须要开发者 ...

  9. react1

    1.方法用()  里面的每个参数之间用,分隔2.对象(函数.数组)用{} 3.{/*注释...*/} 4 组件的生命周期可分成三个状态:Mounting:已插入真实 DOMUpdating:正在被重新 ...

  10. Netscape HTTP Cooke File Parser In PHP

    http://www.hashbangcode.com/blog/netscape-http-cooke-file-parser-php I recently needed to create a f ...