2010-04-02 49 views
0

这个可能有点混乱。我正在使用AMCharts和rails。 Amcharts附带一个PHP脚本来导出名为“export.php”的图像Rails + AMcharts(带出口图片php脚本) - PHP脚本转换为控制器?

我想弄清楚如何将代码放在export.php中并将其放入控制器中。

下面是代码:

<?php 
// amcharts.com export to image utility 
// set image type (gif/png/jpeg) 
$imgtype = 'jpeg'; 

// set image quality (from 0 to 100, not applicable to gif) 
$imgquality = 100; 

// get data from $_POST or $_GET ? 
$data = &$_POST; 

// get image dimensions 
$width = (int) $data['width']; 
$height = (int) $data['height']; 

// create image object 
$img = imagecreatetruecolor($width, $height); 

// populate image with pixels 
for ($y = 0; $y < $height; $y++) { 
    // innitialize 
    $x = 0; 

    // get row data 
    $row = explode(',', $data['r'.$y]); 

    // place row pixels 
    $cnt = sizeof($row); 
    for ($r = 0; $r < $cnt; $r++) { 
    // get pixel(s) data 
    $pixel = explode(':', $row[$r]); 

    // get color 
    $pixel[0] = str_pad($pixel[0], 6, '0', STR_PAD_LEFT); 
    $cr = hexdec(substr($pixel[0], 0, 2)); 
    $cg = hexdec(substr($pixel[0], 2, 2)); 
    $cb = hexdec(substr($pixel[0], 4, 2)); 

    // allocate color 
    $color = imagecolorallocate($img, $cr, $cg, $cb); 

    // place repeating pixels 
    $repeat = isset($pixel[1]) ? (int) $pixel[1] : 1; 
    for ($c = 0; $c < $repeat; $c++) { 
     // place pixel 
     imagesetpixel($img, $x, $y, $color); 

     // iterate column 
     $x++; 
    } 
    } 
} 

// set proper content type 
header('Content-type: image/'.$imgtype); 
header('Content-Disposition: attachment; filename="chart.'.$imgtype.'"'); 

// stream image 
$function = 'image'.$imgtype; 
if ($imgtype == 'gif') { 
    $function($img); 
} 
else { 
    $function($img, null, $imgquality); 
} 

// destroy 
imagedestroy($img); 
?> 

有一些版本在一个线程中存在,我发现在这里:http://www.amcharts.com/forum/viewtopic.php?id=341

但是我有一种感觉,PHP代码,因为再上面已经改变了 - 因为无论是实施为我工作。

回答

0

所以显然我遇到了其他错误,这让我认为已经存在的代码不起作用。但是,我在原始问题中链接到的线程上的代码实际上工作正常!

0

这段代码或多或少的剂量是抓取发送到脚本(POST)的信息。 这些信息包括图片的高度和宽度以及每个像素的RGB值。该脚本绘制每个像素并将图像最后发送给客户端。您可以使用Rmagick's method to draw a pixel。这会给你同样的结果。

该进来的post数据是这样的:

height = number -> cast to int 
width = number -> cast to int 
// first row with a repeating part of R:G:B,R:G:B,... (n = width) 
r0 = 255:0:0,150:120:0,77:88:99,... 
r1 = ... 
. 
. 
r100 = ... -> the row count is the height - 1 

其实,我发现了一个discussion有关像素绘图加速像素。

+0

嘿DrDol,感谢您的评论!尽管如此,这仍然有点复杂。 – Elliot 2010-04-03 11:52:49