Rails + AmCharts (avec l'image d'exportation Script PHP) - Script PHP converti en contrôleur?

StackOverflow https://stackoverflow.com/questions/2569346

  •  24-09-2019
  •  | 
  •  

Question

Celui-ci pourrait être un peu déroutant. J'utilise des amcharts avec des rails. AmCharts est livré avec un script PHP pour exporter des images appelé "export.php"

J'essaie de comprendre comment prendre le code dans export.php et le mettre dans un contrôleur.

Voici le code:

   <?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);
?>

Il existe des versions dans un fil que j'ai trouvé ici: http://www.amcharts.com/forum/viewtopic.php?id=341

Mais j'ai le sentiment que le code PHP ci-dessus a changé depuis lors - car aucune implémentation n'a fonctionné pour moi.

Était-ce utile?

La solution 2

Donc, apparemment, je rencontrais d'autres erreurs qui m'ont fait penser que le code déjà existant n'a pas fonctionné. Cependant, le code sur le fil auquel j'ai lié dans la question d'origine fonctionne en fait!

Autres conseils

Ce que ce code est plus ou moins de dose saisit les informations, qui ont été envoyées au script (post). Les informations incluent la hauteur et la largeur de l'image et les valeurs RVB de chaque pixel. Le script dessine chaque pixel et envoie les images à la fin au client.

Vous pouvez utiliser Méthode de Rmagick pour dessiner un pixel. Cela vous donnera le même résultat.

Les données de poste incorporées ressemblent à ceci:

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

En fait, j'ai trouvé un discussion À propos de l'accélération du pixel par le dessin de pixels.

Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top