Skip to content

Instantly share code, notes, and snippets.

@acegreen
Last active September 20, 2016 22:56
Show Gist options
  • Save acegreen/5af573d71b885a9b7cd7 to your computer and use it in GitHub Desktop.
Save acegreen/5af573d71b885a9b7cd7 to your computer and use it in GitHub Desktop.
combine images in PHP
<?php
foreach($_POST as $data) {
//$data = $_POST['data'];
$file = 'snapshot-'.md5(uniqid()) . '.png';
$result=(array)(json_decode($data,true));
$chart['plot']=$result["charts"][0]["panes"][0]["content"];
$chart['rightaxis']=$result["charts"][0]["panes"][0]["rightAxis"]["content"];
$chart['timeaxis']=$result["charts"][0]["timeAxis"]["content"];
$mainSeriesText=$result["charts"][0]["panes"][0]["mainSeriesText"];
foreach($chart as $name=>$val) {
$uri = substr($val,strpos($val,",")+1);
file_put_contents('images/'.$name.$file, base64_decode($uri));
}
}
//define the width and height of our images
//take create image resources out of the 3 pngs we want to merge into destination image
$a = imagecreatefrompng('images/plot'.$file);
$b = imagecreatefrompng('images/rightaxis'.$file);
$c = imagecreatefrompng('images/timeaxis'.$file);
list($width, $height, $type, $attr) = getimagesize('images/plot'.$file);
define("WIDTHP", $width);
define("HEIGHTP", $height);
list($width, $height, $type, $attr) = getimagesize('images/rightaxis'.$file);
define("WIDTHR", $width);
define("HEIGHTR", $height);
list($width, $height, $type, $attr) = getimagesize('images/timeaxis'.$file);
define("WIDTHT", $width);
define("HEIGHTT", $height);
// Create MainSeriesText Image based on plot size
$d = imagecreate(WIDTHP, 100);
$background_color = imagecolorallocatealpha($d, 255, 255, 255, 127);
$text_color = imagecolorallocate($d, 92, 92, 102);
$fontfile = 'images/fonts/HelveticaNeue.ttf';
imagettftext($d, 28, 0, 20, 40, $text_color, $fontfile, $mainSeriesText);
define("WIDTHMST", imagesx($d));
define("HEIGHTMST", imagesy($d));
$dest_image = imagecreatetruecolor(WIDTHP + WIDTHR, HEIGHTP + HEIGHTT);
//make sure the transparency information is saved
imagesavealpha($dest_image, true);
//create a white background (127 means fully transparent)
$white = imagecolorallocate($dest_image, 255, 255, 255);
//fill the image with a white background
imagefill($dest_image, 0, 0, $white);
//copy each png file on top of the destination (result) png
imagecopy($dest_image, $a, 0, 0, 0, 0, WIDTHP, HEIGHTP);
imagecopy($dest_image, $b, WIDTHP, 0, 0, 0, WIDTHR, HEIGHTR);
imagecopy($dest_image, $c, 0, HEIGHTP, 0, 0, WIDTHT, HEIGHTT);
imagecopy($dest_image, $d, 0, 0, 0, 0, WIDTHMST, HEIGHTMST);
//send the appropriate headers and output the image in the browser
imagepng($dest_image,'images/'.$file);
//destroy all the image resources to free up memory
imagedestroy($a);
imagedestroy($b);
imagedestroy($c);
imagedestroy($d);
imagedestroy($dest_image);
unlink('images/plot'.$file);
unlink('images/rightaxis'.$file);
unlink('images/timeaxis'.$file);
// return the filename
echo '/images/'.$file; exit;
?>
@acegreen
Copy link
Author

@samadsajanlal Ah rookie mistake, how did I not see that!!! thanks for the comment. Works perfectly!!

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment