{"id":54118,"date":"2021-11-29T03:01:48","date_gmt":"2021-11-28T17:01:48","guid":{"rendered":"http:\/\/www.rjmprogramming.com.au\/ITblog\/?p=54118"},"modified":"2021-11-30T14:08:49","modified_gmt":"2021-11-30T04:08:49","slug":"gimp-guillotine-image-file-browse-windows-client-tutorial","status":"publish","type":"post","link":"https:\/\/www.rjmprogramming.com.au\/ITblog\/gimp-guillotine-image-file-browse-windows-client-tutorial\/","title":{"rendered":"Gimp Guillotine Image File Browse Windows Client Tutorial"},"content":{"rendered":"<div style=\"width: 230px\" class=\"wp-caption alignnone\"><a target=_blank href=\"https:\/\/www.rjmprogramming.com.au\/PHP\/gimp_guillotine_followup.php\"><img decoding=\"async\" style=\"border: 15px solid pink;\" alt=\"Gimp Guillotine Image File Browse Windows Client Tutorial\" src=\"http:\/\/www.rjmprogramming.com.au\/PHP\/gimp_guillotine_followup_windows_client.jpg\" title=\"Gimp Guillotine Image File Browse Windows Client Tutorial\"  style=\"float:left;\" \/><\/a><p class=\"wp-caption-text\">Gimp Guillotine Image File Browse Windows Client Tutorial<\/p><\/div>\n<p>Moving on from yesterday&#8217;s <a title='Gimp Guillotine Image File Browse Intranet Video Tutorial' href='#ggifbivt'>Gimp Guillotine Image File Browse Intranet Video Tutorial<\/a>&#8216;s progress, today, we test the Gimp Guillotine Follow Up web application on some Windows web browsers, and fix issues not immediately apparent when your main testing platform is macOS or Mac OS X.<\/p>\n<p>Some issues found were &#8230;<\/p>\n<ul>\n<li>HTML iframe overflowing the nesting &#8220;td&#8221; (table cell) element had scroll bars we did not enjoys, with Windows client web browsers &#8230; <font color=blue>the fix<\/font> being &#8230;<br \/>\n<code><br \/>\n&lt;h4&gt;Input Images&lt;\/h4&gt;&lt;\/td&gt;&lt;td style='height:100px;overflow:auto;'&gt;&lt;iframe id=ggif style='display:inline-block;height:100%;width:95px;' <font color=blue>scrolling=no<\/font> frameborder=0 src='\/PHP\/animegif\/tutorial_to_animated_gif.php?huhv=y&calledbygg=\" . $ru . \"'&gt;&lt;\/iframe&gt;&lt;\/td&gt;&lt;\/tr&gt;&lt;\/table&gt;<br \/>\n<\/code><\/p>\n<li>the MAMP HTTP:\/\/localhost:8888\/ $_SERVER[&#8216;DOCUMENT_ROOT&#8217;] will not work on a Windows client, we&#8217;ve decided, and so now test for a Window client scenario &#8230;<br \/>\n&lt;?php<br \/>\n<code><br \/>\n  $eeee=\"y\";<br \/>\n<br \/> <br \/>\n  $user_agent = $_SERVER[\"HTTP_USER_AGENT\"];<br \/>\n  function getOS() { \/\/ thanks to <a target=_blank href='https:\/\/www.daniweb.com\/programming\/web-development\/threads\/495588\/getting-users-os-info-out-of-server-http-user-agent' title='https:\/\/www.daniweb.com\/programming\/web-development\/threads\/495588\/getting-users-os-info-out-of-server-http-user-agent'>https:\/\/www.daniweb.com\/programming\/web-development\/threads\/495588\/getting-users-os-info-out-of-server-http-user-agent<\/a><br \/>\n      global $user_agent;<br \/>\n      $os_platform    =   \"win Unknown OS Platform\";<br \/>\n      $os_array       =   array(<br \/>\n                              '\/windows nt 10\/i'     =>  'Windows 10',<br \/>\n                              '\/windows nt 6.3\/i'     =>  'Windows 8.1',<br \/>\n                              '\/windows nt 6.2\/i'     =>  'Windows 8',<br \/>\n                              '\/windows nt 6.1\/i'     =>  'Windows 7',<br \/>\n                              '\/windows nt 6.0\/i'     =>  'Windows Vista',<br \/>\n                              '\/windows nt 5.2\/i'     =>  'Windows Server 2003\/XP x64',<br \/>\n                              '\/windows nt 5.1\/i'     =>  'Windows XP',<br \/>\n                              '\/windows xp\/i'         =>  'Windows XP',<br \/>\n                              '\/windows nt 5.0\/i'     =>  'Windows 2000',<br \/>\n                              '\/windows me\/i'         =>  'Windows ME',<br \/>\n                              '\/win98\/i'              =>  'Windows 98',<br \/>\n                              '\/win95\/i'              =>  'Windows 95',<br \/>\n                              '\/win16\/i'              =>  'Windows 3.11',<br \/>\n                              '\/macintosh|mac os x\/i' =>  'Mac OS X',<br \/>\n                              '\/mac_powerpc\/i'        =>  'Mac OS 9',<br \/>\n                              '\/linux\/i'              =>  'Linux',<br \/>\n                              '\/ubuntu\/i'             =>  'Ubuntu',<br \/>\n                              '\/iphone\/i'             =>  'iPhone',<br \/>\n                              '\/ipod\/i'               =>  'iPod',<br \/>\n                              '\/ipad\/i'               =>  'iPad',<br \/>\n                              '\/android\/i'            =>  'Android',<br \/>\n                              '\/blackberry\/i'         =>  'BlackBerry',<br \/>\n                              '\/webos\/i'              =>  'Mobile'<br \/>\n                          );<br \/>\n<br \/> <br \/>\n      foreach ($os_array as $regex => $value) {<br \/>\n<br \/> <br \/>\n          if (preg_match($regex, $user_agent)) {<br \/>\n              $os_platform    =   $value;<br \/>\n          }<br \/>\n<br \/> <br \/>\n      }<br \/>\n<br \/> <br \/>\n      return $os_platform;<br \/>\n  }<br \/>\n<br \/> <br \/>\n  if (substr(strtoupper(getOS()),0,3) === 'WIN') { $eeee=\"\"; }<br \/>\n<\/code><br \/>\n?&gt;<br \/>\n &#8230; and switch off Intranet Video functionality if Windows, as a client, <font color=blue>is detected<\/font> &#8230;<br \/>\n&lt;?php echo &#8221;<br \/>\n<code><br \/>\nvar evalcmd='';<br \/>\n<br \/>\nfunction imselset() {<br \/>\n  if (document.getElementById('imsel')) {<br \/>\n   if (document.getElementById('imsel').innerHTML.indexOf('video') != -1) {<br \/>\n    if (document.getElementById('imsel').value != 'video') {<br \/>\n      if (document.URL.indexOf('localhost') == -1) {<br \/>\n       <font color=blue>evalcmd='\" . $eeee . \"';<\/font> \/\/ evalcmd='y';<br \/>\n      }<br \/>\n    } else {<br \/>\n      setTimeout(imselset, 1000);<br \/>\n    }<br \/>\n   } else {<br \/>\n    setTimeout(imselset, 1000);<br \/>\n   }<br \/>\n  } else {<br \/>\n   setTimeout(imselset, 1000);<br \/>\n  }<br \/>\n}<br \/>\n<br \/>\nsetTimeout(imselset, 1000);<br \/>\n<\/code><br \/>\n&#8220;; ?&gt;\n<\/li>\n<\/ul>\n<p> &#8230; and along the way we &#8230;<\/p>\n<ul>\n<li>introduced a &#8220;readonly&#8221; attribute to the main textbox on a <i>?filespec=\/tmp\/ggblahblahblahtmp*.*&#038;andgo=y<\/i> scenario<\/li>\n<li>stop Animated GIF image distortion, by removing <i>height<\/i> CSS styling<\/li>\n<\/ul>\n<p> &#8230; for <a target=_blank href=\"http:\/\/www.rjmprogramming.com.au\/PHP\/Geographicals\/diff.php?one=http:\/\/www.rjmprogramming.com.au\/PHP\/gimp_guillotine_followup.php-----------------------------GETME\">this change<\/a> to &#8220;parent&#8221; <a target=_blank href=\"http:\/\/www.rjmprogramming.com.au\/PHP\/gimp_guillotine_followup.php-----------------------------GETME\">gimp_guillotine_followup.php<\/a>&#8216;s <a target=_blank href=\"https:\/\/www.rjmprogramming.com.au\/PHP\/gimp_guillotine_followup.php\" title=\"Click picture\">Gimp Guillotine Follow Up PHP web application<\/a> that is supervising the &#8220;child&#8221; <a target=_blank href=\"http:\/\/www.rjmprogramming.com.au\/PHP\/Geographicals\/diff.php?one=http:\/\/www.rjmprogramming.com.au\/PHP\/animegif\/tutorial_to_animated_gif.php-------------------------------------------------GETME\">the changed PHP Animated GIF creator<\/a> <a target=_blank href=\"http:\/\/www.rjmprogramming.com.au\/PHP\/animegif\/tutorial_to_animated_gif.php-------------------------------------------------GETME\">tutorial_to_animated_gif.php<\/a> helper.<\/p>\n<p><!--p>You can also see this play out at WordPress 4.1.1's <a target=_blank  href='\/\/www.rjmprogramming.com.au\/ITblog\/gimp-guillotine-image-file-browse-windows-client-tutorial\/'>Gimp Guillotine Image File Browse Windows Client Tutorial<\/a>.<\/p-->\n<hr>\n<p id='ggifbivt'>Previous relevant <a target=_blank title='Gimp Guillotine Image File Browse Intranet Video Tutorial' href='\/\/www.rjmprogramming.com.au\/ITblog\/gimp-guillotine-image-file-browse-intranet-video-tutorial\/'>Gimp Guillotine Image File Browse Intranet Video Tutorial<\/a> is shown below.<\/p>\n<div style=\"width: 230px\" class=\"wp-caption alignnone\"><a target=_blank href=\"https:\/\/www.rjmprogramming.com.au\/PHP\/gimp_guillotine_followup.php\"><img decoding=\"async\" style=\"border: 15px solid pink;\" alt=\"Gimp Guillotine Image File Browse Intranet Video Tutorial\" src=\"http:\/\/www.rjmprogramming.com.au\/PHP\/gimp_guillotine_followup_intranet_video.jpg\" title=\"Gimp Guillotine Image File Browse Intranet Video Tutorial\"  style=\"float:left;\" \/><\/a><p class=\"wp-caption-text\">Gimp Guillotine Image File Browse Intranet Video Tutorial<\/p><\/div>\n<p>If you were paying uncompromising attention to yesterday&#8217;s <a title='Gimp Guillotine Image File Browse Animated GIF Tutorial' href='#ggifbagift'>Gimp Guillotine Image File Browse Animated GIF Tutorial<\/a> you may have <font color=blue>tweaked to and or piqued to<\/font> &#8230;<\/p>\n<blockquote cite='\/\/www.rjmprogramming.com.au\/ITblog\/gimp-guillotine-image-file-browse-animated-gif-tutorial\/'><p>\nslideshow, PDF, video <font color=blue>(maybe)<\/font>\n<\/p><\/blockquote>\n<p> &#8230; and then maybe even recalled a couple of things explained in <a target=_blank href='https:\/\/www.rjmprogramming.com.au\/ITblog\/animated-gif-creator-video-intranet-tutorial\/' title='Animated GIF Creator Video Intranet Tutorial'>Animated GIF Creator Video Intranet Tutorial<\/a> (channelling <a target=_blank href=\"www.rjmprogramming.com.au\/ITblog\/animated-gif-creator-video-revisit-tutorial\/\" title='Animated GIF Creator Video Revisit Tutorial'>Animated GIF Creator Video Revisit Tutorial<\/a>) &#8230;<\/p>\n<blockquote cite='\/\/www.rjmprogramming.com.au\/ITblog\/animated-gif-creator-video-revisit-tutorial\/'><p>\n &#8230; one reason being that we do not want to install the wonderful <a target=_blank title=ffmpeg href='https:\/\/www.ffmpeg.org\/'>ffmpeg<\/a> (command line video creation tool) on the RJM Programming domain, but, in macOS, here with MAMP, we are quite happy to live with the <a target=_blank title=Homebrew href='https:\/\/brew.sh\/'>Homebrew<\/a> (Terminal application&#8217;s) install &#8230;\n<\/p><\/blockquote>\n<blockquote cite='https:\/\/www.rjmprogramming.com.au\/ITblog\/animated-gif-creator-video-intranet-tutorial\/'>\n<p> &#8230; setting up what could be &#8220;lost functionality&#8221;, but today, we come around to either adding a new &#8230;<\/p>\n<p>\n<code><br \/>\nConvert to Video<br \/>\n<\/code><br \/>\n<\/p>\n<p> &#8230; dropdown option should all be ritchy ditch, and if not, often we will add new &#8220;Advice&#8221; dropdown options to remind the user what they&#8217;d need to arrange to get to a &#8220;Convert to Video&#8221; scenario.<\/p>\n<\/blockquote>\n<p> &#8230; all this referring to our current Gimp Guillotine Follow Up web application project&#8217;s Animated GIF Creator web application helper.  So, why don&#8217;t we give our Gimp Guillotine Follow Up web application aficionados who have installed a local Apache web server like MAMP (most likely on macOS or Mac OS X) and the wonderful ffmpeg command line the chance to turn <font color=blue>(maybe)<\/font> into <font color=green>(likely)<\/font> (given small amounts of image data involved) via &#8220;Intranet&#8221; feeling methodologies?<\/p>\n<p>In order to make <a target=_blank href=\"http:\/\/www.rjmprogramming.com.au\/PHP\/Geographicals\/diff.php?one=http:\/\/www.rjmprogramming.com.au\/PHP\/gimp_guillotine_followup.php----------------------------GETME\">this change<\/a> to &#8220;parent&#8221; <a target=_blank href=\"http:\/\/www.rjmprogramming.com.au\/PHP\/gimp_guillotine_followup.php----------------------------GETME\">gimp_guillotine_followup.php<\/a>&#8216;s <a target=_blank href=\"https:\/\/www.rjmprogramming.com.au\/PHP\/gimp_guillotine_followup.php\" title=\"Click picture\">Gimp Guillotine Follow Up PHP web application<\/a> that is supervising the &#8220;child&#8221; <a target=_blank href=\"http:\/\/www.rjmprogramming.com.au\/PHP\/Geographicals\/diff.php?one=http:\/\/www.rjmprogramming.com.au\/PHP\/animegif\/tutorial_to_animated_gif.php------------------------------------------------GETME\">the changed PHP Animated GIF creator<\/a> <a target=_blank href=\"http:\/\/www.rjmprogramming.com.au\/PHP\/animegif\/tutorial_to_animated_gif.php------------------------------------------------GETME\">tutorial_to_animated_gif.php<\/a> we need to &#8230;<\/p>\n<table>\n<tr>\n<th>Have the public RJM Programming domain parent <a target=_blank href=\"https:\/\/www.rjmprogramming.com.au\/PHP\/gimp_guillotine_followup.php\" title=\"Click picture\">web application<\/a> call the (public RJM Programming domain) child <font color=blue>in a slightly different way<\/font> &#8230;<\/th>\n<\/tr>\n<tr>\n<td>\n<code><br \/>\n&lt;h4&gt;Input Images&lt;\/h4&gt;&lt;\/td&gt;&lt;td style='height:100px;'&gt;&lt;iframe id=ggif style='display:inline-block;height:100%;width:95px;' frameborder=0 src='\/PHP\/animegif\/tutorial_to_animated_gif.php?<font color=blue>huhv=y&<\/font>calledbygg=\" . $ru . \"'&gt;&lt;\/iframe&gt;&lt;\/td&gt;&lt;\/tr&gt;&lt;\/table&gt;<br \/>\n<\/code>\n<\/td>\n<\/tr>\n<tr>\n<th>Have the child, then, look out for the tests that make the &#8220;Convert to Video&#8221; dropdown &#8216;imsel&#8217; option happen (only when Intranet suitable), and <font color=purple>flag it<\/font> (where function dolhsh is called at document.body&#8217;s &#8220;onload&#8221; event) &#8230;<\/th>\n<\/tr>\n<tr>\n<td>\n<code><br \/>\n var cbggis=location.search.split('called' + 'bygg=')[1] ? decodeURIComponent(location.search.split('called' + 'bygg=')[1]).split('&')[0] : '';<br \/>\n <font color=purple>var evalcmd='';<\/font><br \/>\n<br \/>\nfunction imselset() {<br \/>\n  if (document.getElementById('imsel')) {<br \/>\n   if (document.getElementById('imsel').innerHTML.indexOf('video') != -1) {<br \/>\n    if (document.getElementById('imsel').value != 'video') {<br \/>\n      if (document.URL.indexOf('localhost') == -1) {<br \/>\n        <font color=purple>evalcmd='y';<\/font> \/\/document.getElementById('imsel').value='video';<br \/>\n      }<br \/>\n    } else {<br \/>\n      setTimeout(imselset, 1000);<br \/>\n    }<br \/>\n   } else {<br \/>\n    setTimeout(imselset, 1000);<br \/>\n   }<br \/>\n  } else {<br \/>\n   setTimeout(imselset, 1000);<br \/>\n  }<br \/>\n}<br \/>\n<br \/>\nfunction dolhsh() {<br \/>\n  if (cbggis != '' && documentURL.indexOf('huhv=') != -1) {  setTimeout(imselset, 1000); }<br \/>\n  \/\/ blah blah blah<br \/>\n}<br \/>\n<\/code>\n<\/td>\n<\/tr>\n<tr>\n<th>And just before the <font color=blue>work of yesterday<\/font> arrange for a local Apache web server Javascript window.open window open with a local Apache web server <font color=purple>incarnation of the child<\/font> &#8230;<\/th>\n<\/tr>\n<tr>\n<td>\n<code><br \/>\n  <font color=purple>if (evalcmd.length != 0) {<br \/>\n    document.getElementById('imsel').value='video';<br \/>\n    imadd(document.getElementById('imsel'));<br \/>\n  }<\/font><br \/>\n  document.getElementById('delay').value='400';<br \/>\n  <font color=blue>document.getElementById('myform').target='zzlocit';<br \/>\n  document.getElementById('mysubmit').click();<\/font><br \/>\n<\/code>\n<\/td>\n<\/tr>\n<tr>\n<th>The video is, hopefully, created in that new local Apache web server window&#8217;s incarnation of the child, and just before <font color=purple>we &#8220;clobber&#8221; the whole shebang with a new incarnation of the parent<\/font> we flag its approach by introduction <font color=blue>a new GET argument &#8216;andvgo&#8217; in its URL call<\/font> &#8230;<\/th>\n<\/tr>\n<tr>\n<td>\n&lt;?php echo &#8221;<br \/>\n<code><br \/>\n    <font color=blue>var andvgo='';<br \/>\n    if (evalcmd.length != 0) {<br \/>\n          andvgo='&andvgo=y';<br \/>\n    }<\/font><br \/>\n    <font color=purple>top.location.href=cbggis.split('?')[0].split('#')[0] + '?filespec=\/tmp\/\" . ggserver_remote_addr() . \"tmp*.*&andgo=y'<\/font><font color=blue> + andvgo<\/font><font color=purple>;<\/font><br \/>\n<\/code><br \/>\n&#8220;; ?&gt;\n<\/td>\n<\/tr>\n<tr>\n<th>And back at the newly minted parent we <font color=blue>flag the existence of an Intranet video, as required<\/font> (that $pdfabit variable used later to contribute to PHP writing out of webpage content)<\/th>\n<\/tr>\n<tr>\n<td>\n&lt;?php<br \/>\n<code><br \/>\nif (isset($_POST['andgo'])) {<br \/>\n       <font color=blue>$pdfvb='';<\/font><br \/>\n       $andtwotwo=\"&lt;input name=andgo value=y type=hidden&gt;&lt;\/input&gt;\";<br \/>\n       <font color=blue>if (isset($_POST['andvgo'])) {<br \/>\n         $andtwotwo.=\"&lt;input name=andvgo value=y type=hidden&gt;&lt;\/input&gt;\";  \/\/ remembered through the navigations because used later to contribute to PHP writing out of webpage content<br \/>\n       }<\/font><br \/>\n       $andoneone=\" && 1 == 3\";<br \/>\n       if (file_exists('\/tmp\/' . ggserver_remote_addr() . 'pdftmp.pdf')) {<br \/>\n         $adatam=\"\";<br \/>\n         $pdfabit='&lt;br&gt; or &lt;details onclick=\"document.getElementById(' . \"'\" . 'aobjpdf' . \"'\" . ').click();\" style=display:inline-block;width:95%;&gt;&lt;summary style=background-color:rgba(255,0,0,0.2);&gt;&lt;a target=objpdf id=aobjpdf style=text-decoration:none; href=.\/gimp_guillotine_followup.php?getme=pdf&gt;PDF (all original slides)&lt;\/a&gt;&lt;\/summary&gt;&lt;br&gt;&lt;iframe name=objpdf id=objpdf style=\"width:100%;height:900px;\" data-type=\"application\/pdf\" srcdoc=\"&lt;embed data-type=application\/pdf style=width:100%;height:900px; src=data:application\/pdf;base64,' . base64_encode(file_get_contents('\/tmp\/' . ggserver_remote_addr() . 'pdftmp.pdf')) . '&gt;&lt;\/embed&gt;\"&gt;&lt;\/iframe&gt;&lt;\/details&gt;';<br \/>\n       }<br \/>\n       if (file_exists('\/tmp\/' . ggserver_remote_addr() . 'video.mov')) {<br \/>\n         $pdfabit.='&lt;br&gt; or &lt;details onclick=\"document.getElementById(' . \"'\" . 'aobjvideo' . \"'\" . ').click();\" style=display:inline-block;width:95%;&gt;&lt;summary style=background-color:rgba(255,255,0,0.2);&gt;&lt;a target=objvideo id=aobjvideo style=text-decoration:none; href=.\/gimp_guillotine_followup.php?getme=video&gt;Video (all original slides)&lt;\/a&gt;&lt;\/summary&gt;&lt;br&gt;&lt;iframe name=objvideo id=objvideo style=\"width:100%;height:900px;\" data-type=\"video\/mp4\" srcdoc=\"&lt;video type=video\/mp4 style=width:100%;height:900px;&gt;&lt;source type=video\/mp4 src=data:video\/mp4;base64,' . base64_encode(file_get_contents('\/tmp\/' . ggserver_remote_addr() . 'video.mov')) . '&gt;&lt;\/source&gt;&lt;\/video&gt;\"&gt;&lt;\/iframe&gt;&lt;\/details&gt;';<br \/>\n       }<font color=blue> else if (isset($_POST['andvgo'])) {<br \/>\n         $pdfvb='&lt;div id=divlocalvideo style=display:block;&gt; or &lt;details style=display:inline-block;width:95%;&gt;&lt;summary style=background-color:rgba(255,255,0,0.2);&gt;Video (all original slides shows in another local web server window as well)&lt;\/summary&gt;&lt;video controls&gt;&lt;source type=video\/mp4 src=HTTP:\/\/localhost:8888\/PHP\/animegif\/video.mov&gt;&lt;\/source&gt;&lt;\/video&gt;&lt;\/details&gt;&lt;\/div&gt;';<br \/>\n       } else {<br \/>\n         $pdfvb='&lt;div id=divlocalvideo style=display:none;&gt; or &lt;details style=display:inline-block;width:95%;&gt;&lt;summary style=background-color:rgba(255,255,0,0.2);&gt;Video (all original slides shows in another local web server window as well)&lt;\/summary&gt;&lt;video controls&gt;&lt;source type=video\/mp4 src=HTTP:\/\/localhost:8888\/PHP\/animegif\/video.mov&gt;&lt;\/source&gt;&lt;\/video&gt;&lt;\/details&gt;&lt;\/div&gt;';<br \/>\n       <\/font>}<br \/>\n       if (file_exists($_SERVER['DOCUMENT_ROOT'] . DIRECTORY_SEPARATOR . 'PHP' . DIRECTORY_SEPARATOR . 'animegif'  . DIRECTORY_SEPARATOR . server_remote_addr() . '.gif')) {<br \/>\n         $pdfabit.='&lt;br&gt; or &lt;details onclick=\"document.getElementById(' . \"'\" . 'aobjgif' . \"'\" . ').click();\" style=display:inline-block;width:95%;&gt;&lt;summary style=background-color:rgba(0,255,0,0.2);&gt;&lt;a target=objgif id=aobjgif style=text-decoration:none; href=.\/gimp_guillotine_followup.php?getme=gif&gt;Animated GIF (all original slides)&lt;\/a&gt;&lt;\/summary&gt;&lt;br&gt;&lt;iframe name=objgif id=objgif style=\"width:100%;height:900px;\" data-type=\"gif\/mp4\" srcdoc=\"&lt;img type=image\/gif style=width:100%;height:900px; src=data:image\/gif;base64,' . base64_encode(file_get_contents($_SERVER['DOCUMENT_ROOT'] . DIRECTORY_SEPARATOR . 'PHP' . DIRECTORY_SEPARATOR . 'animegif'  . DIRECTORY_SEPARATOR . server_remote_addr() . '.gif')) . '&gt;&lt;\/img&gt;\"&gt;&lt;\/iframe&gt;&lt;\/details&gt;';<br \/>\n       }<br \/>\n       <font color=blue>$pdfabit.=$pdfvb;<\/font><br \/>\n} else if (isset($_GET['andgo'])) {<br \/>\n       <font color=blue>$pdfvb='';<\/font><br \/>\n       $andoneone=\" && 1 == 1\";<br \/>\n       $andtwotwo=\"&lt;input name=andgo value=y type=hidden&gt;&lt;\/input&gt;\";<br \/>\n       <font color=blue>if (isset($_GET['andvgo'])) {<br \/>\n         $andtwotwo.=\"&lt;input name=andvgo value=y type=hidden&gt;&lt;\/input&gt;\";  \/\/ remembered through the navigations because used later to contribute to PHP writing out of webpage content<br \/>\n       }<\/font><br \/>\n       if (file_exists('\/tmp\/' . ggserver_remote_addr() . 'pdftmp.pdf')) {<br \/>\n         $adatam=\"\";<br \/>\n         $pdfabit='&lt;br&gt; or &lt;details onclick=\"document.getElementById(' . \"'\" . 'aobjpdf' . \"'\" . ').click();\" style=display:inline-block;width:95%;&gt;&lt;summary style=background-color:rgba(255,0,0,0.2);&gt;&lt;a target=objpdf id=aobjpdf style=text-decoration:none; href=.\/gimp_guillotine_followup.php?getme=pdf&gt;PDF (all original slides)&lt;\/a&gt;&lt;\/summary&gt;&lt;br&gt;&lt;iframe name=objpdf id=objpdf style=\"width:100%;height:900px;\" data-type=\"application\/pdf\" srcdoc=\"&lt;embed data-type=application\/pdf style=width:100%;height:900px; src=data:application\/pdf;base64,' . base64_encode(file_get_contents('\/tmp\/' . ggserver_remote_addr() . 'pdftmp.pdf')) . '&gt;&lt;\/embed&gt;\"&gt;&lt;\/iframe&gt;&lt;\/details&gt;';<br \/>\n       }<br \/>\n       if (file_exists('\/tmp\/' . ggserver_remote_addr() . 'video.mov')) {<br \/>\n         $pdfabit.='&lt;br&gt; or &lt;details onclick=\"document.getElementById(' . \"'\" . 'aobjvideo' . \"'\" . ').click();\" style=display:inline-block;width:95%;&gt;&lt;summary style=background-color:rgba(255,255,0,0.2);&gt;&lt;a target=objvideo id=aobjvideo style=text-decoration:none; href=.\/gimp_guillotine_followup.php?getme=video&gt;Video (all original slides)&lt;\/a&gt;&lt;\/summary&gt;&lt;br&gt;&lt;iframe name=objvideo id=objvideo style=\"width:100%;height:900px;\" data-type=\"video\/mp4\" srcdoc=\"&lt;video type=video\/mp4 style=width:100%;height:900px;&gt;&lt;source type=video\/mp4 src=data:video\/mp4;base64,' . base64_encode(file_get_contents('\/tmp\/' . ggserver_remote_addr() . 'video.mov')) . '&gt;&lt;\/source&gt;&lt;\/video&gt;\"&gt;&lt;\/iframe&gt;&lt;\/details&gt;';<br \/>\n       }<font color=blue> else if (isset($_GET['andvgo'])) {<br \/>\n         $pdfvb='&lt;div id=divlocalvideo style=display:block;&gt; or &lt;details style=display:inline-block;width:95%;&gt;&lt;summary style=background-color:rgba(255,255,0,0.2);&gt;Video (all original slides shows in another local web server window as well)&lt;\/summary&gt;&lt;video controls&gt;&lt;source type=video\/mp4 src=HTTP:\/\/localhost:8888\/PHP\/animegif\/video.mov&gt;&lt;\/source&gt;&lt;\/video&gt;&lt;\/details&gt;&lt;\/div&gt;';<br \/>\n       } else {<br \/>\n         $pdfvb='&lt;div id=divlocalvideo style=display:none;&gt; or &lt;details style=display:inline-block;width:95%;&gt;&lt;summary style=background-color:rgba(255,255,0,0.2);&gt;Video (all original slides shows in another local web server window as well)&lt;\/summary&gt;&lt;video controls&gt;&lt;source type=video\/mp4 src=HTTP:\/\/localhost:8888\/PHP\/animegif\/video.mov&gt;&lt;\/source&gt;&lt;\/video&gt;&lt;\/details&gt;&lt;\/div&gt;';<br \/>\n       <\/font>}<br \/>\n       if (file_exists($_SERVER['DOCUMENT_ROOT'] . DIRECTORY_SEPARATOR . 'PHP' . DIRECTORY_SEPARATOR . 'animegif'  . DIRECTORY_SEPARATOR . server_remote_addr() . '.gif')) {<br \/>\n         $pdfabit.='&lt;br&gt; or &lt;details onclick=\"document.getElementById(' . \"'\" . 'aobjgif' . \"'\" . ').click();\" style=display:inline-block;width:95%;&gt;&lt;summary style=background-color:rgba(0,255,0,0.2);&gt;&lt;a target=objgif id=aobjgif style=text-decoration:none; href=.\/gimp_guillotine_followup.php?getme=gif&gt;Animated GIF (all original slides)&lt;\/a&gt;&lt;\/summary&gt;&lt;br&gt;&lt;iframe name=objgif id=objgif style=\"width:100%;height:900px;\" data-type=\"gif\/mp4\" srcdoc=\"&lt;img type=image\/gif style=width:100%;height:900px; src=data:image\/gif;base64,' . base64_encode(file_get_contents($_SERVER['DOCUMENT_ROOT'] . DIRECTORY_SEPARATOR . 'PHP' . DIRECTORY_SEPARATOR . 'animegif'  . DIRECTORY_SEPARATOR . server_remote_addr() . '.gif')) . '&gt;&lt;\/img&gt;\"&gt;&lt;\/iframe&gt;&lt;\/details&gt;';<br \/>\n       }<br \/>\n       <font color=blue>$pdfabit.=$pdfvb;<\/font><br \/>\n}<br \/>\n<\/code><br \/>\n?&gt;\n<\/td>\n<\/tr>\n<\/table>\n<p> &#8230; trying to help create a couple more woooooorrrrrrllllldddd videos!<\/p>\n<p><!--p>You can also see this play out at WordPress 4.1.1's <a target=_blank  href='\/\/www.rjmprogramming.com.au\/ITblog\/gimp-guillotine-image-file-browse-intranet-video-tutorial\/'>Gimp Guillotine Image File Browse Intranet Video Tutorial<\/a>.<\/p-->\n<hr>\n<p id='ggifbagift'>Previous relevant <a target=_blank title='Gimp Guillotine Image File Browse Animated GIF Tutorial' href='\/\/www.rjmprogramming.com.au\/ITblog\/gimp-guillotine-image-file-browse-animated-gif-tutorial\/'>Gimp Guillotine Image File Browse Animated GIF Tutorial<\/a> is shown below.<\/p>\n<div style=\"width: 230px\" class=\"wp-caption alignnone\"><a target=_blank href=\"https:\/\/www.rjmprogramming.com.au\/PHP\/gimp_guillotine_followup.php\"><img decoding=\"async\" style=\"border: 15px solid pink;\" alt=\"Gimp Guillotine Image File Browse Animated GIF Tutorial\" src=\"http:\/\/www.rjmprogramming.com.au\/PHP\/gimp_guillotine_followup_unique_animated_gif.jpg\" title=\"Gimp Guillotine Image File Browse Animated GIF Tutorial\"  style=\"float:left;\" \/><\/a><p class=\"wp-caption-text\">Gimp Guillotine Image File Browse Animated GIF Tutorial<\/p><\/div>\n<p>Onto yesterday&#8217;s <a title='Gimp Guillotine Image File Browse Media Tutorial' href='#ggifbmt'>Gimp Guillotine Image File Browse Media Tutorial<\/a> media functionality additions of &#8230;<\/p>\n<ul>\n<li>slideshow, PDF, video (maybe) &#8230; today we wanted to add &#8230;<\/li>\n<li>animated GIF<\/li>\n<\/ul>\n<p> &#8230; into the mix.  Considering <a target=_blank href=\"http:\/\/www.rjmprogramming.com.au\/PHP\/Geographicals\/diff.php?one=http:\/\/www.rjmprogramming.com.au\/PHP\/gimp_guillotine_followup.php---------------------------GETME\">our changed<\/a> <a target=_blank href=\"http:\/\/www.rjmprogramming.com.au\/PHP\/gimp_guillotine_followup.php---------------------------GETME\">gimp_guillotine_followup.php<\/a> <a target=_blank href=\"https:\/\/www.rjmprogramming.com.au\/PHP\/gimp_guillotine_followup.php\" title=\"Click picture\">Gimp Guillotine Follow Up PHP web application<\/a> is supervising <a target=_blank href=\"http:\/\/www.rjmprogramming.com.au\/PHP\/Geographicals\/diff.php?one=http:\/\/www.rjmprogramming.com.au\/PHP\/animegif\/tutorial_to_animated_gif.php-----------------------------------------------GETME\">our changed PHP Animated GIF creator<\/a> <a target=_blank href=\"http:\/\/www.rjmprogramming.com.au\/PHP\/animegif\/tutorial_to_animated_gif.php-----------------------------------------------GETME\">tutorial_to_animated_gif.php<\/a>, how hard can that be?  In our defence, it took us a day to get around how to have that &#8230;<\/p>\n<p><code><br \/>\n    top.location.href=cbggis.split('?')[0].split('#')[0] + '?filespec=\/tmp\/\" . ggserver_remote_addr() . \"tmp*.*&andgo=y';<br \/>\n<\/code><\/p>\n<p> &#8230; Javascript codeline not put a stop to our ambition, clobbering any further inhouse work that the child PHP Animated GIF Creator web application does creating any animated GIFs (which navigates away in order to do this).  But the <font size=1>(albeit pretty obvious, but neat)<\/font> idea did finally dawn on us, enabling us to have our cake and eat it too, several seconds ahead of the execution of the Javascript codeline above, timing &#8230;<\/p>\n<p><code><br \/>\n  document.getElementById('myform').target='zzlocit';<br \/>\n  document.getElementById('mysubmit').click();<br \/>\n<\/code><\/p>\n<p> &#8230; to be setting the navigation target to be a PHP helper webpage existent iframe element named &#8216;zzlocit&#8217; be mapped to the form&#8217;s target attribute and clicking that form&#8217;s submit button programmatically to create the required animated GIF before we navigate away (with no clobbering or other ancillary violence).<\/p>\n<p>Along the way, we personalized, via a user&#8217;s IP address and web browser type, the names of media files so that it is less likely any user will clobber any other user&#8217;s work, nor see work of another user, when using the web application.<\/p>\n<p><!--p>You can also see this play out at WordPress 4.1.1's <a target=_blank  href='\/\/www.rjmprogramming.com.au\/ITblog\/gimp-guillotine-image-file-browse-animated-gif-tutorial\/'>Gimp Guillotine Image File Browse Animated GIF Tutorial<\/a>.<\/p-->\n<hr>\n<p id='ggifbmt'>Previous relevant <a target=_blank title='Gimp Guillotine Image File Browse Media Tutorial' href='\/\/www.rjmprogramming.com.au\/ITblog\/gimp-guillotine-image-file-browse-media-tutorial\/'>Gimp Guillotine Image File Browse Media Tutorial<\/a> is shown below.<\/p>\n<div style=\"width: 230px\" class=\"wp-caption alignnone\"><a target=_blank href=\"https:\/\/www.rjmprogramming.com.au\/PHP\/gimp_guillotine_followup.php\"><img decoding=\"async\" style=\"border: 15px solid pink;\" alt=\"Gimp Guillotine Image File Browse Media Tutorial\" src=\"http:\/\/www.rjmprogramming.com.au\/PHP\/gimp_guillotine_followup_slideshow_pdf_video.jpg\" title=\"Gimp Guillotine Image File Browse Media Tutorial\"  style=\"float:left;\" \/><\/a><p class=\"wp-caption-text\">Gimp Guillotine Image File Browse Media Tutorial<\/p><\/div>\n<p>Yesterday&#8217;s <a title='Gimp Guillotine Image File Browse Tutorial' href='#ggifbt'>Gimp Guillotine Image File Browse Tutorial<\/a> introduced file browsing, of local files, as an input data possibility with our inhouse Gimp Guillotine Follow Up web application.<\/p>\n<p>That opens the door to other media output possibilities, those being, at least for today &#8230;<\/p>\n<ul>\n<li>slideshow (via a button) or non-mobile slideshow (via onmouseover hover over the &#8220;a&#8221; slide link(s))<\/li>\n<li>PDF via the great <a target=_blank href='http:\/\/imagemagick.org\/index.php'>ImageMagick<\/a>&#8216;s command line &#8220;convert&#8221; functionality &#8230;<\/li>\n<li>video on local web server if you heed the advice of <a target=_blank title='Animated GIF Creator Video Revisit Tutorial' href='https:\/\/www.rjmprogramming.com.au\/ITblog\/animated-gif-creator-video-revisit-tutorial\/'>Animated GIF Creator Video Revisit Tutorial<\/a>&#8216;s (albeit biassed towards macOS and <a target=_blank title='MAMP' href='http:\/\/www.mamp.info'>MAMP<\/a>) local Apache web server usage advice as per &#8230;<br \/>\n&nbsp;<\/p>\n<blockquote cite='https:\/\/www.rjmprogramming.com.au\/ITblog\/animated-gif-creator-video-revisit-tutorial\/'>\n<ol>\n<li>in that public RJM Programming mode of use above &#8230; but even better can be &#8230;<\/li>\n<li>download relevant code to macOS MAMP local web server places off \/Applications\/MAMP\/htdocs\/ $_SERVER[&#8216;DOCUMENT_ROOT&#8217;] places &#8230;\n<ul>\n<li><a target=_blank title='GIFEncoder.class.php' href='https:\/\/gist.github.com\/Xeoncross\/ecccb07454d0b69d9eba'>GIFEncoder.class.php<\/a> &#8230; thanks &#8230; to  to &#8220;PHP\/animegif\/&#8221;<\/li>\n<li><a target=_blank href=\"http:\/\/www.rjmprogramming.com.au\/PHP\/animegif\/tutorial_to_animated_gif.php----------------------------------------------GETME\">tutorial_to_animated_gif.php<\/a> to &#8220;PHP\/animegif\/&#8221;<\/li>\n<li><a target=_blank href=\"http:\/\/www.rjmprogramming.com.au\/PHP\/animegif\/animegif.php_GETME\">animegif.php<\/a> to &#8220;PHP\/animegif\/&#8221;<\/li>\n<li><a target=_blank href=\"http:\/\/www.rjmprogramming.com.au\/PHP\/animegif\/haiku_animated_gif.html--------GETME\">haiku_animated_gif.html<\/a> to &#8220;PHP\/animegif\/&#8221;<\/li>\n<li><a target=_blank href=\"http:\/\/www.rjmprogramming.com.au\/macos_ffmpeg_convert.php---------GETME\">macos_ffmpeg_convert.php<\/a>  to $_SERVER[&#8216;DOCUMENT_ROOT&#8217;]<\/li>\n<li><a target=_blank href=\"http:\/\/www.rjmprogramming.com.au\/macos_textutil_convert.php------GETME\">macos_textutil_convert.php<\/a>  to $_SERVER[&#8216;DOCUMENT_ROOT&#8217;]<\/li>\n<li><a target=_blank href=\"http:\/\/www.rjmprogramming.com.au\/macos_say_record.php-------------------GETME\">macos_say_record.php<\/a>  to $_SERVER[&#8216;DOCUMENT_ROOT&#8217;]<\/li>\n<li><a target=_blank href=\"http:\/\/www.rjmprogramming.com.au\/HTMLCSS\/client_browsing.html------------------GETME\">client_browsing.htm<\/a> to &#8220;HTMLCSS\/&#8221;<\/li>\n<li><a target=_blank href=\"http:\/\/www.rjmprogramming.com.au\/HTMLCSS\/emailhtml.php-----------------------GETME\">emailhtml.php<\/a> to &#8220;HTMLCSS\/&#8221;<\/li>\n<li><a target=_blank href=\"http:\/\/www.rjmprogramming.com.au\/PHP\/read_exif_off_image_rotate.php------GETME\">read_exif_off_image_rotate.php<\/a> to &#8220;PHP\/&#8221;<\/li>\n<\/ul>\n<p> &#8230; and check the code for the validity of any ImageMagick paths &#8230; and if not all these conditions, simulate the same and cobble it together in the code\n<\/li>\n<\/ol>\n<p><\/p>\n<p> &#8230; one reason being that we do not want to install the wonderful ffmpeg on the RJM Programming domain, but, in macOS, here with MAMP, we are quite happy to live with the Homebrew install &#8230;<\/p>\n<p>\n<code><br \/>\nbrew install ffmpeg<br \/>\n<\/code><br \/>\n<\/p>\n<p> &#8230; to open a whole new woooooorrrrlllllddd of video creation opportunities using this MAMP local web URL &#8230;<\/p>\n<\/blockquote>\n<p>&nbsp;<br \/>\n &#8230; and now add &#8230;<br \/>\n&nbsp;<br \/>\n<code><br \/>\n(<a target=_blank href=\"http:\/\/www.rjmprogramming.com.au\/PHP\/Geographicals\/diff.php?one=http:\/\/www.rjmprogramming.com.au\/PHP\/gimp_guillotine_followup.php--------------------------GETME\">a changed<\/a>) <a target=_blank href=\"http:\/\/www.rjmprogramming.com.au\/PHP\/gimp_guillotine_followup.php--------------------------GETME\">gimp_guillotine_followup.php<\/a> to \"PHP\/\" (supervising <a target=_blank href=\"http:\/\/www.rjmprogramming.com.au\/PHP\/Geographicals\/diff.php?one=http:\/\/www.rjmprogramming.com.au\/PHP\/animegif\/tutorial_to_animated_gif.php----------------------------------------------GETME\">a changed PHP Animated GIF creator<\/a>)<br \/>\n<\/code><br \/>\n &#8230; to end up, for video via image file browsing and onto (the brilliant)  <a target=_blank title=ffmpeg href='https:\/\/www.ffmpeg.org\/'>ffmpeg<\/a> conversions, a macOS <a target=_blank title='MAMP' href='http:\/\/www.mamp.info'>MAMP<\/a> URL might go &#8230;<br \/>\n<code>HTTP:\/\/localhost:8888\/PHP\/gimp_guillotine_followup.php<\/code>\n<\/li>\n<\/ul>\n<p>It can be hard achieving cross-domain PDF presentations in the &#8220;client only&#8221; wooooooooorrrrrrrllllllllldddd, so <font color=blue>we took advantage<\/font> of the PHP &#8220;server&#8221; woooooooooorrrrrrrrllllllllllddddd&#8217;s &#8230;<\/p>\n<p>&lt;?php<br \/>\n<code><br \/>\nif (isset($_POST['getme'])) {<br \/>\n       if (file_exists('\/tmp\/ggpdftmp.pdf') && $_POST['getme'] == 'pdf') {<br \/>\n          <font color=blue>header(\"Content-type:application\/pdf\");<br \/>\n          echo file_get_contents('\/tmp\/ggpdftmp.pdf');<\/font><br \/>\n       }<br \/>\n       if (file_exists('\/tmp\/ggvideo.mov') && $_POST['getme'] == 'video') {<br \/>\n         echo '&lt;html&gt;&lt;body&gt;&lt;video style=width:100%;height:900px; type=video\/mp4 controls&gt;&lt;source type=video\/mp4 src=data:video\/mp4;base64,' . base64_encode(file_get_contents('\/tmp\/ggvideo.mov')) . '&gt;&lt;\/source&gt;&lt;\/video&gt;&lt;\/body&gt;&lt;\/html&gt;';<br \/>\n       }<br \/>\n  exit;<br \/>\n} else if (isset($_GET['getme'])) {<br \/>\n       if (file_exists('\/tmp\/ggpdftmp.pdf') && $_GET['getme'] == 'pdf') {<br \/>\n         <font color=blue>header(\"Content-type:application\/pdf\");<br \/>\n         echo file_get_contents('\/tmp\/ggpdftmp.pdf');<\/font><br \/>\n       }<br \/>\n       if (file_exists('\/tmp\/ggvideo.mov') && $_GET['getme'] == 'video') {<br \/>\n         echo '&lt;html&gt;&lt;body&gt;&lt;video style=width:100%;height:900px; type=video\/mp4 controls&gt;&lt;source type=video\/mp4 src=data:video\/mp4;base64,' . base64_encode(file_get_contents('\/tmp\/ggvideo.mov')) . '&gt;&lt;\/source&gt;&lt;\/video&gt;&lt;\/body&gt;&lt;\/html&gt;';<br \/>\n       }<br \/>\n  exit;<br \/>\n}<br \/>\n<\/code><br \/>\n?&gt;<\/p>\n<p> &#8230; approach, getting better results cross-domain.<\/p>\n<p>Yes, let&#8217;s face it, and let&#8217;s narrow it down, without code changes, to macOS or Mac OS X or Linux or Unix operating system underpinnings, given the <i>\/tmp\/<\/i> hardcodings we have going, so far, is the environment best suited to this code.<\/p>\n<p><!--p>You can also see this play out at WordPress 4.1.1's <a target=_blank  href='\/\/www.rjmprogramming.com.au\/ITblog\/gimp-guillotine-image-file-browse-media-tutorial\/'>Gimp Guillotine Image File Browse Media Tutorial<\/a>.<\/p-->\n<hr>\n<p id='ggifbt'>Previous relevant <a target=_blank title='Gimp Guillotine Image File Browse Tutorial' href='\/\/www.rjmprogramming.com.au\/ITblog\/gimp-guillotine-image-file-browse-tutorial\/'>Gimp Guillotine Image File Browse Tutorial<\/a> is shown below.<\/p>\n<div style=\"width: 230px\" class=\"wp-caption alignnone\"><a target=_blank href=\"https:\/\/www.rjmprogramming.com.au\/PHP\/gimp_guillotine_followup.php\"><img decoding=\"async\" style=\"border: 15px solid pink;\" alt=\"Gimp Guillotine Image File Browse Tutorial\" src=\"http:\/\/www.rjmprogramming.com.au\/PHP\/gimp_guillotine_followup_browse.jpg\" title=\"Gimp Guillotine Image File Browse Tutorial\"  style=\"float:left;\" \/><\/a><p class=\"wp-caption-text\">Gimp Guillotine Image File Browse Tutorial<\/p><\/div>\n<p>The input data arrangements for our inhouse &#8220;Gimp Guillotine Followup&#8221; PHP web application of <a title='Gimp Guillotine Marquee Placeholder Tutorial' href='#ggmpt'>Gimp Guillotine Marquee Placeholder Tutorial<\/a> involved &#8230;<\/p>\n<ul>\n<li>relative or absolute image URL(s) &#8230; pretty unwieldy and not inviting for so many users &#8230; but today we extend functionality and allow for &#8230;<\/li>\n<li>image file browsing &#8230; via the wonderful <a target=_blank title='Great link' href='http:\/\/www.html5rocks.com\/en\/tutorials\/file\/dndfiles\/'>File API<\/a> (though all that is more or less set in stone as distinct from the integrations to get to use it)<\/li>\n<\/ul>\n<p>You are presented with a new browse button, from which you can select image files that <a target=_blank href='http:\/\/www.rjmprogramming.com.au\/PHP\/Geographicals\/diff.php?one=http:\/\/www.rjmprogramming.com.au\/PHP\/gimp_guillotine_followup.php-------------------------GETME' title='gimp_guillotine_followup.php'>our changed<\/a> <a target=_blank href='http:\/\/www.rjmprogramming.com.au\/PHP\/gimp_guillotine_followup.php-------------------------GETME' title='gimp_guillotine_followup.php'>gimp_guillotine_followup.php<\/a> <a target=_blank href=\"https:\/\/www.rjmprogramming.com.au\/PHP\/gimp_guillotine_followup.php\" title=\"Click picture\">PHP Gimp Followup web application<\/a> which will now integrate with <a target=_blank href=\"http:\/\/www.rjmprogramming.com.au\/PHP\/Geographicals\/diff.php?one=http:\/\/www.rjmprogramming.com.au\/PHP\/animegif\/tutorial_to_animated_gif.php---------------------------------------------GETME\">the changed<\/a> <a target=_blank href=\"http:\/\/www.rjmprogramming.com.au\/PHP\/animegif\/tutorial_to_animated_gif.php---------------------------------------------GETME\">tutorial_to_animated_gif.php<\/a> inhouse <a target=_blank href='http:\/\/www.rjmprogramming.com.au\/PHP\/animegif\/tutorial_to_animated_gif.php' title='Animated GIF Creator'>PHP Animated GIF Creator<\/a> web application <font color=blue>to achieve our aims<\/font> <font size=1>(where <i>$ru=urlencode(explode(&#8216;#&#8217;, explode(&#8216;?&#8217;, $_SERVER[&#8216;REQUEST_URI&#8217;])[0])[0]);<\/i> \/\/ in work below)<\/font> &#8230;<\/p>\n<p><code><br \/>\n<font color=blue>&lt;table&gt;&lt;tr&gt;&lt;td&gt;<\/font><br \/>\n&lt;h3&gt;RJM Programming - August, 2018&lt;\/h3&gt;\" . $erroris . \"<br \/>\n&lt;h4&gt;Input Images&lt;\/h4&gt;<font color=blue>&lt;\/td&gt;&lt;td style='height:100px;'&gt;&lt;iframe id=ggif style='display:inline-block;height:100%;width:95px;' frameborder=0 src='\/PHP\/animegif\/tutorial_to_animated_gif.php?calledbygg=\" . $ru . \"'&gt;&lt;\/iframe&gt;&lt;\/td&gt;&lt;\/tr&gt;&lt;\/table&gt;<\/font><br \/>\n<\/code><\/p>\n<p> &#8230; that &#8220;calledbygg&#8221; used extensively by the Javascript and PHP logic in the <a target=_blank href='http:\/\/www.rjmprogramming.com.au\/PHP\/animegif\/tutorial_to_animated_gif.php' title='Animated GIF Creator'>PHP Animated GIF Creator<\/a> web application integrations.<\/p>\n<p>Of interest, too, regarding the data storage arrangements for these integrations &#8230;.<\/p>\n<ul>\n<li>we use <i>\/tmp\/<\/i> folders to store <i>ggtmp*.*<\/i> image files &#8230; and so &#8230;<\/li>\n<li>we set up the scenario where GET argument URLs <font color=blue>containing<\/font> &#8230;<br \/>\n<code>HTTP:\/\/www.rjmprogramming.com.au\/PHP\/gimp_guillotine_followup.php<font color=blue>?filespec=\/tmp\/ggtmp*.*&andgo=y<\/font><\/code><br \/>\n &#8230; for <a target=_blank href=\"https:\/\/www.rjmprogramming.com.au\/PHP\/gimp_guillotine_followup.php\" title=\"Click picture\">PHP Gimp Followup web application<\/a> usage can be called <font color=olive>by the Animated GIF Creator child<\/font> to climb back up to the web browser address bar for a restart, once the <i>\/tmp\/<\/i> files are created and in place &#8230;<\/li>\n<li>data URIs are used to get back to HTML img &#8220;src&#8221; attribute friendliness<font size=1>\/universality<\/font> via <a target=_blank href=\"https:\/\/www.rjmprogramming.com.au\/PHP\/gimp_guillotine_followup.php\" title=\"Click picture\">PHP Gimp Followup web application<\/a>&#8216;s PHP &#8230;<br \/>\n&lt;?php<br \/>\n<code><br \/>\n    function datauriit($infn) {<br \/>\n      if (strpos((\"~\" . $infn), \"~\/tmp\/\") !== false) {<br \/>\n       if (file_exists($infn)) {<br \/>\n        return 'data:image\/' . str_replace(\"jpg\",\"jpeg\",strtolower(explode(\".\", $infn)[-1 + sizeof(explode(\".\", $infn))])) . ';base64,' . base64_encode(file_get_contents($infn));<br \/>\n       }<br \/>\n      }<br \/>\n      return $infn;<br \/>\n    }<br \/>\n<\/code><br \/>\n?&gt;\n<\/li>\n<li><a target=_blank title='Ajax information from Wikipedia ... thanks' href='http:\/\/en.wikipedia.org\/wiki\/Ajax_%28programming%29'>Ajax<\/a>\/<a target=_blank title='FormData object information' href='https:\/\/developer.mozilla.org\/en-US\/docs\/Web\/API\/FormData'>FormData<\/a> &#8220;midair&#8221; feeling &#8220;self-calling&#8221; is used to create the <i>\/tmp\/<\/i> files via <a target=_blank href='http:\/\/www.rjmprogramming.com.au\/PHP\/animegif\/tutorial_to_animated_gif.php' title='Animated GIF Creator'>PHP Animated GIF Creator<\/a> web application&#8217;s PHP &#8230;<br \/>\n&lt;?php<br \/>\n<code><br \/>\nif (isset($_POST['justuntmpthis']) && !isset($_POST['justtmpthis'])) {<br \/>\n  $fsuff=1;<br \/>\n  $ffsuff=1;<br \/>\n  while ($ffsuff == $fsuff) {<br \/>\n  $ffsuff++;<br \/>\n  foreach (glob('\/tmp\/ggtmp' . $fsuff . '.*') as $ggfilename) {<br \/>\n       unlink($ggfilename);<br \/>\n       $fsuff=$ffsuff;<br \/>\n  }<br \/>\n  }<br \/>\n  exit;<br \/>\n}<br \/>\n<br \/>\nif (isset($_POST['justtmpthis'])) {<br \/>\nif (isset($_POST['justuntmpthis'])) {<br \/>\n  $fsuff=1;<br \/>\n  $ffsuff=1;<br \/>\n  while ($ffsuff == $fsuff) {<br \/>\n  $ffsuff++;<br \/>\n  foreach (glob('\/tmp\/ggtmp' . $fsuff . '.*') as $ggfilename) {<br \/>\n       unlink($ggfilename);<br \/>\n       $fsuff=$ffsuff;<br \/>\n  }<br \/>\n  }<br \/>\n}<br \/>\n  $fsuff=1;<br \/>\n  $ffsuff=1;<br \/>\n  while ($ffsuff == $fsuff) {<br \/>\n  $ffsuff++;<br \/>\n  foreach (glob('\/tmp\/ggtmp' . $fsuff . '.*') as $ggfilename) {<br \/>\n       $fsuff=$ffsuff;<br \/>\n  }<br \/>\n  }<br \/>\n  $datain=str_replace(' ','+',urldecode($_POST['justtmpthis']));<br \/>\n  if (strpos($datain, 'data:') !== false) {<br \/>\n    file_put_contents('\/tmp\/ggtmp' . $fsuff . '.' . explode(';',explode('\/',  $datain )[1])[0], base64_decode(explode(';base64,',  $datain )[1] ));<br \/>\n  } else if (strpos(strtolower($datain), 'http') !== false) {<br \/>\n    file_put_contents('\/tmp\/ggtmp' . $fsuff . '.' . explode('#',explode('?',explode('.', $datain)[-1 + sizeof(explode('.', $datain))])[0])[0], file_get_contents($datain));<br \/>\n  } else if (trim($datain) != '') {<br \/>\n    copy($datain, '\/tmp\/ggtmp' . $fsuff . '.' . explode('#',explode('?',explode('.', $datain)[-1 + sizeof(explode('.', $datain))])[0])[0]);<br \/>\n  }<br \/>\n  exit;<br \/>\n}<br \/>\n<br \/>\n$cbgg=\" align='center'&gt;Tutorial Slideshow to Animated GIF \";<br \/>\n$cbor=\" ... or ... \";<br \/>\nif (isset($_GET['calledbygg'])) {  $cbgg=\"&gt;\"; $cbor=\"\"; }<br \/>\n<\/code><br \/>\n?&gt;<br \/>\n &#8230; and Javascript &#8230;<br \/>\n&lt;?php echo &#8221;<br \/>\n<code><br \/>\nvar cbggis=location.search.split('called' + 'bygg=')[1] ? decodeURIComponent(location.search.split('called' + 'bygg=')[1]).split('&')[0] : '';<br \/>\nvar ggvals=[], ggvalssuffix='', ggvalslen=0, ggvalgoes=0;<br \/>\n<br \/>\nfunction maybeggmore() { \/\/tval, tid, tis) {<br \/>\n  if (document.URL.indexOf('calledbygg=') != -1 && document.getElementById('slideshow' + ggvalssuffix).value.indexOf('data:') == 0 && ggvals.length == ggvalslen) {<br \/>\n    ggvals.push(document.getElementById('slideshow' + ggvalssuffix).value);<br \/>\n    if (ggvalssuffix == '') { ggvalssuffix='2'; } else { ggvalssuffix='' + eval(1 + eval('' + ggvalssuffix)); }<br \/>\n    \/\/alert(ggvals[ggvalslen]); \/\/tval + ' ' + tid + ' ' + tis.id);<br \/>\n    ggvalslen=eval('' + ggvals.length);<br \/>\n    ggvalgoes=0;<br \/>\n  iizhr = new XMLHttpRequest();<br \/>\n  iizform=new FormData();<br \/>\n  if (ggvalslen == 1) {<br \/>\n    iizform.append('justuntmpthis', 'y');<br \/>\n    if (parent.document.getElementById('ggif')) {<br \/>\n      <i>parent.document.body.style.cursor='progress';<\/i><br \/>\n    }<br \/>\n  }<br \/>\n  iizform.append('justtmpthis', ggvals[eval(-1 + ggvalslen)]);<br \/>\n  iizhr.open('post', '.\/tutorial_to_animated_gif.php?xxx=' + Math.floor(Math.random() * 198756432), true);<br \/>\n  iizhr.send(iizform);<br \/>\n    setTimeout(maybeggmore, 5000);<br \/>\n  } else if (document.URL.indexOf('calledbygg=') != -1 && document.getElementById('slideshow' + ggvalssuffix).value.toLowerCase().indexOf('http') == 0 && ggvals.length == ggvalslen) {<br \/>\n    ggvals.push(document.getElementById('slideshow' + ggvalssuffix).value);<br \/>\n    if (ggvalssuffix == '') { ggvalssuffix='2'; } else { ggvalssuffix='' + eval(1 + eval('' + ggvalssuffix)); }<br \/>\n    ggvalgoes=0;<br \/>\n    \/\/alert('2:' + ggvals[ggvalslen]); \/\/tval + ' ' + tid + ' ' + tis.id);<br \/>\n    ggvalslen=eval('' + ggvals.length);<br \/>\n  iizhr = new XMLHttpRequest();<br \/>\n  iizform=new FormData();<br \/>\n  if (ggvalslen == 1) {<br \/>\n    iizform.append('justuntmpthis', 'y');<br \/>\n    if (parent.document.getElementById('ggif')) {<br \/>\n      <i>parent.document.body.style.cursor='progress';<\/i><br \/>\n    }<br \/>\n  }<br \/>\n  iizform.append('justtmpthis', ggvals[eval(-1 + ggvalslen)]);<br \/>\n  iizhr.open('post', '.\/tutorial_to_animated_gif.php?xxx=' + Math.floor(Math.random() * 198756432), true);<br \/>\n  iizhr.send(iizform);<br \/>\n    setTimeout(maybeggmore, 5000);<br \/>\n  } else if (ggvalgoes &gt;= 12 && ggvalslen &gt; 0) {<br \/>\n    <font color=olive>top.location.href=cbggis.split('?')[0].split('#')[0] + '?filespec=\/tmp\/ggtmp*.*&andgo=y';<\/font><br \/>\n  } else {<br \/>\n    ggvalgoes++;<br \/>\n    setTimeout(maybeggmore, 5000);<br \/>\n  }<br \/>\n}<br \/>\n<br \/>\nif (document.URL.indexOf('calledbygg') != -1) { setTimeout(maybeggmore, 5000); }<br \/>\n<\/code><br \/>\n&#8220;; ?&gt;\n<\/li>\n<\/ul>\n<p> &#8230; along the way setting the caller&#8217;s <font size=1><i>parent.document.body.style.cursor=&#8217;progress&#8217;;<\/i><\/font> so as to forewarn the user the process may take some time.<\/p>\n<p><!--p>You can also see this play out at WordPress 4.1.1's <a target=_blank  href='\/\/www.rjmprogramming.com.au\/ITblog\/gimp-guillotine-image-file-browse-tutorial\/'>Gimp Guillotine Image File Browse Tutorial<\/a>.<\/p-->\n<hr>\n<p id='ggmpt'>Previous relevant <a target=_blank title='Gimp Guillotine Marquee Placeholder Tutorial' href='\/\/www.rjmprogramming.com.au\/ITblog\/gimp-guillotine-marquee-placeholder-tutorial\/'>Gimp Guillotine Marquee Placeholder Tutorial<\/a> is shown below.<\/p>\n<div style=\"width: 230px\" class=\"wp-caption alignnone\"><a target=_blank href=\"https:\/\/www.rjmprogramming.com.au\/PHP\/gimp_guillotine_followup.php\"><img decoding=\"async\" style=\"border: 15px solid pink;\" alt=\"Gimp Guillotine Marquee Placeholder Tutorial\" src=\"http:\/\/www.rjmprogramming.com.au\/PHP\/gimp_guillotine_marquee_placeholder.jpg\" title=\"Gimp Guillotine Marquee Placeholder Tutorial\"  style=\"float:left;\" \/><\/a><p class=\"wp-caption-text\">Gimp Guillotine Marquee Placeholder Tutorial<\/p><\/div>\n<p>The recent <a target=_blank title='Marquee Placeholder' href='https:\/\/www.rjmprogramming.com.au\/ITblog\/marquee-placeholder-primer-tutorial\/'>&#8220;Marquee Placeholder&#8221;<\/a> ideas have hit a &#8220;usefulness&#8221; mark, involving it with the &#8220;Gimp Guillotine Followup&#8221; web application of <a title='Gimp Guillotine Local Datetime Token Subject Tutorial' href='#ggldtst'>Gimp Guillotine Local Datetime Token Subject Tutorial<\/a>.<\/p>\n<p>This &#8220;Marquee Placeholder&#8221; packs a puch, and over mobile platforms too, as an explainer of a &#8220;wordy&#8221; requirement.  And the &#8220;Gimp Guillotine Followup&#8221; web application&#8217;s use of its major textbox is quite an involved th<strike>a<\/strike>ing, because it is asking you to conjoin &#8230;<\/p>\n<ul>\n<li>a desktop application&#8217;s (ie. Gimp&#8217;s) output &#8230; to &#8230;<\/li>\n<li>an online &#8220;Gimp Guillotine Followup&#8221; web application&#8217;s input<\/li>\n<\/ul>\n<p> &#8230; all feasible and possible via &#8220;URL definition&#8221; or &#8220;upload, then download&#8221; methodologies.  Onto previous textbox blurb (within the placeholder attribute) here we add (ie. prefix) &#8230;<\/p>\n<blockquote><p>\nOur suggestion here is .\/mondrian-*.*g*\n<\/p><\/blockquote>\n<p> &#8230; because we now feel we can, as it is probable an interested user will want to get the most out of <a target=_blank href='http:\/\/www.rjmprogramming.com.au\/PHP\/Geographicals\/diff.php?one=http:\/\/www.rjmprogramming.com.au\/PHP\/gimp_guillotine_followup.php------------------------GETME' title='gimp_guillotine_followup.php'>the changed<\/a> <a target=_blank href='http:\/\/www.rjmprogramming.com.au\/PHP\/gimp_guillotine_followup.php------------------------GETME' title='gimp_guillotine_followup.php'>gimp_guillotine_followup.php<\/a> that you can try out at this <a target=_blank href=\"https:\/\/www.rjmprogramming.com.au\/PHP\/gimp_guillotine_followup.php\" title=\"Click picture\">live run<\/a> link.<\/li>\n<p>To add in the &#8220;Marquee Placeholder&#8221; we add Javascripting &#8220;on the fly&#8221; because we don&#8217;t want any mixing of code with email attachment HTML, as per, within document.body &#8220;onload&#8221; event logic &#8230;<\/p>\n<p><code><br \/>\n      var tag = document.createElement('script');<br \/>\n      tag.type='text\/javascript';<br \/>\n      tag.src='\/marquee_placeholder.js';<br \/>\n      document.head.appendChild(tag);<br \/>\n<\/code><\/p>\n<p>Cute, huh?!<\/p>\n<p><b><i>Stop Press<\/i><\/b><\/p>\n<p>We found improvement performances &#8220;throttling down&#8221; <a target=_blank href=\"http:\/\/www.rjmprogramming.com.au\/PHP\/Geographicals\/diff.php?one=http:\/\/www.rjmprogramming.com.au\/marquee_placeholder.js-GETME\" title=\"marquee_placeholder.js\">the changed external Javascript<\/a> <a target=_blank href=\"http:\/\/www.rjmprogramming.com.au\/marquee_placeholder.js-GETME\" title=\"marquee_placeholder.js\">marquee_placeholder.js<\/a>&#8216;s involvement once the textbox value is being actively entered by the user.<\/p>\n<p><!--p>You can also see this play out at WordPress 4.1.1's <a target=_blank  href='\/\/www.rjmprogramming.com.au\/ITblog\/gimp-guillotine-marquee-placeholder-tutorial\/'>Gimp Guillotine Marquee Placeholder Tutorial<\/a>.<\/p-->\n<hr>\n<p id='ggldtst'>Previous relevant <a target=_blank title='Gimp Guillotine Local Datetime Token Subject Tutorial' href='\/\/www.rjmprogramming.com.au\/ITblog\/gimp-guillotine-local-datetime-token-subject-tutorial\/'>Gimp Guillotine Local Datetime Token Subject Tutorial<\/a> is shown below.<\/p>\n<div style=\"width: 230px\" class=\"wp-caption alignnone\"><a target=_blank href=\"https:\/\/www.rjmprogramming.com.au\/PHP\/gimp_guillotine_followup.php\"><img decoding=\"async\" style=\"border: 15px solid pink;\" alt=\"Gimp Guillotine Local Datetime Token Subject Tutorial\" src=\"http:\/\/www.rjmprogramming.com.au\/PHP\/gimp_guillotine_followup_addtoform.jpg\" title=\"Gimp Guillotine Local Datetime Token Subject Tutorial\"  style=\"float:left;\" \/><\/a><p class=\"wp-caption-text\">Gimp Guillotine Local Datetime Token Subject Tutorial<\/p><\/div>\n<p>Let&#8217;s combine work of &#8230;<\/p>\n<ul>\n<li>the recent <a target=_blank title='Gimp Guillotine Token Subject Tutorial' href='\/\/www.rjmprogramming.com.au\/ITblog\/gimp-guillotine-token-subject-tutorial\/'>Gimp Guillotine Token Subject Tutorial<\/a> &#8230; with &#8230;<\/li>\n<li>the recent <a href='#cslidet' title='Colour Systems Localized Internationalized Date Emails Tutorial'>Colour Systems Localized Internationalized Date Emails Tutorial<\/a> &#8230; and its promise &#8230;<br \/>\n<blockquote cite='https:\/\/www.rjmprogramming.com.au\/ITblog\/colour-systems-localized-internationalized-date-emails-tutorial\/'><p>\nwe saw this integration as a \u201ctest guinea pig\u201d going onto \u201cgenericization afterwards\u201d case\n<\/p><\/blockquote>\n<\/li>\n<\/ul>\n<p> &#8230; to try to honour the &#8220;test guinea pig&#8221; with a bit of combing, and a colour tint for winter.<\/p>\n<p>The integration&#8217;s &#8220;genericity drive&#8221; (feeling a bit more &#8220;next cab off the rank&#8221; than &#8220;genericization star&#8221;) is that much more difficult because there is no &#8220;onload&#8221; event &#8220;immediate answer&#8221; feel to this &#8220;Intl&#8221; object client side Javascript work.  For the first time we can recall we needed to combine &#8230;<\/p>\n<ul>\n<li>HTML iframe &#8220;onload&#8221; event function &#8230; containing a &#8230;<\/li>\n<li>setTimeout based &#8220;relook&#8221; at that iframe&#8217;s content that little bit later on<\/li>\n<\/ul>\n<p> &#8230; as per &#8230;<\/p>\n<p><code><br \/>\nfunction postglt() {<br \/>\n  var iois=document.getElementById('ifintl');<br \/>\n  var fabih='', ewi=0, tzs='';<br \/>\n  if (aconto) {<br \/>\n  if (iois != null) {<br \/>\n    aconto = (iois.contentWindow || iois.contentDocument);<br \/>\n    if (aconto != null) {<br \/>\n     if (aconto.document) { aconto = aconto.document; }<br \/>\n     acontobih=aconto.body.innerHTML;<br \/>\n     fabih=acontobih;<br \/>\n     if (acontobih.trim().indexOf('var options') != -1) {<br \/>\n       eval(\"options\" + acontobih.split('var options')[1].split('&lt;')[0].split(';')[0]);<br \/>\n       if (elsewise) { \/\/ via div intldiv<br \/>\n     if (acontobih.trim().indexOf('&lt;b&gt;') != -1) {<br \/>\n       eval(\"lcode='\" + acontobih.split('&lt;b&gt;')[1].split('&lt;')[0] + \"';\");<br \/>\n              \/\/alert(\"lcode='\" + acontobih.split('&lt;b&gt;')[1].split('&lt;')[0] + \"';\");<br \/>\n    d = new Date();<br \/>\n    timedatenow = new Date(d.getFullYear(), d.getMonth(), d.getDate(),  d.getHours(), d.getMinutes(), d.getSeconds(), d.getMilliseconds());<br \/>\n    localdatetime = new Intl.DateTimeFormat(lcode, options).format;<br \/>\n    \/\/document.title=localdatetime(timedatenow);<br \/>\n      if (aconto.getElementById('ejc1').innerHTML) {<br \/>\n        if (aconto.getElementById('ejc1').innerHTML.indexOf('timeZone:') != -1) {<br \/>\n        tzs=' (' + aconto.getElementById('ejc1').innerHTML.split('timeZone:')[eval(-1 + aconto.getElementById('ejc1').innerHTML.split('timeZone:').length)].split('\"')[1].split('\"')[0] + ')';<br \/>\n        if (tzs.replace(' (UTC)','') == '') { tzs=goodtzs; }<br \/>\n    if (window.parent) {<br \/>\n     if (document.URL.indexOf('inlineldt') == -1 && document.URL.indexOf('?') != -1 && (document.URL.indexOf('%40') != -1 || document.URL.indexOf('@') != -1)) {<br \/>\n       \/\/location.href=document.URL.replace('?', '?inlineldt=' + encodeURIComponent(localdatetime(timedatenow) + tzs.replace(' (UTC)','')) + '&');<br \/>\n       document.body.innerHTML+=\"&lt;iframe style=display:none; src='\" + document.URL.replace('?', '?inlineldt=' + encodeURIComponent(localdatetime(timedatenow) + tzs.replace(' (UTC)','')) + '&') + \"'&gt;&lt;\/iframe&gt;\";<br \/>\n       return false;<br \/>\n     }<br \/>\n    }<br \/>\n        }<br \/>\n      }<br \/>\n    var theforms=document.getElementsByTagName('form');<br \/>\n    for (var iiforms=0; iiforms&lt;theforms.length; iiforms++) {<br \/>\n     if (theforms[iiforms].innerHTML.indexOf('inlineldt') == -1) {<br \/>\n      elsewisea.push('' + Math.floor(Math.random() * 178654));<br \/>\n      theforms[iiforms].innerHTML+='&lt;input type=hidden id=inlineldt' + elsewisea[eval(-1 + elsewisea.length)] + ' name=inlineldt value=\"' + localdatetime(timedatenow) + tzs.replace(' (UTC)','') + '\"&gt;&lt;\/input&gt;';<br \/>\n     } else {<br \/>\n      document.getElementById('inlineldt' + elsewisea[ewi]).value=localdatetime(timedatenow) + tzs.replace(' (UTC)','');<br \/>\n      ewi++;<br \/>\n     }<br \/>\n    }<br \/>\n     }<br \/>\n       }<br \/>\n     } else {<br \/>\n       fabih='';<br \/>\n     }<br \/>\n     if (acontobih.trim().indexOf('&lt;b&gt;') != -1) {<br \/>\n       eval(\"lcode='\" + acontobih.split('&lt;b&gt;')[1].split('&lt;')[0] + \"';\");<br \/>\n     } else {<br \/>\n       fabih='';<br \/>\n     }<br \/>\n     acontobih=fabih;<br \/>\n    }<br \/>\n  }<br \/>\n  }<br \/>\n}<br \/>\n<br \/>\nfunction glt(iois) {<br \/>\n  var fabih='', ewi=0, tzs='';<br \/>\n  if (!aconto) {<br \/>\n  if (iois != null) {<br \/>\n    aconto = (iois.contentWindow || iois.contentDocument);<br \/>\n    if (aconto != null) {<br \/>\n     if (aconto.document) { aconto = aconto.document; }<br \/>\n     acontobih=aconto.body.innerHTML;<br \/>\n     fabih=acontobih;<br \/>\n     if (acontobih.trim().indexOf('var options') != -1) {<br \/>\n       eval(\"options\" + acontobih.split('var options')[1].split('&lt;')[0].split(';')[0]);<br \/>\n       if (elsewise) { \/\/ via div intldiv<br \/>\n     if (acontobih.trim().indexOf('&lt;b&gt;') != -1) {<br \/>\n       eval(\"lcode='\" + acontobih.split('&lt;b&gt;')[1].split('&lt;')[0] + \"';\");<br \/>\n    d = new Date();<br \/>\n    timedatenow = new Date(d.getFullYear(), d.getMonth(), d.getDate(),  d.getHours(), d.getMinutes(), d.getSeconds(), d.getMilliseconds());<br \/>\n    localdatetime = new Intl.DateTimeFormat(lcode, options).format;<br \/>\n      if (aconto.getElementById('ejc1').innerHTML) {<br \/>\n        if (aconto.getElementById('ejc1').innerHTML.indexOf('timeZone:') != -1) {<br \/>\n        tzs=' (' + aconto.getElementById('ejc1').innerHTML.split('timeZone:')[eval(-1 + aconto.getElementById('ejc1').innerHTML.split('timeZone:').length)].split('\"')[1].split('\"')[0] + ')';<br \/>\n        goodtzs=tzs.replace(' (UTC)','');<br \/>\n      }<br \/>\n      }<br \/>\n    var theforms=document.getElementsByTagName('form');<br \/>\n    for (var iiforms=0; iiforms&lt;theforms.length; iiforms++) {<br \/>\n     if (theforms[iiforms].innerHTML.indexOf('inlineldt') == -1) {<br \/>\n      elsewisea.push('' + Math.floor(Math.random() * 178654));<br \/>\n      theforms[iiforms].innerHTML+='&lt;input type=hidden id=inlineldt' + elsewisea[eval(-1 + elsewisea.length)] + ' name=inlineldt value=\"' + localdatetime(timedatenow) + tzs.replace(' (UTC)','') + '\"&gt;&lt;\/input&gt;';<br \/>\n     } else {<br \/>\n      document.getElementById('inlineldt' + elsewisea[ewi]).value=localdatetime(timedatenow) + tzs.replace(' (UTC)','');<br \/>\n      ewi++;<br \/>\n     }<br \/>\n    }<br \/>\n     }<br \/>\n         setTimeout(postglt, 3000);<br \/>\n       }<br \/>\n     } else {<br \/>\n       fabih='';<br \/>\n     }<br \/>\n     if (acontobih.trim().indexOf('&lt;b&gt;') != -1) {<br \/>\n       eval(\"lcode='\" + acontobih.split('&lt;b&gt;')[1].split('&lt;')[0] + \"';\");<br \/>\n     } else {<br \/>\n       fabih='';<br \/>\n     }<br \/>\n     acontobih=fabih;<br \/>\n    }<br \/>\n  }<br \/>\n  }<br \/>\n}<br \/>\n<\/code><\/p>\n<p>And so we continue on with other scenarios here.   Here is &#8230;<\/p>\n<ul>\n<li><a target=_blank href='http:\/\/www.rjmprogramming.com.au\/PHP\/Geographicals\/diff.php?one=http:\/\/www.rjmprogramming.com.au\/PHP\/gimp_guillotine_followup.php-----------------------GETME' title='gimp_guillotine_followup.php'>the changed<\/a> <a target=_blank href='http:\/\/www.rjmprogramming.com.au\/PHP\/gimp_guillotine_followup.php-----------------------GETME' title='gimp_guillotine_followup.php'>gimp_guillotine_followup.php<\/a> that you can try out at this <a target=_blank href=\"https:\/\/www.rjmprogramming.com.au\/PHP\/gimp_guillotine_followup.php\" title=\"Click picture\">live run<\/a> link &#8230; now can call upon &#8230;<\/li>\n<li><a target=_blank href='http:\/\/www.rjmprogramming.com.au\/PHP\/Geographicals\/diff.php?one=http:\/\/www.rjmprogramming.com.au\/HTMLCSS\/intl_use.js--GETME' title='intl_use.js'>the changed<\/a> <a target=_blank href='http:\/\/www.rjmprogramming.com.au\/HTMLCSS\/intl_use.js--GETME' title='intl_use.js'>\/HTMLCSS\/intl_use.js<\/a><\/li>\n<\/ul>\n<p><!--p>You can also see this play out at WordPress 4.1.1's <a target=_blank  href='\/\/www.rjmprogramming.com.au\/ITblog\/gimp-guillotine-local-datetime-token-subject-tutorial\/'>Gimp Guillotine Local Datetime Token Subject Tutorial<\/a>.<\/p-->\n<hr>\n<p id='cslidet'>Previous relevant <a target=_blank title='Colour Systems Localized Internationalized Date Emails Tutorial' href='\/\/www.rjmprogramming.com.au\/ITblog\/colour-systems-localized-internationalized-date-emails-tutorial\/'>Colour Systems Localized Internationalized Date Emails Tutorial<\/a> is shown below.<\/p>\n<div style=\"width: 230px\" class=\"wp-caption alignnone\"><a target=_blank href=\"http:\/\/www.rjmprogramming.com.au\/HTMLCSS\/cmyk_rgb.html\"><img decoding=\"async\" style=\"float:left;border: 15px solid pink;\" alt=\"Colour Systems Inline HTML Email Collaboration Tutorial\" src=\"http:\/\/www.rjmprogramming.com.au\/HTMLCSS\/cmyk_rgb_internationalization.jpg\" title=\"Colour Systems Inline HTML Email Collaboration Tutorial\"  \/><\/a><p class=\"wp-caption-text\">Colour Systems Localized Internationalized Date Emails Tutorial<\/p><\/div>\n<p>Huh?!  What&#8217;s with &#8220;Localized Internationalized&#8221; in today&#8217;s tutorial title?<\/p>\n<p>Well, we&#8217;ve been miffed for a couple of days now putting up with our <a target=_blank title='Feedback Annotation Canvas Image Tokens Tutorial' href='https:\/\/www.rjmprogramming.com.au\/ITblog\/feedback-annotation-canvas-image-tokens-tutorial\/'>&#8220;date token email subject&#8221;<\/a> parts to our emails showing a web server (location) based timestamp.  Our web server at RJM Programming, hosted by the wonderful <a target=_blank title='Crazy Domains' href='http:\/\/www.crazydomains.com.au'>Crazy Domains<\/a> is located on the other side of our country (as well as our continent), Australia in a timezone called &#8220;Australia\/Perth&#8221;.  And as much as we admire Perth, and have to &#8220;girt the loins&#8221; (you might say &#8220;more than somewhat&#8221;) when Collingwood takes on West Coast in the <a target=_blank title='AFL' href='http:\/\/afl.com.au'>AFL<\/a>, when it comes to timezone relevance for us here in Sydney, the subtraction of two or three hours (depending on daylight saving) is all too much for me.  So, what to do?  There is the quandary &#8230;<\/p>\n<ul>\n<li>to arrange the inline HTML emails you need a serverside language such as PHP &#8230; yet &#8230;<\/li>\n<li>to obtain a &#8220;local&#8221; timestamp you need Javascript (at the &#8220;client&#8221;)<\/li>\n<\/ul>\n<p> &#8230; and so, though there are <a target=_blank title='Useful link' href='https:\/\/stackoverflow.com\/questions\/2705067\/how-can-i-get-the-users-local-time-instead-of-the-servers-time'>clunky things you can do at the PHP end<\/a> the more straightforward and less confusing approach is to get between &#8230;<\/p>\n<ul>\n<li>the existant <a target=_blank title='Ajax information from Wikipedia ... thanks' href='http:\/\/en.wikipedia.org\/wiki\/Ajax_%28programming%29'>Ajax<\/a>\/<a target=_blank title='FormData object information' href='https:\/\/developer.mozilla.org\/en-US\/docs\/Web\/API\/FormData'>FormData<\/a> techniques of sending a FormData object to &#8230;<\/li>\n<li>our PHP email creator\n<li>\n<\/ul>\n<p> &#8230; and make a dual purpose arrangement for our FormData &#8220;inline&#8221; (think of it as a &#8220;textbox in midair&#8221;) that if it contains a &#8230;<\/p>\n<ul>\n<li>string that contains a &#8220;:&#8221; semicolon &#8230; and contains &#8230;<\/li>\n<li>less than or equal to 5 words (space delimited)<\/li>\n<\/ul>\n<p> &#8230; we&#8217;re going to say that the parent (HTML\/Javascript) has thus indicated to the (hard working duck paddling hard under the water) child (PHP email creator) that the content of the &#8220;inline&#8221; &#8220;textbox in midair&#8221; is a better timestamp to use for &#8220;[date]&#8221; subject token substitutions than any server timestamp.<\/p>\n<p>That&#8217;s &#8220;Localized&#8221; covered, but what&#8217;s &#8220;Internationalized&#8221; about this?  Well, at the Javascript (client) end, you may recall how we&#8217;ve investigated the great &#8220;Intl&#8221; object possibilities for Date and Number and Currency Internationalization thoughts (at the client side) when we presented <a target=_blank title='Javascript Internationalization Resolved Options Tutorial' href='https:\/\/www.rjmprogramming.com.au\/ITblog\/javascript-internationalization-resolved-options-tutorial\/'>Javascript Internationalization Resolved Options Tutorial<\/a>.  Well, we feel some integration coming on.  This previously standalone (top.document thinking) web application needed to be adapted to be useful as a &#8220;child iframe&#8221; one as well (ie. integrate but keep all existant top.document thinking to work as before).  This is a bit of work to get going, but by the end, we had this integration changing &#8220;date token [date] in subject line&#8221; of emails creating timestamps like &#8230;<\/p>\n<table style='width:100%;'>\n<tr>\n<th>Localized Internationalized Date Timestamp (at client Javascript)<\/th>\n<th>Web Server Timestamp (at server PHP)<\/th>\n<\/tr>\n<tr>\n<td>01\/06\/2020, 07:56 pm AEST (Australia\/Sydney)<\/td>\n<td>Monday 1st of June 2020 11:50:24 AM<\/td>\n<\/tr>\n<\/table>\n<p> &#8230; a clarity and relevance improvement (to the email subject line) am sure you&#8217;d agree.  Though it&#8217;s clearly not there yet, we saw this integration as a <i>&#8220;test guinea pig&#8221; going onto &#8220;genericization afterwards&#8221; case<\/i>, and so hived off a lot of these changes to a new &#8230;<\/p>\n<ul>\n<li>integrating external Javascript <a target=_blank href=\"http:\/\/www.rjmprogramming.com.au\/HTMLCSS\/intl_use.js\" title=\"intl_use.js\">intl_use.js<\/a> calls <a target=_blank href=\"http:\/\/www.rjmprogramming.com.au\/PHP\/Geographicals\/diff.php?one=http:\/\/www.rjmprogramming.com.au\/HTMLCSS\/intl_use.html------GETME\" title=\"intl_use.html------GETME\">a changed<\/a> <a target=_blank href=\"http:\/\/www.rjmprogramming.com.au\/HTMLCSS\/intl_use.html------GETME\" title=\"intl_use.html\">intl_use.html<\/a> &#8230; and in turn called by &#8230;<\/li>\n<li><a target=_blank href=\"http:\/\/www.rjmprogramming.com.au\/PHP\/Geographicals\/diff.php?one=http:\/\/www.rjmprogramming.com.au\/HTMLCSS\/cmyk_rgb.html---GETME\" title=\"cmyk_rgb.html\">the changed<\/a> <a target=_blank href=\"http:\/\/www.rjmprogramming.com.au\/HTMLCSS\/cmyk_rgb.html---GETME\" title=\"cmyk_rgb.html\">cmyk_rgb.html<\/a> <a target=_blank href=\"http:\/\/www.rjmprogramming.com.au\/HTMLCSS\/cmyk_rgb.html\">live run<\/a> link &#8230; calling &#8230;<\/li>\n<li><a target=_blank href=\"http:\/\/www.rjmprogramming.com.au\/PHP\/Geographicals\/diff.php?one=http:\/\/www.rjmprogramming.com.au\/HTMLCSS\/emailhtml.php--------------GETME\" title=\"emailhtml.php\">the changed PHP email creator helper<\/a> <a target=_blank href=\"http:\/\/www.rjmprogramming.com.au\/HTMLCSS\/emailhtml.php--------------GETME\" title=\"emailhtml.php\">emailhtml.php<\/a><\/li>\n<\/ul>\n<p>Believe it or not, another job improving on yesterday&#8217;s <a title='Colour Systems Inline HTML Email Collaboration Tutorial' href='#csihtmlect'>Colour Systems Inline HTML Email Collaboration Tutorial<\/a> that took equally as long was figuring out what to do about the HSL Hue unit of measure&#8217;s symbol <span>&#176;<\/span> for the Apple Mail macOS application email client, where all the encoding combinations we could think of caused a spurious &#8220;A&#8221; (but gobbledygooky) type of character to preceed the <span>&#176;<\/span> to look annoyingly like A<span>&#176;<\/span> &#8230; ugh!   It took a long time to nut out, but eventually we tweaked to &#8230;<\/p>\n<ul>\n<li>for all the web browser usage incarnations just show the degree symbol via HTML &#8230;<br \/>\n<code><br \/>\n&lt;span id=\"ds\" title=\"Degrees\"&gt;&amp;#176;&lt;\/span&gt;<br \/>\n<\/code>\n<\/li>\n<li>but then on its way to the email clients map that via the <font color=blue>relevant<\/font> Javascript DOM &#8230;<br \/>\n<code><br \/>\n  document.getElementById('htmlis').innerHTML='&lt;body&gt;' + document.body.innerHTML.split('&lt;ifr' + 'ame')[0]<font color=blue>.replace(document.getElementById('ds').outerHTML, \"&lt;div title=Degrees style='display:inline-block;max-width:6px;width:6px;max-height:10px;height:10px;overflow:hidden;'&gt;&lt;span title=Degrees style='float:right;text-align:right;transform:scaleX(1);'&gt;\" + String.fromHtmlEntities(String.fromCodePoint(176))  + \"&lt;\/span&gt;&lt;\/div&gt;\")<\/font>;  \/\/ many other replace clauses have been left out for clarity purposes<br \/>\n<\/code><br \/>\n &#8230; to end up with the email client &#8220;Show original&#8221; view (of the inline HTML of email) as &#8230;<br \/>\n<code><br \/>\n&lt;div title=Degrees style='display:inline-block;max-width:6px;width:6px;max-height:10px;height:10px;overflow:hidden;'&gt;&lt;span title=Degrees style='float:right;text-align:right;transform:scaleX(1);'&gt;&#176;&lt;\/span&gt;&lt;\/div&gt;<br \/>\n<\/code><br \/>\n &#8230; effectively asking <font size=1>good ol&#8217;<\/font> CSS to cover up for our Javascript pickle\n<\/li>\n<\/ul>\n<p>Intrigued by &#8220;transform:scaleX(1)&#8221;?  Yes, we experimented with flip &#8220;transform:scaleX(-1)&#8221; and flop &#8220;transform:scaleY(-1)&#8221; at various stages, but did not seem to need these in the end.  But the degree (&#176;) symbol being that &#8220;even handed&#8221; character, we can flip it and flop it, and it remains its old self &#8230; if only we had <a target=_blank title='The Three Degrees' href='https:\/\/www.youtube.com\/watch?v=T6fVDAjs9f0'>three of them<\/a> <font size=1>&#8230; oh! fancy that?!<\/font><\/p>\n<p>We also added any Feedback or Comments into the email subject line, as well as in the &#8220;inline HTML&#8221; body section of the email.<\/p>\n<p><!--p>You can also see this play out at WordPress 4.1.1's <a target=_blank  href='\/\/www.rjmprogramming.com.au\/ITblog\/colour-systems-localized-internationalized-date-emails-tutorial\/'>Colour Systems Localized Internationalized Date Emails Tutorial<\/a>.<\/p-->\n<hr>\n<p id='csihtmlect'>Previous relevant <a target=_blank title='Colour Systems Inline HTML Email Collaboration Tutorial' href='\/\/www.rjmprogramming.com.au\/ITblog\/colour-systems-inline-html-email-collaboration-tutorial\/'>Colour Systems Inline HTML Email Collaboration Tutorial<\/a> is shown below.<\/p>\n<div style=\"width: 230px\" class=\"wp-caption alignnone\"><a target=_blank href=\"http:\/\/www.rjmprogramming.com.au\/HTMLCSS\/cmyk_rgb.html\"><img decoding=\"async\" style=\"float:left;border: 15px solid pink;\" alt=\"Colour Systems Inline HTML Email Collaboration Tutorial\" src=\"http:\/\/www.rjmprogramming.com.au\/HTMLCSS\/cmyk_rgb_feedback.jpg\" title=\"Colour Systems Inline HTML Email Collaboration Tutorial\"  \/><\/a><p class=\"wp-caption-text\">Colour Systems Inline HTML Email Collaboration Tutorial<\/p><\/div>\n<p>Yesterday&#8217;s <a title='Colour Systems Inline HTML Email Tutorial' href='#csihtmlet'>Colour Systems Inline HTML Email Tutorial<\/a> featured Inline HTML Email functionality, that we find very useful, but almost denuded of personalization.  We think adding personalization aspects to a web application should never be mandatory to its functionality, but on the flipside, if you want a web application with &#8220;collaboration&#8221; thoughts we figure for &#8230;<\/p>\n<ul>\n<li>the scenario that the rjmprogramming.com.au mail server serves as an &#8220;honest broker&#8221; between &#8230;<\/li>\n<li>an emailee (as we established yesterday) &#8230; and &#8230;<\/li>\n<li>an emailer (we allow the user to define (and so not have to bother the users again regarding email addresses), optionally, starting today) &#8230; teamed with &#8230;<\/li>\n<li>a comment or feedback textbox (new today), to add some personalization, into the <i>colour<\/i> discussion and collaboration and sharing experience <font size=1>(&#8230; what&#8217;s come over me!)<\/font><\/li>\n<\/ul>\n<p> &#8230; meaning, though, that collaboration can occur between collaborators through (straight at your face content) email.<\/p>\n<p>Today, also, we&#8217;ve added another HSL (Hue\/Saturation\/Lightness) Colour System, and would like to thank <a target=_blank title='Useful link, thanks' href='https:\/\/www.rapidtables.com\/convert\/color\/hsl-to-rgb.html'>this useful link<\/a> regarding the formulae needed to make this happen.<\/p>\n<p>Try collaboration via <a target=_blank href=\"http:\/\/www.rjmprogramming.com.au\/PHP\/Geographicals\/diff.php?one=http:\/\/www.rjmprogramming.com.au\/HTMLCSS\/cmyk_rgb.html--GETME\" title=\"cmyk_rgb.html\">the changed<\/a> <a target=_blank href=\"http:\/\/www.rjmprogramming.com.au\/HTMLCSS\/cmyk_rgb.html--GETME\" title=\"cmyk_rgb.html\">cmyk_rgb.html<\/a> <a target=_blank href=\"http:\/\/www.rjmprogramming.com.au\/HTMLCSS\/cmyk_rgb.html\">live run<\/a> link yourself, and with a <i>colourful<\/i> friend!<\/p>\n<p><!--p>You can also see this play out at WordPress 4.1.1's <a target=_blank  href='\/\/www.rjmprogramming.com.au\/ITblog\/colour-systems-inline-html-email-collaboration-tutorial\/'>Colour Systems Inline HTML Email Collaboration Tutorial<\/a>.<\/p-->\n<hr>\n<p id='csihtmlet'>Previous relevant <a target=_blank title='Colour Systems Inline HTML Email Tutorial' href='\/\/www.rjmprogramming.com.au\/ITblog\/colour-systems-inline-html-email-tutorial\/'>Colour Systems Inline HTML Email Tutorial<\/a> is shown below.<\/p>\n<div style=\"width: 230px\" class=\"wp-caption alignnone\"><a target=_blank href=\"http:\/\/www.rjmprogramming.com.au\/HTMLCSS\/cmyk_rgb.html\"><img decoding=\"async\" style=\"float:left;border: 15px solid pink;\" alt=\"Colour Systems Inline HTML Email Tutorial\" src=\"http:\/\/www.rjmprogramming.com.au\/HTMLCSS\/cmykrgb.jpg\" title=\"Colour Systems Inline HTML Email Tutorial\"  \/><\/a><p class=\"wp-caption-text\">Colour Systems Inline HTML Email Tutorial<\/p><\/div>\n<p>In undertaking the makeover for the Colour Systems web application of <a title='Colour Systems Primer Tutorial' href='#cspt'>Colour Systems Primer Tutorial<\/a> we were integrating Inline HTML Email functionality via <a target=_blank title='Ajax information from Wikipedia ... thanks' href='http:\/\/en.wikipedia.org\/wiki\/Ajax_%28programming%29'>Ajax<\/a>\/<a target=_blank title='FormData object information' href='https:\/\/developer.mozilla.org\/en-US\/docs\/Web\/API\/FormData'>FormData<\/a> techniques (entrenched as a favourite &#8220;midair&#8221; feeling email conduit approach) when we were surprised trying something that we did not expect to work.   We have intimated that as far as email clients go it is touch and go whether much HTML5 works nor CSS3 when you try to get something going, so when we tried integrating &#8230;<\/p>\n<ul>\n<li>inline HTML email &#8230; with &#8230;<\/li>\n<li>HTML input type=&#8221;color&#8221; as per &#8230;<br \/>\n<code><br \/>\n&lt;input onchange=\"findc(this.value);\" style='display:INLINE-BLOCK;' type=\"color\" name=\"cinput\" id=\"cinput\" value=\"#000000\"&gt;&lt;\/input&gt;<br \/>\n<\/code>\n<\/li>\n<\/ul>\n<p> &#8230; we were really expecting &#8220;tears before bedtime&#8221; rather than an approach using the HTML input type=&#8221;color&#8221; element above that really made it good at the emailee end, in particular, as we &#8230;<\/p>\n<ul>\n<li>have an emailer <a target=_blank href=\"http:\/\/www.rjmprogramming.com.au\/HTMLCSS\/cmyk_rgb.html\" title=\"Click picture\">start the ball rolling<\/a> (with <a target=_blank href=\"http:\/\/www.rjmprogramming.com.au\/PHP\/Geographicals\/diff.php?one=http:\/\/www.rjmprogramming.com.au\/HTMLCSS\/cmyk_rgb.html-GETME\" title=\"cmyk_rgb.html\">the changed<\/a> <a target=_blank href=\"http:\/\/www.rjmprogramming.com.au\/HTMLCSS\/cmyk_rgb.html-GETME\" title=\"cmyk_rgb.html\">cmyk_rgb.html<\/a>) at this link &#8230; then &#8230;<\/li>\n<li>set up a colour of interest via any of the following approaches &#8230;\n<ol>\n<li>fill out Red, Green, Blue &#8230; 0 to 255 &#8230; RGB Colour System numbers<\/li>\n<li>fill out Cyan, Magenta, Yellow, Key &#8230; 0.0000 to 1.0000 &#8230; CMYK Colour System numbers<\/li>\n<li>click our new HTML input type=&#8221;color&#8221; element and follow your nose<\/li>\n<\/ol>\n<\/li>\n<li>and then, optionally, collaborate (or just share) with an emailee (textbox) they fill out and press the &#8220;Email to &#8230;&#8221; button &#8230; setting off &#8230;<\/li>\n<li>Ajax\/FormData functionality sends off the document.body.innerHTML (heavily amended) HTML data directed via our Inline HTML Email &#8220;emailhtml.php&#8221; (usual PHP) helper &#8230;<\/li>\n<li>email arrives for the emailee who sees a lot of what the emailer last saw &#8230; and &#8230;\n<ol>\n<li>we highly recommend clicking our new HTML input type=&#8221;color&#8221; element, then follow your nose <font size=2>(picking a colour <\/font>, <font size=1>not your &#8230; ?<\/font><font size=2>)<\/font> then &#8230; click RGB to CMYK button<\/li>\n<li>fill out Red, Green, Blue &#8230; 0 to 255 &#8230; RGB Colour System numbers &#8230; click RGB to CMYK button<\/li>\n<li>fill out Cyan, Magenta, Yellow, Key &#8230; 0.0000 to 1.0000 &#8230; CMYK Colour System numbers &#8230; click CMYK to RGB button<\/li>\n<\/ol>\n<p> &#8230; optionally adjusting the return email (as the original emailer&#8217;s email address, more than likely) &#8230; back out to &#8220;the net&#8221; with &#8230;\n<\/li>\n<li>the emailee&#8217;s web browser arrives at <a target=_blank href=\"http:\/\/www.rjmprogramming.com.au\/HTMLCSS\/cmyk_rgb.html\" title=\"Click picture\">the same colour systems web application<\/a> ready to, optionally, send more collaboration or sharing back to the emailer, as required<\/li>\n<\/ul>\n<p>Colourful discussions can ensue!  And don&#8217;t we know, lots of people have opinions about <i>colour<\/i>, even its <i>spelling<\/i>!<\/p>\n<p><!--p>You can also see this play out at WordPress 4.1.1's <a target=_blank  href='\/\/www.rjmprogramming.com.au\/ITblog\/colour-systems-inline-html-email-tutorial\/'>Colour Systems Inline HTML Email Tutorial<\/a>.<\/p-->\n<hr>\n<p id='cspt'>Previous relevant <a target=_blank title='Colour Systems Primer Tutorial' href='\/\/www.rjmprogramming.com.au\/ITblog\/colour-systems-primer-tutorial\/'>Colour Systems Primer Tutorial<\/a> is shown below.<\/p>\n<div style=\"width: 230px\" class=\"wp-caption alignnone\"><a target=_blank href=\"http:\/\/www.rjmprogramming.com.au\/HTMLCSS\/cmyk_rgb.html\"><img decoding=\"async\" style=\"float:left;border: 15px solid pink;\" alt=\"Colour Systems Primer Tutorial\" src=\"http:\/\/www.rjmprogramming.com.au\/HTMLCSS\/cmyk_rgb.jpg\" title=\"Colour Systems Primer Tutorial\"  \/><\/a><p class=\"wp-caption-text\">Colour Systems Primer Tutorial<\/p><\/div>\n<p>We want to talk, today, about <a target=_blank title='Colour space information from Wikipedia ... thanks' href='https:\/\/en.wikipedia.org\/wiki\/Color_space'>Colour (Space) Systems<\/a>.  There are, at least &#8230;<\/p>\n<ul>\n<li>additive colour systems &#8230; used in science &#8230; often used to define  web colours &#8230; red, green and blue are the primary colours<\/li>\n<li>subtractive colour systems &#8230; used by artists (and often the way we learn colours in early school) &#8230; often used with regard to printing &#8230; red, yellow and blue are the primary colours<\/li>\n<li>the CMYK colour system &#8230; used by printing industry &#8230; cyan, magenta, yellow and black are the primary colours<\/li>\n<\/ul>\n<p>You can read more about the comparisons and a description of these three at <a target=_blank title='Colour Systems' href='http:\/\/www.colormatters.com\/color-and-design\/color-systems-rgb-and-cmyk'>Colour Systems &#8211; RGB and CYMK<\/a>.<\/p>\n<p>We&#8217;ve got a small HTML and Javascript conversion program we call <a target=_blank href=\"http:\/\/www.rjmprogramming.com.au\/HTMLCSS\/cmyk_rgb.html_GETME\">cmyk_rgb.html<\/a> (and that you can use as a <a target=_blank href=\"http:\/\/www.rjmprogramming.com.au\/HTMLCSS\/cmyk_rgb.html\">live run<\/a>) which you can use today to convert a given colour to and from RGB and CYMK colour systems.<\/p>\n<p>If this was interesting you may be interested in <a title='Click here to see topics in which you might be interested' href='#d18532' onclick='var dv=document.getElementById(\"d18532\"); dv.innerHTML = \"&lt;iframe width=670 height=600 src=\" + \"https:\/\/www.rjmprogramming.com.au\/ITblog\/tag\/colour\" + \"&gt;&lt;\/iframe&gt;\"; dv.style.display = \"block\";'>this<\/a> too.<\/p>\n<div id='d18532' style='display: none; border-left: 2px solid green; border-top: 2px solid green;'><\/div>\n<hr>\n<p>If this was interesting you may be interested in <a title='Click here to see topics in which you might be interested' href='#d49145' onclick='var dv=document.getElementById(\"d49145\"); dv.innerHTML = \"&lt;iframe width=670 height=600 src=\" + \"https:\/\/www.rjmprogramming.com.au\/ITblog\/tag\/email\" + \"&gt;&lt;\/iframe&gt;\"; dv.style.display = \"block\";'>this<\/a> too.<\/p>\n<div id='d49145' style='display: none; border-left: 2px solid green; border-top: 2px solid green;'><\/div>\n<hr>\n<p>If this was interesting you may be interested in <a title='Click here to see topics in which you might be interested' href='#d49153' onclick='var dv=document.getElementById(\"d49153\"); dv.innerHTML = \"&lt;iframe width=670 height=600 src=\" + \"https:\/\/www.rjmprogramming.com.au\/ITblog\/tag\/collaboration\" + \"&gt;&lt;\/iframe&gt;\"; dv.style.display = \"block\";'>this<\/a> too.<\/p>\n<div id='d49153' style='display: none; border-left: 2px solid green; border-top: 2px solid green;'><\/div>\n<hr>\n<p>If this was interesting you may be interested in <a title='Click here to see topics in which you might be interested' href='#d49159' onclick='var dv=document.getElementById(\"d49159\"); dv.innerHTML = \"&lt;iframe width=670 height=600 src=\" + \"https:\/\/www.rjmprogramming.com.au\/ITblog\/tag\/integration\" + \"&gt;&lt;\/iframe&gt;\"; dv.style.display = \"block\";'>this<\/a> too.<\/p>\n<div id='d49159' style='display: none; border-left: 2px solid green; border-top: 2px solid green;'><\/div>\n<hr>\n<p>If this was interesting you may be interested in <a title='Click here to see topics in which you might be interested' href='#d49176' onclick='var dv=document.getElementById(\"d49176\"); dv.innerHTML = \"&lt;iframe width=670 height=600 src=\" + \"https:\/\/www.rjmprogramming.com.au\/ITblog\/tag\/datetime\" + \"&gt;&lt;\/iframe&gt;\"; dv.style.display = \"block\";'>this<\/a> too.<\/p>\n<div id='d49176' style='display: none; border-left: 2px solid green; border-top: 2px solid green;'><\/div>\n<hr>\n<p>If this was interesting you may be interested in <a title='Click here to see topics in which you might be interested' href='#d54046' onclick='var dv=document.getElementById(\"d54046\"); dv.innerHTML = \"&lt;iframe width=670 height=600 src=\" + \"https:\/\/www.rjmprogramming.com.au\/ITblog\/tag\/placeholder\" + \"&gt;&lt;\/iframe&gt;\"; dv.style.display = \"block\";'>this<\/a> too.<\/p>\n<div id='d54046' style='display: none; border-left: 2px solid green; border-top: 2px solid green;'><\/div>\n<hr>\n<p>If this was interesting you may be interested in <a title='Click here to see topics in which you might be interested' href='#d54065' onclick='var dv=document.getElementById(\"d54065\"); dv.innerHTML = \"&lt;iframe width=670 height=600 src=\" + \"https:\/\/www.rjmprogramming.com.au\/ITblog\/tag\/browse\" + \"&gt;&lt;\/iframe&gt;\"; dv.style.display = \"block\";'>this<\/a> too.<\/p>\n<div id='d54065' style='display: none; border-left: 2px solid green; border-top: 2px solid green;'><\/div>\n<hr>\n<p>If this was interesting you may be interested in <a title='Click here to see topics in which you might be interested' href='#d54082' onclick='var dv=document.getElementById(\"d54082\"); dv.innerHTML = \"&lt;iframe width=670 height=600 src=\" + \"https:\/\/www.rjmprogramming.com.au\/ITblog\/tag\/media\" + \"&gt;&lt;\/iframe&gt;\"; dv.style.display = \"block\";'>this<\/a> too.<\/p>\n<div id='d54082' style='display: none; border-left: 2px solid green; border-top: 2px solid green;'><\/div>\n<hr>\n<p>If this was interesting you may be interested in <a title='Click here to see topics in which you might be interested' href='#d54098' onclick='var dv=document.getElementById(\"d54098\"); dv.innerHTML = \"&lt;iframe width=670 height=600 src=\" + \"https:\/\/www.rjmprogramming.com.au\/ITblog\/tag\/animated-gif\" + \"&gt;&lt;\/iframe&gt;\"; dv.style.display = \"block\";'>this<\/a> too.<\/p>\n<div id='d54098' style='display: none; border-left: 2px solid green; border-top: 2px solid green;'><\/div>\n<hr>\n<p>If this was interesting you may be interested in <a title='Click here to see topics in which you might be interested' href='#d54106' onclick='var dv=document.getElementById(\"d54106\"); dv.innerHTML = \"&lt;iframe width=670 height=600 src=\" + \"https:\/\/www.rjmprogramming.com.au\/ITblog\/tag\/intranet\" + \"&gt;&lt;\/iframe&gt;\"; dv.style.display = \"block\";'>this<\/a> too.<\/p>\n<div id='d54106' style='display: none; border-left: 2px solid green; border-top: 2px solid green;'><\/div>\n<hr>\n<p>If this was interesting you may be interested in <a title='Click here to see topics in which you might be interested' href='#d54118' onclick='var dv=document.getElementById(\"d54118\"); dv.innerHTML = \"&lt;iframe width=670 height=600 src=\" + \"https:\/\/www.rjmprogramming.com.au\/ITblog\/tag\/windows\" + \"&gt;&lt;\/iframe&gt;\"; dv.style.display = \"block\";'>this<\/a> too.<\/p>\n<div id='d54118' style='display: none; border-left: 2px solid green; border-top: 2px solid green;'><\/div>\n","protected":false},"excerpt":{"rendered":"<p>Moving on from yesterday&#8217;s Gimp Guillotine Image File Browse Intranet Video Tutorial&#8216;s progress, today, we test the Gimp Guillotine Follow Up web application on some Windows web browsers, and fix issues not immediately apparent when your main testing platform is &hellip; <a href=\"https:\/\/www.rjmprogramming.com.au\/ITblog\/gimp-guillotine-image-file-browse-windows-client-tutorial\/\">Continue reading <span class=\"meta-nav\">&rarr;<\/span><\/a><\/p>\n","protected":false},"author":1,"featured_media":0,"comment_status":"open","ping_status":"open","sticky":false,"template":"","format":"standard","meta":{"footnotes":""},"categories":[2,4,12,14,37],"tags":[3851,69,83,84,85,1653,3697,2661,155,1993,3531,174,212,1654,302,354,380,2364,415,418,419,2671,3336,2074,429,430,2730,491,2670,1996,576,587,590,1658,3838,614,620,3172,624,629,652,714,2383,744,1928,760,792,2732,913,932,2643,967,997,1151,1168,1200,2086,1867,1262,3304,1319,2231,1349,1369,1433,1435],"class_list":["post-54118","post","type-post","status-publish","format-standard","hentry","category-ajax","category-animation","category-elearning","category-event-driven-programming","category-tutorials","tag-_serverrequest_uri","tag-ajax","tag-animated-gif","tag-animation-2","tag-apache","tag-base64","tag-base64_decode","tag-base64_encode","tag-body","tag-browse","tag-browsing","tag-button","tag-client","tag-data-uri","tag-datetime","tag-dom","tag-email","tag-explanation","tag-ffmpeg","tag-file","tag-file-api","tag-file-specification","tag-filename","tag-file_exists","tag-file_get_contents","tag-file_put_contents","tag-formdata","tag-gimp","tag-guillotine","tag-header","tag-html","tag-iframe","tag-image","tag-imagemagick","tag-integrate","tag-integration","tag-internationalization","tag-intl","tag-intranet","tag-ip-address","tag-javascript","tag-local-web-server","tag-localization","tag-mamp","tag-marquee","tag-media","tag-mime","tag-mimetype","tag-pdf","tag-php","tag-placeholder","tag-popup","tag-programming","tag-slideshow","tag-software-integration","tag-stop-press","tag-subject","tag-substitution","tag-textarea","tag-token","tag-tutorial","tag-uniquifier","tag-user-agent","tag-video","tag-window-open","tag-windows"],"_links":{"self":[{"href":"https:\/\/www.rjmprogramming.com.au\/ITblog\/wp-json\/wp\/v2\/posts\/54118"}],"collection":[{"href":"https:\/\/www.rjmprogramming.com.au\/ITblog\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/www.rjmprogramming.com.au\/ITblog\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/www.rjmprogramming.com.au\/ITblog\/wp-json\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"https:\/\/www.rjmprogramming.com.au\/ITblog\/wp-json\/wp\/v2\/comments?post=54118"}],"version-history":[{"count":5,"href":"https:\/\/www.rjmprogramming.com.au\/ITblog\/wp-json\/wp\/v2\/posts\/54118\/revisions"}],"predecessor-version":[{"id":54150,"href":"https:\/\/www.rjmprogramming.com.au\/ITblog\/wp-json\/wp\/v2\/posts\/54118\/revisions\/54150"}],"wp:attachment":[{"href":"https:\/\/www.rjmprogramming.com.au\/ITblog\/wp-json\/wp\/v2\/media?parent=54118"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/www.rjmprogramming.com.au\/ITblog\/wp-json\/wp\/v2\/categories?post=54118"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/www.rjmprogramming.com.au\/ITblog\/wp-json\/wp\/v2\/tags?post=54118"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}