<?php
// tutorial_to_animated_gif.php
// RJM Programming
// September, 2015
// Thanks to http://www.jeroenvanwissen.nl/weblog/php/howto-generate-animated-gif-with-php

$extras="";
$ismulti=[];
$ismultidatauri=[];
$icnt=1;
$moreh1="";
$imagegif="";
$imagegifandthen="";
$delay=40;  // 1000 / 40
$videopath="/opt/local/bin/";
//$aret=[];
//$videopaths=exec("which ffmpeg 2>&1",$aret,$retv);
//$videopath=explode("ffmpeg",explode("\n",$videopaths)[-1 + sizeof(explode("\n",$videopaths))])[0]; //      $videopaths[-1 + sizeof($videopaths)]; //$aret[0];
//echo $retv . "~" . $videopaths . "*" . $videopath . "^" . $aret[0];
//exit;
$videocmd=$videopath . "ffmpeg -r " . (1000 / $delay) . " -i " . dirname(__FILE__) . DIRECTORY_SEPARATOR . "%03d.jpg " . dirname(__FILE__) . DIRECTORY_SEPARATOR . "video.mp4 2> " . dirname(__FILE__) . DIRECTORY_SEPARATOR . "video.bad";
$svideocmd="ffmpeg -r " . (1000 / $delay) . " -i " . "%03d.jpg " . "video.mp4";
$videohtml="<video controls id=ivideo type='video/mp4'><source src='video.mp4'></source></video>";
$videosuffix="";
$agifphp="<?php

header ('Content-type:image/gif');
include('GIFEncoder.class.php');
";

$eachone="

\$text='';

// Open the first source image and add the text.
\$image = imagecreatefromjpeg('source01.jpg');
\$text_color = imagecolorallocate(\$image, 200, 200, 200);
imagestring(\$image, 5, 5, 5,  \$text, \$text_color);

// Generate GIF from the $image
// We want to put the binary GIF data into an array to be used later,
//  so we use the output buffer.
ob_start();
imagegif(\$image);
\$frames[]=ob_get_contents();
\$framed[]=40; // Delay in the animation.
ob_end_clean();

// And again..
";

$lastbit="
// Generate the animated gif and output to screen.
\$gif = new GIFEncoder(\$frames,\$framed,0,2,0,0,0,'bin');
echo \$gif->GetAnimation();

?>
"; 

$lastbitfrom="echo \$gif->GetAnimation();";
$lastbitto="\$fp = fopen('animegif.gif', 'w'); 
\$data = \$gif->GetAnimation(); 
\$dataUri = 'data:image/gif;base64,' . base64_encode(\$data);
fwrite(\$fp, \$data); 
fclose(\$fp);
\$fp = fopen('animegif.html', 'w'); 
fwrite(\$fp, '<!doctype html><html><body><h1>Data URI version below<h1><br><h4> ... via web browser (Windows right click, Mac OS X two finger gesture) ...</h4><br><img src=' . \"\\n\" . \$dataUri . \"\\n\" . ' title=DataURI></img></body></html>'); 
fclose(\$fp);";
$agtext="";
$url="";

function inhouseslideshow($uarray,$uarraydatauri) {
  global $agtext, $videocmd, $videopath;
  if (sizeof($uarray) == 0) return "";
  if (file_exists($videopath . "ffmpeg")) {
   exec($videocmd); // exec("`which ffmpeg` " . explode("ffmpeg",$videocmd)[1]);
  }
  //echo $videocmd;
  //exit;
  $sofar="<html> \n"; 
  $sofar.="<head> \n";
  $sofar.="<title>" . $agtext . " - via RJM Programming Slideshow Presentation</title> \n";
  $sofar.="<script type=\"text/javascript\"> \n";
  $sofar.="var smode = location.search.split('smode=')[1] ? location.search.split('smode=')[1].split('&')[0] : '1'; \n ";
  $sofar.="var ttl = ' ... click to have this slide stay longer'; \n";
  $sofar.="var nextone=0, inextone=1, jnextone=0; \n";
  $sofar.="var lastone=" . (-1 + sizeof($uarray)) . "; \n ";
  $sofar.="var haveseen=0; \n ";
  $sofar.="var aminterested=0, dt=''; \n ";
  $sofar.="var doit=1, uarraydatauri=[]; \n ";
  for ($ipo=0; $ipo<sizeof($uarraydatauri); $ipo++) {
  $sofar.=" uarraydatauri.push('" . $uarraydatauri[$ipo] . "'); \n ";
  }
  $sofar.="function onck(that) { \n ";
  $sofar.="  doit = 0; \n ";
  $sofar.="} \n ";
  $sofar.="function havealook(backto) { \n ";
  $sofar.="  if (smode == '0') { \n ";
  $sofar.="  if (backto == 0) location.href=document.URL.replace('smode=0','smode=1'); \n ";
  $sofar.="  document.getElementById('i' + nextone).src=uarraydatauri[jnextone]; \n";
  $sofar.="  document.title=dt + \" Slide \" + inextone + \" of \" + eval(lastone + 1); \n ";
  $sofar.="  if (dt == '') {  document.getElementById('myh1').innerHTML='Slideshow Data URI version below';  document.getElementById('som').innerHTML='Start of Movie'; dt=document.getElementById('i' + nextone).title; } else if (inextone == 1) { document.getElementById('som').innerHTML='Start of Movie';  } else { document.getElementById('som').innerHTML='';  }  \n ";
  $sofar.="  inextone=eval(eval(inextone % eval(1 + lastone)) + 1); jnextone=eval(-1 + inextone); \n ";
  $sofar.="  } else { \n ";
  $sofar.="  var thissrc=''; \n ";
  $sofar.="  var prefix=''; \n ";
  $sofar.="  if (doit == 0) { \n ";
  $sofar.="  doit = 1; \n ";
  $sofar.="  } else { \n ";
  $sofar.="  if (aminterested != 0 || backto == 0) { \n ";
  $sofar.="  var cit = document.getElementById('s0'); \n ";
  $sofar.="  if (nextone == lastone) { \n ";
  $sofar.="    thissrc = document.getElementById('i' + nextone).src; \n ";
  $sofar.="    cit.innerHTML = prefix + \"<img onclick='onck(this);' id='j\" + nextone + \"' src='\" + thissrc + \"' title='\" + document.getElementById('i' + nextone).title + ttl + \"' />\"; \n ";
  $sofar.="    nextone = 0; \n ";
  $sofar.="  } else { \n ";
  $sofar.="    thissrc = document.getElementById('i' + nextone).src; \n ";
  $sofar.="    if (backto != 0 && nextone == 0) { \n ";
  $sofar.="       prefix = 'Start of Movie: '; \n ";
  $sofar.="    } \n ";
  $sofar.="    cit.innerHTML = prefix + \"<img onclick='onck(this);' id='j\" + nextone + \"' src='\" + thissrc + \"' title='\" + document.getElementById('i' + nextone).title + ttl + \"' />\"; \n ";
  $sofar.="    nextone = nextone + 1; \n ";
  $sofar.="    if (nextone > 1) haveseen = 1; \n ";
  $sofar.="  } \n ";
  $sofar.="  if (backto == 0) { \n ";
  $sofar.="    nextone = backto; \n ";
  $sofar.="    aminterested = 1; \n ";
  $sofar.="  } \n ";
  $sofar.="  } \n ";
  $sofar.="  var nnext = eval(nextone + 0); \n ";
  $sofar.="  var llast = eval(lastone + 1); \n ";
  $sofar.="  if (nnext >= 1 && nnext <= llast) { \n ";
  $sofar.="    nnext = nnext; \n ";
  $sofar.="  } else if (prefix != '') { \n ";
  $sofar.="    nnext = 1;   \n ";
  $sofar.="  } else if (aminterested != 0 && haveseen == 1) { \n ";
  $sofar.="    nnext = llast; \n ";
  $sofar.="  } else if (aminterested != 0) { \n ";
  $sofar.="    nnext = 1; \n ";
  $sofar.="  } else if (nnext == 0) { \n ";
  $sofar.="    nnext = 1; \n ";
  $sofar.="  } \n ";
  $sofar.="  document.title=document.getElementById('i' + nextone).title + \" Slide \" + nnext + \" of \" + llast; \n ";
  $sofar.="  } \n ";
  $sofar.="  } \n ";
  $sofar.="} \n ";
  $sofar.="function ol() { \n ";

for ($iqw=1; $iqw<sizeof($uarray); $iqw++) {
    $sofar.=" if (smode != '0') document.getElementById('row').innerHTML+='<td><span style=\"color:red;font-size:14px;\"><b>--&gt;</b></span></td><td><img onclick=\"onck(this);\" id=\"i" . $iqw . "\" src=\"" . $uarray[$iqw] . "\" title=\"" . $agtext . "\" /></td>'; \n ";
}

  $sofar.="} \n ";
  $sofar.="window.setInterval(function(){havealook(1)},2000);  \n ";
  $sofar.="</script> \n ";
  $sofar.="<title>" . $agtext . "</title> \n ";
  $sofar.="</head> \n ";
  $sofar.="<body onload=\"document.title=document.title + ' ' + lastone; ol(); \"> \n ";
  $sofar.="<h1 id=myh1>Slideshow version below<h1><br><h4> ... optionally get content via web browser (Windows right click, Mac OS X two finger gesture) ... <span id=som></span></h4><br> \n ";
  $sofar.="<table> \n ";
  $sofar.="<tr id=row> \n ";
  $sofar.="<td><span id='s0'><a href='#' title=\"Movie'ize Here vs Follow Red Right Arrows with Bottom Scrollbar\" onclick='havealook(0);'>@</a></span><span style=\"color:red;font-size:14px;\"><b>--&gt;</b></span></td><td><img onclick=\"onck(this);\" id=\"i0\" src=\"" . $uarray[0] . "\" title=\"" . $agtext . "\" /></td> \n ";

//for ($iqw=1; $iqw<sizeof($uarray); $iqw++) {
//    $sofar.="<td><span style=\"color:red;font-size:14px;\"><b>--&gt;</b></span></td><td><img onclick=\"onck(this);\" id=\"i" . $iqw . "\" src=\"" . $uarray[$iqw] . "\" title=\"" . $agtext . "\" /></td> \n ";
//}

return $sofar . "</table>\n</body>\n</html>";
}

function server_remote_addr() {
    $rma = $_SERVER['REMOTE_ADDR'];
    $ua = strtolower($_SERVER['HTTP_USER_AGENT']);
    // you can add different browsers with the same way ..
    if(preg_match('/(chromium)[ \/]([\w.]+)/', $ua))
            $rma = '000000'.$rma;
    elseif(preg_match('/(chrome)[ \/]([\w.]+)/', $ua))
            $rma = '00000'.$rma;
    elseif(preg_match('/(safari)[ \/]([\w.]+)/', $ua))
            $rma = '0000'.$rma;
    elseif(preg_match('/(opera)[ \/]([\w.]+)/', $ua))
            $rma = '000'.$rma;
    elseif(preg_match('/(msie)[ \/]([\w.]+)/', $ua))
            $rma = '00'.$rma;
    elseif(preg_match('/(mozilla)[ \/]([\w.]+)/', $ua))
            $rma = '0'.$rma;
    return str_replace(":", "_", $rma);
}

function analyze($url) {
 //$aprefix="../";
 $aprefix="";
 if (strpos($url, "//") === false && strpos($_SERVER['SERVER_NAME'], "rjmprogramming.com.au") !== false) return $aprefix;
 if (strpos($url, "//") === false && strpos($_SERVER['SERVER_NAME'], "localhost") !== false) return $aprefix;
 $aub=$_SERVER['REQUEST_URI'];
 $xubf=explode("?", $aub);
 $xubf[0]=str_replace("tutorial_to_animated_gif.php", "", str_replace("@!@","", str_replace("@!@/","", "@!@" . $xubf[0])));
 $xubff=explode("/", $xubf[0]);
 for ($ih=1; $ih<sizeof($xubff); $ih++) $aprefix .= "../";
 //echo $aprefix;
 if (strpos($xubff[sizeof($xubff) - 1], ".") !== false && (sizeof($xubff) - 1) > 2) {
       $xub=str_replace("/" . $xubff[sizeof($xubff) - 1], "/", $xubf[0]);
 } else {
       $xub=str_replace("@$@", "", str_replace("/@$@", "/", ($xubf[0] . "@$@")));
 }
 $ubf=explode("?", $url);
 
 $ubff=explode("/", $ubf[0]);
 if (strpos($ubff[sizeof($ubff) - 1], ".") !== false && (sizeof($ubff) - 1) > 2) {
       $ub=str_replace("/" . $ubff[sizeof($ubff) - 1], "/", $ubf[0]);
 } else {
       $ub=str_replace("@$@", "", str_replace("/@$@", "/", ($ubf[0] . "@$@")));
 }
 $preubff=explode("rjmprogramming.com.au:80/", $ub);
 if (sizeof($preubff) > 1) {
  $aprefix.=$preubff[1];
 } else {
 $preubff=explode("rjmprogramming.com.au/", $ub);
 if (sizeof($preubff) > 1) {
  $aprefix.=$preubff[1];
 } else {
 $preubff=explode("localhost:8888/", $ub);
 if (sizeof($preubff) > 1) {
  $aprefix.=$preubff[1];
 }
 }
 }
 return $aprefix;
}

if (isset($_GET['slideshow']) || isset($_POST['slideshow'])) {
 if (isset($_GET['slideshow'])) $url=($_GET['slideshow']);
 if (isset($_POST['slideshow'])) $url=($_POST['slideshow']);
 if (strpos($url, ' src="') !== false) {
 $shtml=$url;
 file_put_contents(server_remote_addr() . "_huh.html", $url);
 $moreh1=" ... you have 10 seconds to change delay value as necessary";
 $imagegifandthen.="document.getElementById('slideshow').value='http://www.rjmprogramming.com.au/PHP/animegif/" . server_remote_addr() . "_huh.html'; setTimeout(and_then,10000); ";
 $shtml="";
 } else {
 if (isset($_GET['slideshow'])) $shtml=@file_get_contents($_GET['slideshow']);
 if (isset($_POST['slideshow'])) $shtml=@file_get_contents($_POST['slideshow']);
 }
 $prefix=analyze($url);
 if (isset($_GET['delay'])) $delay=($_GET['delay']);
 if (isset($_POST['delay'])) $delay=($_POST['delay']);
 $videocmd=$videopath . "ffmpeg -r " . (1000 / $delay) . " -i " . dirname(__FILE__) . DIRECTORY_SEPARATOR . "%03d.jpg " . dirname(__FILE__) . DIRECTORY_SEPARATOR . "video.mp4 2> " . dirname(__FILE__) . DIRECTORY_SEPARATOR . "video.bad";
 $svideocmd="ffmpeg -r " . (1000 / $delay) . " -i " . "%03d.jpg " . "video.mp4";
 if (!file_exists($videopath . "ffmpeg")) {
 $videohtml="<h4 id=hvideo>No ffmpeg installed, so ... if you have in your local system ... at command line (in download directory, first removing any existant %03d.jpg files such as 001.jpg to 999.jpg) type (to end up with a video.mp4 video) <br><br><b><i>" . $svideocmd . "</i></b><br><br> ... after downloading ... <br><br><br><br><b><i>open video.mp4</i></b><br><br>";
 $videosuffix=" creation advice";
 }
 $eachone=str_replace("[]=40;", "[]=" . $delay . ";", $eachone);
 $gifphp=$agifphp;
 if (isset($_GET['stitle'])) $agtext=($_GET['stitle']);
 if (isset($_POST['stitle'])) $agtext=($_POST['stitle']);
 if (strpos($shtml, ' src="') === false) {
  $shtml=' src="' . $url . '" ';
  $icnt++;
  $jfilep="00";
  $ijf=1;
  $jf=1;
  while (isset($_GET['slideshow' . $icnt]) || isset($_POST['slideshow' . $icnt])) {
   if (sizeof($ismulti) == 0) { 
    if (strpos($url,".") !== false) {
      $ismulti[sizeof($ismulti)]=$url;
      if (file_exists('video.mp4')) unlink('video.mp4');
      if (1 == 1) {
        if (file_exists('001.jpg')) {
          while (file_exists(substr(($jfilep . $jf),-3) . '.jpg')) {
            unlink(substr(($jfilep . $jf),-3) . '.jpg');
            $jf++;
          }
        }
        if (file_exists($videopath . "ffmpeg")) {
        file_put_contents(substr(($jfilep . $ijf),-3) . '.jpg', file_get_contents($url));
        } else {
        $videohtml=str_replace("<br><br><br><b><i>open", "<br><a download='001.jpg' title='001.jpg' href='" . $url . "'>" . $url . "</a>&nbsp;<br><br><br><b><i>open", $videohtml);
        }
        $ijf++;
      }
      $ismultidatauri[sizeof($ismultidatauri)]='data:image/' . str_replace('jpg','jpeg',strtolower(explode('.',$url)[-1 + sizeof(explode('.',$url))])) . ';base64,' . base64_encode(file_get_contents($url));
    }
   }
   if (isset($_GET['slideshow' . $icnt])) {
     $url=($_GET['slideshow' . $icnt]);
     if (strpos($url,".") !== false) {
      $ismulti[sizeof($ismulti)]=$url;
      if (file_exists($videopath . "ffmpeg")) {
        file_put_contents(substr(($jfilep . $ijf),-3) . '.jpg', file_get_contents($url));
      } else {
        $videohtml=str_replace("<br><br><br><b><i>open", "<br><a download='" . substr(($jfilep . $ijf),-3) . ".jpg' title='" . substr(($jfilep . $ijf),-3) . ".jpg' href='" . $url . "'>" . $url . "</a>&nbsp;<br><br><br><b><i>open", $videohtml);
      }
      $ijf++;
      $ismultidatauri[sizeof($ismultidatauri)]='data:image/' . str_replace('jpg','jpeg',strtolower(explode('.',$url)[-1 + sizeof(explode('.',$url))])) . ';base64,' . base64_encode(file_get_contents($url));
     }
   }
   if (isset($_POST['slideshow' . $icnt])) {
     $url=($_POST['slideshow' . $icnt]);
     if (strpos($url,".") !== false) {
      $ismulti[sizeof($ismulti)]=$url;
      if (file_exists($videopath . "ffmpeg")) {
        file_put_contents(substr(($jfilep . $ijf),-3) . '.jpg', file_get_contents($url));
      } else {
        $videohtml=str_replace("<br><br><br><b><i>open", "<br><a download='" . substr(($jfilep . $ijf),-3) . ".jpg' title='" . substr(($jfilep . $ijf),-3) . ".jpg' href='" . $url . "'>" . $url . "</a>&nbsp;<br><br><br><b><i>open", $videohtml);
      }
      $ijf++;
      $ismultidatauri[sizeof($ismultidatauri)]='data:image/' . str_replace('jpg','jpeg',strtolower(explode('.',$url)[-1 + sizeof(explode('.',$url))])) . ';base64,' . base64_encode(file_get_contents($url));
     }
   }
   $shtml.=' src="' . $url . '" ';
   $icnt++;
  }
if (sizeof($ismulti) > 0) {
$ofp = fopen('slideshow.html', 'w'); 
fwrite($ofp, inhouseslideshow($ismulti,$ismultidatauri));
fclose($ofp);
  $extras="&nbsp;<a href=#iag title=AnimatedGIF>Animated GIF</a>&nbsp;<a href=#hvideo title=Video>Video</a>&nbsp;<a href=#idatauri title=DataURI>Data URI version</a>&nbsp;<a href=#preislideshow title=Slideshow>Slideshow versions</a>";
} else {
  $extras="&nbsp;<a href=#iag title=AnimatedGIF>Animated GIF</a>&nbsp;<a href=#idatauri title=DataURI>Data URI version</a>";
}
 } 

    
    
 $photos=explode(' src="', $shtml);
 if (sizeof($photos) > 1) {
   $atext=$agtext;
   $wasprefix=$prefix;
   for ($io=1; $io<sizeof($photos); $io++) {
    $aphoto=explode('"', $photos[$io]);
    $prefix=analyze($aphoto[0]);
    if (strpos($aphoto[0], "rjmprogramming.com.au/") !== false) {
      $bts=explode("rjmprogramming.com.au/", $aphoto[0]);
      $aphoto[0]=$bts[1];
    //echo "aphoto[0]=" . $aphoto[0] . " and wasprefix=" . $wasprefix . " and prefix=" . $prefix;
    //exit;
      if (strpos($aphoto[0], "/") === false && strpos($aphoto[0], substr("\\",0,1)) === false && str_replace("../","",$prefix) == "" && $wasprefix != "") {
        $prefix.=$wasprefix;
      }
    } else if (strpos($aphoto[0], "rjmprogramming.com.au:80/") !== false) {
      $bts=explode("rjmprogramming.com.au:80/", $aphoto[0]);
      $aphoto[0]=$bts[1];
    //echo "aphoto[0]=" . $aphoto[0] . " and wasprefix=" . $wasprefix . " and prefix=" . $prefix;
    //exit;
      if (strpos($aphoto[0], "/") === false && strpos($aphoto[0], substr("\\",0,1)) === false && str_replace("../","",$prefix) == "" && $wasprefix != "") {
        $huhp=$prefix;
        $prefix.=$wasprefix;
      if (strpos($prefix, "../../") !== false && !file_exists($prefix . $aphoto[0]) && file_exists(str_replace("../../","../",$prefix) . $aphoto[0])) {
        $prefix=str_replace("../../","../",$prefix);
      } else if (!file_exists($prefix . $aphoto[0])) {
        $prefix=$huhp;
      }
      }
    } else if (strpos($aphoto[0], "/") === false && strpos($aphoto[0], substr("\\",0,1)) === false && strpos($url, "rjmprogramming.com.au") !== false) {
      if (strpos($aphoto[0], "/") === false && strpos($aphoto[0], substr("\\",0,1)) === false && str_replace("../","",$prefix) == "" && $wasprefix != "") {
        $huhp=$prefix;
        $prefix.=$wasprefix;
      if (strpos($prefix, "../../") !== false && !file_exists($prefix . $aphoto[0]) && file_exists(str_replace("../../","../",$prefix) . $aphoto[0])) {
        $prefix=str_replace("../../","../",$prefix);
      } else if (!file_exists($prefix . $aphoto[0])) {
        $prefix=$huhp;
      }
      }
    //echo "Aphoto[0]=" . $aphoto[0] . " and wasprefix=" . $wasprefix . " and prefix=" . $prefix;
    //exit;
    }
    $dbits=explode("/", $aphoto[0]);    
    
    
    
    for ($itr=0; $itr<(sizeof($dbits) - 1); $itr++) {
      $dtib=$dbits[$itr] . "/";
      $oy=1;
      if (strpos($prefix, $dtib) !== false) $prefix=str_replace($dtib, "", $prefix, $oy);
    }
    if (strpos(strtolower($aphoto[0]), "//") !== false) $prefix="";
    if (strpos($aphoto[0], ";base64,") !== false) {
      $gifphp.=str_replace("imagecreatefromjpeg('source01.jpg');", "imagecreatefromstring(base64_decode('" . explode(";base64,",$aphoto[0])[1] . "'));", str_replace("\$text='';", "\$text='" . $atext . "';", $eachone));
    } else if (strpos(strtolower($aphoto[0]), "//") !== false) {
      $gifphp.=str_replace("imagecreatefromjpeg('source01.jpg');", "imagecreatefromstring(@file_get_contents('" . $prefix . $aphoto[0] . "'));", str_replace("\$text='';", "\$text='" . $atext . "';", $eachone));
    } else if (strpos(strtolower($aphoto[0]), ".jp") !== false) {
      if (strpos($prefix, "../../") !== false && !file_exists($prefix . $aphoto[0]) && file_exists(str_replace("../../","../",$prefix) . $aphoto[0])) {
        $prefix=str_replace("../../","../",$prefix);
      }
      $gifphp.=str_replace("imagecreatefromjpeg('source01.jpg');", "imagecreatefromjpeg('" . $prefix . $aphoto[0] . "');", str_replace("\$text='';", "\$text='" . $atext . "';", $eachone));
    } else if (strpos(strtolower($aphoto[0]), ".png") !== false) {
      if (strpos($prefix, "../../") !== false && !file_exists($prefix . $aphoto[0]) && file_exists(str_replace("../../","../",$prefix) . $aphoto[0])) {
        $prefix=str_replace("../../","../",$prefix);
      }
      $gifphp.=str_replace("imagecreatefromjpeg('source01.jpg');", "imagecreatefrompng('" . $prefix . $aphoto[0] . "');", str_replace("\$text='';", "\$text='" . $atext . "';", $eachone));
    } else if (strpos(strtolower($aphoto[0]), ".gif") !== false) {
      if (strpos($prefix, "../../") !== false && !file_exists($prefix . $aphoto[0]) && file_exists(str_replace("../../","../",$prefix) . $aphoto[0])) {
        $prefix=str_replace("../../","../",$prefix);
      }
      $gifphp.=str_replace("imagecreatefromjpeg('source01.jpg');", "imagecreatefromgif('" . $prefix . $aphoto[0] . "');", str_replace("\$text='';", "\$text='" . $atext . "';", $eachone));
    } else if (strpos(strtolower($aphoto[0]), ".bmp") !== false) {
      if (strpos($prefix, "../../") !== false && !file_exists($prefix . $aphoto[0]) && file_exists(str_replace("../../","../",$prefix) . $aphoto[0])) {
        $prefix=str_replace("../../","../",$prefix);
      }
      $gifphp.=str_replace("imagecreatefromjpeg('source01.jpg');", "imagecreatefrombmp('" . $prefix . $aphoto[0] . "');", str_replace("\$text='';", "\$text='" . $atext . "';", $eachone));
    } 
    $atext="";
   }
   if ($agtext == "") $agtext="slideshow";
   $lastbit=str_replace("framed,0,2,0,0,0,", "framed,0," . (sizeof($photos) - 1) . ",0,0,0,", $lastbit);
   //file_put_contents(str_replace(" ", "_", $agtext) . "_preview.php", $gifphp . $lastbit);
   //file_put_contents(str_replace(" ", "_", $agtext) . ".php", $gifphp . str_replace($lastbitfrom, str_replace("'animegif.gif'", "'" . server_remote_addr() . ".gif" . "'", $lastbitto), $lastbit));
   //@file_get_contents(str_replace(" ", "_", $agtext) . ".php");
   file_put_contents(server_remote_addr() . "_preview.php", $gifphp . $lastbit);
   file_put_contents(server_remote_addr() . ".php", $gifphp . str_replace($lastbitfrom, str_replace("'animegif.gif'", "'" . server_remote_addr() . ".gif" . "'", $lastbitto), $lastbit));
   //@file_get_contents(server_remote_addr() . ".php?x=" . rand (2,450456));
   //header("Location: " . str_replace(" ", "_", $agtext) . "_preview.php");
   $imagegif="<br><h1 align='center'>Preview Below ... Animated GIF (Later) (Way) Below</h1><br><iframe id=iag frameborder=0 style='width:100%;height:100%;' src='" . server_remote_addr() . "_preview.php?x=" . rand (2,450456) . "' title='" . $agtext . "'></iframe>";
   $imagegif.="<br><br><iframe frameborder=0 style='display:none;' src='" . server_remote_addr() . ".php?x=" . rand (2,450456) . "' title='" . $agtext . "'></iframe>";
   if (sizeof($ismulti) > 0) {
   $imagegifandthen.="document.getElementById('idiv').innerHTML+=\"<br><h1 align='center'>Preview Above ... Animated GIF then Video" . $videosuffix . " Below</h1><br><img src='" . server_remote_addr() . ".gif" . "' title='" . $agtext . "'></img><br><h1 id=hvideo>Video" . $videosuffix . " below ...</h1><br>" . $videohtml . "<br><iframe id=idatauri src='animegif.html?x=" . rand (2,450456) . "' title=DataURI style=width:100%;height:800px;background-color:lightblue;></iframe><br>&nbsp;<a id=preislideshow href=#idatauri title=DataURI>Data URI version</a>&nbsp;<a href=#myh1 title=Top>Top</a>&nbsp;<a href=#iag title=AnimatedGIF>Animated GIF</a>&nbsp;<a href=#prejslideshow title=SlideshowDataURI>Slideshow Data URI</a><br><iframe id=islideshow src='slideshow.html?x=" . rand (2,450456) . "' title=SlideShow style=width:100%;height:800px;;background-color:lightgreen;></iframe><br><a id=prejslideshow href=#preislideshow title=Slideshow>Slideshow</a><br><iframe id=jslideshow src='slideshow.html?smode=0&x=" . rand (2,450456) . "' title=SlideShowDataURI style=width:100%;height:800px;;background-color:lightgreen;></iframe>" . "\";";
   } else {
   $imagegifandthen.="document.getElementById('idiv').innerHTML+=\"<br><h1 align='center'>Preview Above ... Animated GIF Below</h1><br><img src='" . server_remote_addr() . ".gif" . "' title='" . $agtext . "'></img><br>&nbsp;<a href=#myh1 title=Top>Top</a>&nbsp;<a href=#iag title=AnimatedGIF>Animated GIF</a><br><iframe id=idatauri src='animegif.html?x=" . rand (2,450456) . "' title=DataURI style=width:100%;height:800px;;background-color:lightblue;></iframe>" . "\";";
   }
 }
} //else {
  echo "<!doctype html>
<html>
<head>
<link href='//www.rjmprogramming.com.au/PHP/emboss_h1.css' rel='stylesheet' type='text/css'>
<title>Tutorial Slideshow to Animated GIF</title>
<script type='text/javascript'>
var icnt=1;
function isimage(tvl) {
  if (tvl.toLowerCase().indexOf('.jp') != -1) return true;
  if (tvl.toLowerCase().indexOf('.gif') != -1) return true;
  if (tvl.toLowerCase().indexOf('.png') != -1) return true;
  if (tvl.toLowerCase().indexOf('.bmp') != -1) return true;
  if (tvl.toLowerCase().indexOf('.tif') != -1) return true;
  return false;
}
function and_then() {
  document.getElementById('mysubmit').click();
}
function maybemore(tval, tid) {
  var newi=null, fo=null;
  if (isimage(tval)) {
   fo=document.getElementById('fdiv' + icnt);
   icnt++;
   newi=document.getElementById('slideshow' + icnt);
   if (fo != null && newi == null) {
    fo.innerHTML+=\"Tutorial Slideshow Image \" + icnt + \" <input onblur='maybemore(this.value, this.id);' style='width:70%;' type='url' id='slideshow\" + icnt + \"' name='slideshow\" + icnt + \"' value=''></input><br><br><div id='fdiv\" + icnt + \"'></div>\";
   } 
  }
}
function andthen() {
" . $imagegifandthen . "
}
</script>
<style>
a { padding: 5px 5px 5px 5px; margin: 5px 5px 5px 5px; border: 1px solid red; background-color: #f0f0f0; } 
</style>
</head>
<body style='background-color:yellow;' onload=' setTimeout(andthen, 8000); '>
<h1 id='myh1' align='center'>Tutorial Slideshow to Animated GIF" . $moreh1 . "</h1>
<div align='center'>
<form id='myform' action='./tutorial_to_animated_gif.php' method='POST'>
Tutorial Slideshow Title <input style='width:70%;' type='text' id='stitle' name='stitle' value='" . $agtext . "'></input><br><br>
Tutorial Slideshow Delay <input style='width:70%;' type='number' id='delay' name='delay' value='" . $delay . "'></input><br><br>
Tutorial Slideshow <a style='cursor:pointer;text-decoration:none;' onclick=\" if (document.getElementById('slideshow').value.toLowerCase().indexOf('.htm') != -1) { window.open(document.getElementById('slideshow').value,'_blank'); } \">HTML</a> or Image <input onblur=\"maybemore(this.value, 'slideshow1');\" style='width:70%;' type='url' id='slideshow' name='slideshow' value='" . $url . "'></input><br><br>
<div id='fdiv1'></div><input id=\"mysubmit\" type=\"submit\" title='Tutorial Slideshow to Animated GIF' value='Tutorial Slideshow to Animated GIF'></input>" . $extras . "
</form><div id='idiv' align='center' style='background-color:pink;'>" . $imagegif . "</div>
</div>
</body>
</html>";

//}


?>