Html 如何使用Perl将图形添加到网页?
我需要使用从MySQL数据库中提取的Perl数据创建一个图形 我已经看到了Html 如何使用Perl将图形添加到网页?,html,mysql,perl,graph,charts,Html,Mysql,Perl,Graph,Charts,我需要使用从MySQL数据库中提取的Perl数据创建一个图形 我已经看到了GD::Graph推荐和其他方法,但我不知道如何使用它们,也不能在网上找到太多 我已经为网页输入了一个GD::Graph脚本,但什么也没有出现。我假设我必须以某种方式合并HTML来显示图形,但我也不知道如何做到这一点 我只需要一个基本的线图,所以任何简单的例子都会有很大帮助 下面是我玩的一个无法工作的示例程序: use GD::Graph::bars; use GD::Graph::Data; my $data = GD
GD::Graph
推荐和其他方法,但我不知道如何使用它们,也不能在网上找到太多
我已经为网页输入了一个GD::Graph
脚本,但什么也没有出现。我假设我必须以某种方式合并HTML来显示图形,但我也不知道如何做到这一点
我只需要一个基本的线图,所以任何简单的例子都会有很大帮助
下面是我玩的一个无法工作的示例程序:
use GD::Graph::bars;
use GD::Graph::Data;
my $data = GD::Graph::Data->new([
["1st","2nd","3rd","4th","5th","6th","7th", "8th", "9th"],
[ 1, 2, 5, 6, 3, 1.5, 1, 3, 4],
]) or die GD::Graph::Data->error;
my $graph = GD::Graph::bars->new;
$graph->set(
x_label => 'X Label',
y_label => 'Y label',
title => 'A Simple Bar Chart',
#y_max_value => 7,
#y_tick_number => 8,
#y_label_skip => 3,
#x_labels_vertical => 1,
#bar_spacing => 10,
#shadow_depth => 4,
#shadowclr => 'dred',
#transparent => 0,
) or die $graph->error;
$graph->plot($data) or die $graph->error;
my $file = 'bars.png';
open(my $out, '>', $file) or die "Cannot open '$file' for write: $!";
binmode $out;
print $out $graph->gd->png;
close $out;
如果您对
GD::Graph
有足够的了解,可以生成一个图像文件(比如PNG文件),那么在web浏览器中显示它的常用习惯用法是
...
use GD::Graph;
my $graph = ...;
my $file = "bars-$$.png"; # a unique file name
# replace /var/www/htdocs here with the root document directory for your server
open my $out, '>', '/var/www/htdocs/bars/$file';
print $out $graph->gd->png;
close $out;
# now write the web page
print "Content-type: text/html\n\n";
print "<html><head><title>Bar Graph</title><head>\n";
print "<body>";
print ...
print "<h2>Here is a bar graph</h2>\n";
print "<img src='/bars/$file'>\n";
print ...
print "</body></html>\n";
。。。
使用GD::Graph;
我的$graph=。。。;
my$file=“bar-$.png”#唯一的文件名
#将此处的/var/www/htdocs替换为服务器的根文档目录
打开我的$out“>”,“/var/www/htdocs/bar/$file”;
打印$out$graph->gd->png;
收尾美元;
#现在编写网页
打印“内容类型:text/html\n\n”;
打印“条形图\n”;
打印“”;
打印
打印“这是一个条形图\n”;
打印“\n”;
打印
打印“\n”;
您的示例程序适合我。我得到一个名为bar.png
的文件,其中包含预期的图像。如果你需要帮助让程序运行,那么你需要给我们更多的信息,而不是“这里有一个我玩的示例程序,我无法运行”。你到底有什么意想不到的行为?文件写了吗?它包含正确的图像吗?你的电脑起火了吗
让这个程序工作后,将其转换为CGI程序并将图像写入标准输出是一个简单的过程。它看起来像这样:
#!/usr/bin/perl
use strict;
use warnings;
# Added: Use the CGI library
# (not essential, but makes your life easier)
use CGI 'header';
use GD::Graph::bars;
use GD::Graph::Data;
my $data = GD::Graph::Data->new([
["1st","2nd","3rd","4th","5th","6th","7th", "8th", "9th"],
[ 1, 2, 5, 6, 3, 1.5, 1, 3, 4],
]) or die GD::Graph::Data->error;
my $graph = GD::Graph::bars->new;
$graph->set(
x_label => 'X Label',
y_label => 'Y label',
title => 'A Simple Bar Chart',
#y_max_value => 7,
#y_tick_number => 8,
#y_label_skip => 3,
#x_labels_vertical => 1,
#bar_spacing => 10,
#shadow_depth => 4,
#shadowclr => 'dred',
#transparent => 0,
) or die $graph->error;
$graph->plot($data) or die $graph->error;
# Added: print the content-type header
print header('image/png');
# Removed: opening an image file
# Changed: Run binmode against STDOUT, not your image file
binmode STDOUT;
# Changed: Print image to STDOUT, not your image file
print $graph->gd->png;
# Removed: Don't close the filehandle, that you didn't open :-)
如果您将该代码放在web服务器上某个文件中,该文件被识别为CGI程序(这样做不在本答案的范围内,但在本网站上有很多关于它的好答案),那么您将能够在浏览器中输入该文件的URL以查看图像。一旦成功,您还可以使用
标记将图像嵌入HTML页面
如果您在这方面需要更多帮助,请提出更具体的问题。因此,这不是代码编写服务。请向我们展示您尝试过并需要帮助的代码。我不是要求别人为我编写代码,只是帮助我指出正确的方向。您展示的代码片段创建了一个图像,并将其打印到文件中。如果您想在HTML页面中包含该图像,则必须包含该图像。或者,您可以将此代码用作CGI脚本,而不是打开文件,只需打印到标准输出即可。首先发送正确的
图像/png
标题。在HTML中的
标记中使用脚本的URL。即使我保持原样,但仍然无法获得图像。我该如何整合你提到的新增内容?你首先需要了解“网络”是如何工作的:服务器、客户端、请求和响应;内容类型、HTML、图像在页面中的嵌入方式等。如果没有基础知识,您将迷失方向。您在这里学到的还不够。为什么这比用image/png
内容类型和图像数据进行响应更惯用?您需要binmode$out
或打开我的$out,'>:unix',…
确保鼓励在CGI程序中使用原始HTML从来都不是一个好主意。这非常有帮助,我得到了我想要的结果。Thanks@Nicolas: