Raylar + AMcharts (ihracat görüntü php script) - PHP komut dosyası kontrolör dönüştürülür?

2 Cevap php

Bu biraz kafa karıştırıcı olabilir. Ben raylar ile AMCharts kullanıyorum. Amcharts "export.php" denilen görüntüleri dışa aktarmak için bir PHP komut dosyası ile birlikte geliyor

Ben export.php kodu almak ve bir kontrolör içine koymak nasıl anlamaya çalışıyorum.

İşte kod:

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

Varlığı bazı sürümleri, burada bulunan bir iplik vardır: http://www.amcharts.com/forum/viewtopic.php?id=341

Ama yukarıda PHP kodu duygu o zamandan beri değişti var - ne uygulama benim için çalıştı çünkü.

2 Cevap

Yani görünüşe göre ben bana zaten mevcut kod işe yaramadı düşünüyorum yapılan diğer hatalar içine koşuyordu. Ancak, özgün söz bağlantılı parçacığı üzerinde kod aslında çalışır!

What this code more or less dose is grabs the informations, that were sent to the script (POST). The informations include the height and width of the picture and the RGB values of every pixel. The script draws every pixel and sends the images at the end to the client.

Sen kullanabilirsiniz Rmagick's method to draw a pixel. Bu size aynı sonucu verecektir.

Incomming sonrası verileri bu gibi görünüyor:

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

Aslında, ben bir discussion piksel çizim tarafından piksel hızlandırmak hakkında bulundu.