Rails + AmCharts (con script PHP de imagen de exportación) - Script PHP convertido al controlador?

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

  •  24-09-2019
  •  | 
  •  

Pregunta

Este podría ser un poco confuso. Estoy usando Amcharts con Rails. AmCharts viene con un script PHP para exportar imágenes llamadas "Export.php"

Estoy tratando de descubrir cómo tomar el código en export.php y ponerlo en un controlador.

Aquí está el código:

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

Hay algunas versiones que existen en un hilo que encontré aquí: http://www.amcharts.com/forum/viewtopic.php?id=341

Pero tengo la sensación de que el código PHP anterior ha cambiado desde entonces, porque ninguna de la implementación funcionó para mí.

¿Fue útil?

Solución 2

Aparentemente, me estaba encontrando con otros errores que me hicieron pensar que el código ya existente no funcionaba. Sin embargo, el código en el hilo al que vinculé en la pregunta original funciona de hecho.

Otros consejos

Lo que este código es más o menos dosis es atrapar la información, que se enviaron al script (publicación). Las informaciones incluyen la altura y el ancho de la imagen y los valores RGB de cada píxel. El script dibuja cada píxel y envía las imágenes al final al cliente.

Puedes usar Método de Rmagick para dibujar un píxel. Esto le dará el mismo resultado.

Los datos de la publicación que entran se ve así:

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 realidad, encontré un discusión Acerca de acelerar el dibujo de píxeles por píxeles.

Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top