Rails + Amcharts (mit Exportbild -PHP -Skript) - PHP -Skript, das in Controller konvertiert ist?

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

  •  24-09-2019
  •  | 
  •  

Frage

Dieser könnte ein wenig verwirrend sein. Ich benutze Amcharts mit Schienen. Amcharts wird mit einem PHP -Skript geliefert, um Bilder mit dem Namen "Export.php" zu exportieren

Ich versuche herauszufinden, wie man den Code in export.php aufnimmt und in einen Controller einbindet.

Hier ist der 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);
?>

Es gibt einige Versionen in einem Thread, den ich hier gefunden habe: http://www.amcharts.com/forum/viewtopic.php?id=341

Aber ich habe das Gefühl, dass sich der obige PHP -Code seitdem geändert hat - weil keine Implementierung für mich funktioniert hat.

War es hilfreich?

Lösung 2

Anscheinend habe ich andere Fehler gestoßen, was mich denkt, dass der bereits vorhandene Code nicht funktioniert hat. Der Code in dem Thread, mit dem ich in der ursprünglichen Frage verlinkt wurde, funktioniert jedoch tatsächlich!

Andere Tipps

Was dieser Code mehr oder weniger Dosis ist, greift die Informationen, die an das Skript gesendet wurden (Beitrag). Die Informationen umfassen die Höhe und Breite des Bildes und die RGB -Werte jedes Pixels. Das Skript zeichnet jedes Pixel und sendet die Bilder am Ende an den Client.

Sie können verwenden Rmagicks Methode, ein Pixel zu zeichnen. Dies gibt Ihnen das gleiche Ergebnis.

Die aufkommenden Postdaten sehen so aus:

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

Eigentlich habe ich a gefunden Diskussion Über schneller Pixel durch Pixelzeichnung.

Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top