在http://jpgraph.net/download/下载

Version: 3.5.0b1 (2010-10-07)

File Size Checksum (md5)
jpgraph-3.5.0b1.tar.gz 12.7MB 7237ef5dc19ad8bb67197a19782e950c

之后上传至/home/shaobing/文件夹下,该目录是我自己在服务器上的个人目录,

执行命令:

#tar -zxvf jpgraph-3.5.0b1.tar.gz

会生成一个文件夹jpgraph-3.5.0b1,将其中的src拷贝至你的网站目录下,我这里是/var/www/html/

命令为:#cp -R /home/shaobing/jpgraph-3.5.0b1/ /var/www/html/

PHP开发服务器上配置jpgraph类库的说明

  配置php.ini配置文件

  配置PHP的内存

  在绝大多数默认配置的PHP环境中,都没有足够的内存供jpgraph程序使用,由于其需要很多内存,所以在配置时最少需要32M内存。打开php.ini配置文件并定位到

1
memory_limit = xx

xx是具体的数字,将其修改为32MB,即

1
memory_limit = 32M

  jpgraph类库使用内存特别说明:当你需要创建非常大的图片时,这些内存可能是不够的,比如,假设你需要创建一个1200*1024大小的图片。意味着,就光其自身就需要1200*1024*4字节,即4.7MB RAM,当php jpgraph类库在内部处理时大约需要三倍的内存,也就是说最少需要15MB RAM。如果再需要内存加载PHP和整个jpgraph类库并动态执行和解析,那意味着另外需要至少15MB RAM。如果图片非常复杂,需要创建更多的对象(一个典型的例子是大甘特图)那么就需要双倍的内存即64MB RAM。(其实个人觉得这段是告诉你使用jpgraph类库时如何根据需要处理的图片大小计算出大致的内存)。

  配置PHP最大执行时间

  默认配置的PHP最大执行时间非常短。通常都在10秒左右。对于一般的互动或纯文本处理是足够的。但是处理大型复杂的图片需要更多时间。正因为这个理由,PHP最大执行时间最少需要增加到20秒。(根据你的图片复杂度和相关数据的处理,需要增加到30-40秒)

  与之相对应需要修改php.ini配置文件中的max_execution_time选项,即将

1
max_execution_time = xx

修改为

1
max_execution_time = 30

  禁止缓存输出

  打开php.ini配置文件,找到output_buffering选项,并将选项修改为

1
; output_buffering = xx

也就是注释掉缓存输出。

  禁止缓存输出的原因是在PHP开发期间,我们需要能够看到jpgraph类库潜在的错误信息,而开启缓存会阻止错误信息及时出现。要理解这些需要知道一些HTTP协议的基本原则。特别是MIME编码数据是如何工作的。

  下面简单描述下HTTP协议:

  1、当你在游览器中输入一个URI地址时,游览器主要通过GET或POST命令从服务器上请求数据。

  2、服务器回复一个数据流(或者数据不可用时会返回一个错误信息)。数据流中的前缀MIME信息告知游览器如何解析数据。最常用的类型是text/html。即告知游览器以嵌入HTML编码的纯文本方式解析数据。

  当数据要求被解析为图片时,数据流的前缀MIME信息是image/png或image/jpeg。当游览器受到MIME信息时就会以指示的图片编码格式解析下面的图像数据。

  这里需要特别注意的是每台服务器只能回复一个MIME类型。这是进一步理解生成动态图形的关键。这就解释了为什么运行PHP程序的服务器发送的头部信息首先显示其数据需要被解释为图片而不是同时发送图片和文字。

  现在来解释下为何输出缓冲会使得调试jpgraph类库会更加困难。

  通常PHP程序的所有输出都是有顺序的,比如首先必须发送头部信息然后再发送数据。如果没有头部信息输出或输出了没有头部信息的文本,游览器会解析为text/html格式。缓存的一个目的是允许数据存放一段时间,当决定发送什么类型的头部信息时,发送完头部信息后再将数据输出。

接下来从你的windows里找到simhei.ttf,simsun.ttc这两个文件,上传到//usr/share/fonts/truetype/下,truetype为我自己新建的文件夹

JpGraph是一个PHP的图形类库,可以方便地生成各种柱状图,饼图,折线图等等,而且还可以方便地加文字。但是,中文的情况就稍微麻烦了一点。在JpGraph中默认是要把字符串转成utf8的,但是如果你的文件本身就是utf8的,并且要用中文字体,它还会转一遍,结果多转了一次,就会出现乱码。
除了编码问题,还有就是字体问题。为了试验中文显示,专门拷了一个simsun.ttc过来是,在代码里用FF_SIMSUN就可以正确显示中文,但是如果改用自己设置的FF_CHINESE,也就是uming.ttf,就又乱码了,而且和simsun.ttf乱码时的不一样。 后来发现FF_CHINESE和FF_BIG5是一样,是繁体字体,所以和用FF_SIMSUN的乱码还不一样。

解决以上问题的方法也就是传递正确的中文字符串给JpGraph,所以可以把字符串先转成gb2312的,这样JpGraph就可以正确转换了。当然,这个方法比较麻烦,每次都需要,还可以直接修改jpgraph_ttf.inc.php,我用的是2.2版本的,大概在99到106行之间的:

elseif( $aFF === FF_SIMSUN ) { 
        // Do Chinese conversion 
        if( $this->g2312 == null ) { 
           include_once 'jpgraph_gb2312.php' ; 
            $this->g2312 = new GB2312toUTF8(); 
       } 
      return $this->g2312->gb2utf8($aTxt); 
   }
注释掉已有代码,直接返回$aTxt:

elseif( $aFF === FF_SIMSUN ) { 
        // Do Chinese conversion 
       //if( $this->g2312 == null ) { 
        //    include_once 'jpgraph_gb2312.php' ; 
      //    $this->g2312 = new GB2312toUTF8(); 
        //} 
       //return $this->g2312->gb2utf8($aTxt); 
       return $aTxt; 
   }

测试文件代码:

<?php
include('jpgraph-3.5.0b1/jpgraph/jpgraph.php');
include('jpgraph-3.5.0b1/jpgraph/jpgraph_pie.php');
$data=array(-21,-3,12,19,22,28,32,29,23,18,5,-10);
$graph=new pieGraph(500,300);
$graph->img->SetMargin(30,30,80,40);
$graph->title->Set("平均温度");
$pieplot=new piePlot($data);  //定义饼图
$pieplot->SetLegends(array('Jan','Feb','Mar','Apr','May','Jun','Jul','Aug','Sep','Oct','Nov','Dec'));
$graph->legend->Pos(0.01,0.45,"left","center");
$graph->Add($pieplot);
//$graph->title->setfont(FF_SIMSUN);   //解决中文(标题)乱码问题
$graph->title->SetFont(FF_SIMSUN,FS_NORMAL,10);
$graph->Stroke();
?>
<?php  
    include ("jpgraph-3.5.0b1/jpgraph/jpgraph.php"); //必须要引用的文件  
    include ("jpgraph-3.5.0b1/jpgraph/jpgraph_line.php"); //包含曲线图文件  
      
    // y 轴数据,以数组形式赋值  
    $ydata = array(11,3,8,12,5,1,9,13,5,7);  
      
    // 创建 Graph 类,350 为宽度,250 长度,auto:表示生成的缓存文件名是该文件的文件名+扩展名(.jpg .png .gif ……)  
    $graph = new Graph(350,250,"auto");  
      
    // 设置刻度类型,x轴刻度可作为文本标注的直线刻度,y轴为直线刻度  
    $graph->SetScale("textlin");  
      
    // 创建坐标类,将y轴数据注入  
    $lineplot=new LinePlot($ydata);  
      
    // y 轴连线设定为蓝色  
    $lineplot->SetColor("blue");  
      
    // 坐标类注入图标类  
    $graph->Add($lineplot);  
      
    // 显示图  
    $graph->Stroke();
?>

<?php
include('jpgraph-3.5.0b1/jpgraph/jpgraph.php'); //引入运行库
include('jpgraph-3.5.0b1/jpgraph/jpgraph_line.php');//引入运行库
$graph=new Graph(400,300);   //设置画布
$graph->setScale('textint');  //设置刻度样式
$graph->img->setMargin(30,30,80,80);  //设置画布边界
$graph->title->set("Year to air temperature");  //设置标题
$data=array(-21,-3,12,19,22,28,32,29,23,18,5,-10);  //定义数组类型数据
$lineplot=new LinePlot($data);//定义曲线图
$lineplot->SetColor("blue");  //定义曲线图颜色为红色
$lineplot->SetLegend("Temperature");//设置曲线图例
$graph->Add($lineplot);//将曲线图加入背景图像中
$graph->Stroke();  //将x-y坐标图输出

?>
<?php
include('jpgraph-3.5.0b1/jpgraph/jpgraph.php');
include('jpgraph-3.5.0b1/jpgraph/jpgraph_line.php');  //引入运行库
$data=array(-21,-3,12,19,22,28,32,29,23,18,5,-10);  //第一条数据
$data2y=array(3,12,17,20,25,32,41,38,30,27,15,10);
$graph=new Graph(400,300);
$graph->SetScale("textint",-30,50); //设置xy轴样式及y轴的最大值及最小值
$graph->SetY2Scale("int",-30,50); //设置右侧y轴样式及其最大值与最小值
$graph->setShadow();  //设置图像样式,加入阴影
$graph->img->setMargin(40,50,20,70);
$graph->title->set("changchun and changsha air tempetrature");
$lineplot=new LinePlot($data);
$lineplot2y=new LinePlot($data2y);  //定义第二条曲线
$graph->Add($lineplot);
$graph->Addy2($lineplot2y);
$graph->xaxis->title->Set("Month");
$graph->yaxis->title->set("changchun");
$graph->y2axis->title->set("changsha");
$lineplot->SetColor("red");
$lineplot2y->setcolor('blue');
$lineplot->setlegend("changchun");
$lineplot2y->setlegend("changsha");
$graph->legend->setlayout(LEGEND_HOR);
//$graph->legned->Pos(0.45,0.95,"center","bottom");  //Fatal error: Call to a member function Pos() on a non-object in
$graph->Stroke();
?>
<?php
include('jpgraph-3.5.0b1/jpgraph/jpgraph.php');
include('jpgraph-3.5.0b1/jpgraph/jpgraph_bar.php');
$data=array(-21,-3,12,19,22,28,32,29,23,18,5,-10);
$graph=new Graph(400,300);
$graph->setScale("textint");
$graph->setMargin(30,30,80,80);
$graph->title->set('air temperature');
$barplot=new BarPlot($data);
$barplot->SetLegend("changchun");
$barplot->value->show();
$barplot->setfillcolor("blue");
$barplot->setcolor("orange");
$graph->Add($barplot);
$graph->Stroke();
?>
<?php
include('jpgraph-3.5.0b1/jpgraph/jpgraph.php');
include('jpgraph-3.5.0b1/jpgraph/jpgraph_pie.php');
include('jpgraph-3.5.0b1/jpgraph/jpgraph_pie3d.php');
$data=array(-21,-3,12,19,22,28,32,29,23,18,5,-10);
$graph=new pieGraph(500,300);
$graph->img->SetMargin(30,30,80,40);
$graph->title->Set("平均温度");
$pie3dplot=new piePlot3d($data);  //定义饼图
$pie3dplot->SetLegends(array('Jan','Feb','Mar','Apr','May','Jun','Jul','Aug','Sep','Oct','Nov','Dec'));
$graph->legend->Pos(0.01,0.45,"left","center");
$graph->Add($pie3dplot);
//$graph->title->setfont(FF_SIMSUN);   //解决中文(标题)乱码问题
$graph->Stroke();
?>

JpGrap引入以及中文乱码问题相关推荐

  1. 解决引入JS中文乱码问题

    前几天做项目时遇到一个问题: 1.引入外部js的时候页面显示乱码.但是所有的文件都是使用UTF-8编码的. 2.采用"嵌入式"使用js时,就没有乱码了. 解决方法: 只要在web. ...

  2. Struts项目中引入了过滤器filter后出现中文乱码情况

    问题描述:在Struts项目中需要引入自定义的过滤器,但是引入以后项目中出现了中文乱码现象 解决办法: 第一步:在web.xml中引入过滤器的配置,如下所示,注意自定义的过滤器filter标签一定要在 ...

  3. jsp include标签引入html文件中文乱码问题解决

    在jsp中使用<%@include file="in.html" %>导入html页面时,如果html页面里有中文,就会产生乱码.检查jsp文件和html文件的编码,编 ...

  4. jsp中引入外部js文件发生中文乱码

    jsp中引入外部js文件发生中文乱码 前言 排查 解决问题 前言 我在写作业时发现自己的作业出现中文乱码 排查 我先检查了一番 根据F12找到了span标签的id,在编译器中进行搜索找到找到了语句的所 ...

  5. jsp mysql中文乱码,jsp中文乱码 jsp mysql 乱码的解决方法

    jsp中文乱码 jsp mysql 乱码的解决方法 jsp中文乱码 jsp mysql 乱码要servlet里面支持中文的方法: 在dopost或者doget的第一句加上: request.setCh ...

  6. linux中js文件有乱码,解决node.js读取文件时中文乱码问题

    node.js不能很好地支持中文字符,在读取文件的时候,会出现对中文内容读取的乱码问题(linux系统下默认utf-8编码,一般不会出现该问题,但windows和部分虚拟机由于文件存储格式不同,可能会 ...

  7. Java Web项目中解决中文乱码方法总结

    一.了解常识: 1.UTF-8国际编码,GBK中文编码.GBK包含GB2312,即如果通过GB2312编码后可以通过GBK解码,反之可能不成立; 2.web tomcat:默认是ISO8859-1,不 ...

  8. mysql存json将utf8编码 去掉,MySQL对JSON类型UTF-8编码导致中文乱码探讨

    原文:https://www.cnblogs.com/CreateMyself/p/12587426.html 前言 继上文发表之后,结合评论意见并亲自验证最终发现是编码的问题,但是对于字符编码还是有 ...

  9. ajax后台返回数据中文乱码_ajax提交 返回中文乱码问题

    接口返回数据相关 使用@ResponseBody后返回NUll 说明:刚把后台运行起来,兴高采烈的测试接口数据,结果无论如何都是返回null, 最终通过各种百度,发现原来是没有引入关键的Jar包. 解 ...

最新文章

  1. 计算机辅助管理考试,计算机辅助考试研究
  2. 在云服务器上执行C程序和python程序(centos系统)
  3. SpringMvc中ModelAndView模型的应用
  4. 黑客窃取思科、IBM与甲骨文认证管理系统内的敏感数据
  5. 量子运算 简单通俗例子_什么是量子计算机? 用一个简单的例子解释。
  6. iOS - 判断用户是否允许推送通知(iOS7/iOS8)
  7. 数字三角形(洛谷-P1216)
  8. 阿里云mysql不让锁表_MySQL中InnoDB锁不住表的原因
  9. net core 2 读取appsettings.json
  10. WPF 微信 MVVM 【续】发送部分QQ表情
  11. visual studio 2010 破解版 破解方法
  12. 递归(recurse)与迭代(iteration)
  13. 2018年全国多校算法寒假训练营练习比赛(第三场)---I---题(皮克公式)
  14. 树莓派安装opencv3.4.3时缺少boostdesc等文件及一些常见的报错
  15. 蓝屏代码及其解决方案
  16. 详解 LVS、Nginx 及 HAProxy 工作原理
  17. 作为一枚程序员,每天必用的软件有哪些?
  18. 苹果现在正在销售独家Belkin充电器。 AirPower死了吗?
  19. 计算机cpu的工作电压,cpu工作电压一般多少是正常的?怎么查看和调整cpu电压?...
  20. JUDE-UML工具软件介绍

热门文章

  1. TiDB 在 58 集团的应用与实践
  2. JS/正则 验证 数字 电话号码 传真 邮箱 手机号码 邮编 日期
  3. python界面交互pyside2的学习(2):制作ui界面的准备工作
  4. zblog访问记录v2.5.0
  5. [HAOI2012]外星人——数论欧拉函数
  6. html重置怎么使用图片,路由器重置后怎么设置_路由器重置设置【图文教程】-太平洋IT百科...
  7. Python爬取某站上海租房图片!
  8. 旋转卡壳简介(POJ2187)(洛谷P1452)
  9. 山东大学程序设计思维与实践 四月模拟:TT与可怜的猫
  10. Python+Django+Mysql实现购物商城推荐系统 基于用户、项目的协同过滤推荐购物商城系统 网络购物推荐系统 代码实现 源代码下载