", $thisone)[0]) . "")[1]))));
}
unlink($fname);
if ($jj == 0) {
$geodata[0]=$geod;
$gctmiddle.="0,+0_0"; //"HTTP.0&peninfo="; // HTTP.0%2Chttp.1%2Chttp.2%2Chttp.3%2Chttp.4%2Chttp.5&peninfo=Broome,+Hobart,Tennant Creek,+Cairns,Sydney,+Brisbane
$gctmiddle=str_replace("&peninfo=", "%2Chttp.0_0&peninfo=", $gctmiddle);
$gctsuffixlat.=" [" . explode(",",$geod)[0] . "|-179.99|~0~,2] , [" . explode(",",$geod)[0] . "|179.99|~0_0~,2]"; // &data="; // [-17.961944444444|122.23611111111|~Broome~,7] , [-42.88334|147.31666|~Hobart~,7] , [-19.647222222222|134.19027777778|~Tennant Creek~,2] , [-16.930277777778|145.77027777778|~Cairns~,2] , [-33.86667|151.21666|~Sydney~,1] , [-27.46667|153.03333|~Brisbane~,1]
$gctsuffixlong.=" [-55.9|" . explode(",",$geod)[1] . "|~0~,2] , [82.9|" . explode(",",$geod)[1] . "|~0_0~,2]"; // &data="; // [-17.961944444444|122.23611111111|~Broome~,7] , [-42.88334|147.31666|~Hobart~,7] , [-19.647222222222|134.19027777778|~Tennant Creek~,2] , [-16.930277777778|145.77027777778|~Cairns~,2] , [-33.86667|151.21666|~Sydney~,1] , [-27.46667|153.03333|~Brisbane~,1]
$gdata=",[" . $geod . ",~0~]";
$zdata[0]=$zd;
$countrydata[0]=$nc;
$countrycodedata[0]=$ncc;
$tablebits=str_replace("th id=xscountry onclick=", "th data-ctry='" . $nc . "' data-cc='" . $ncc . "' id=xscountry onclick=", $tablebits);
$tablebits=str_replace("th id=scountry onclick=", "th data-ctry='" . $nc . "' data-cc='" . $ncc . "' id=scountry onclick=", $tablebits);
$tablebits=str_replace("th id=xselevation onclick=", "th data-z='" . $zd . "' id=xselevation onclick=", $tablebits);
$tablebits=str_replace("th id=selevation onclick=", "th data-z='" . $zd . "' id=selevation onclick=", $tablebits);
} else {
if ($geodata[-1 + sizeof($geodata)] != "" && $geod != "") {
$wt=("" . great_circle_distance(explode(",",$geod)[0],explode(",",$geod)[1], explode(",",$geodata[-1 + sizeof($geodata)])[0], explode(",",$geodata[-1 + sizeof($geodata)])[1])) . " metres from previous";
array_push($distdata, $wt);
$tablebits=str_replace(">
1) {
$pftown=explode('/', $tn)[-1 + sizeof(explode('/', $tn))];
}
$tablebits=str_replace(" src=''", " data-z='" . $zd . "' title='" . $distdata[-1 + sizeof($distdata)] . "' onclick='alert(this.title);' " . $isdata[-1 + sizeof($isdata)] . " src='" . $idata[-1 + sizeof($idata)] . "'", $tablebits);
} else {
if (sizeof(explode('/', $tn)) == 3) {
$pfstate=explode('/', $tn)[1];
}
if (sizeof(explode('/', $tn)) > 1) {
$pftown=explode('/', $tn)[-1 + sizeof(explode('/', $tn))];
}
$tablebits=str_replace(" src=''", " data-z='" . $zd . "' " . $isdata[-1 + sizeof($isdata)] . " src='" . $idata[-1 + sizeof($idata)] . "'", $tablebits);
}
if ($nc != "") {
$tablebits=str_replace("th id=xfcountry onclick=", "th data-ctry='" . $nc . "' data-cc='" . $ncc . "' id=xfcountry onclick=", $tablebits);
$tablebits=str_replace("th id=fcountry onclick=", "th data-ctry='" . $nc . "' data-cc='" . $ncc . "' id=fcountry onclick=", $tablebits);
$tablebits=str_replace("th id=xfelevation onclick=", "th data-z='" . $zd . "' id=xfelevation onclick=", $tablebits);
$tablebits=str_replace("th id=felevation onclick=", "th data-z='" . $zd . "' id=felevation onclick=", $tablebits);
}
zip_close($zip);
unlink($zipfile);
}
echo "
Image Trip Start Finish Guessing Game - RJM Programming - October, 2018
" . $eachone . $tablebits . "";
if (!isset($_GET['mystery']) && !isset($_POST['mystery'])) {
echo "\n \n";
}
echo "";
exit;
}
$lasts="";
if (isset($_GET['animg'])) {
$ximage = urldecode($_GET['animg']);
$exifbit = "Metadata";
if (!isset($_GET['return'])) $lasts = " setTimeout(preob, 1000); ";
}
$javascript="
var image=encodeURIComponent('" . $image . $ximage . "');
var straightaway='';
var ingif='', ingifstyle='filter: none;', ingifint=0, ingifchosen=false;
function prefetch(whatgifmaybe) { // thanks to https://stackoverflow.com/questions/69564118/how-to-get-duration-of-gif-image-in-javascript#:~:text=Mainly%20use%20parseGIF()%20%2C%20then,duration%20of%20a%20GIF%20image.
if ((whatgifmaybe.toLowerCase().trim().split('#')[0] + '?').indexOf('.gif?') != -1) {
ingif=whatgifmaybe;
document.body.style.cursor='progress';
fetch(whatgifmaybe)
.then(res => res.arrayBuffer())
.then(ab => isGifAnimated(new Uint8Array(ab)))
.then(console.log);
}
}
function clooktv(intv) {
var finds=[];
document.getElementById('imgag').title=intv;
if (ingifchosen) {
finds=document.getElementById('simgag').outerHTML.split('>' + intv + '');
if (eval('' + finds.length) > 1) {
document.getElementById('simgag').innerHTML=document.getElementById('simgag').innerHTML.replace(' selected',' data-selected').replace('>' + ingifstyle + '', ' selected>' + ingifstyle + '');
}
}
document.body.innerHTML+='';
return intv;
}
function changelook() {
var finds=[];
if (ingifint > 0) {
setTimeout(changelook, ingifint);
if (ingifchosen) {
ingifchosen=false;
} else {
finds=document.getElementById('simgag').outerHTML.split('>' + ingifstyle + '');
if (eval('' + finds.length) > 1) {
if (finds[1].indexOf('') == 0) {
ingifstyle='filter: none;';
document.getElementById('simgag').innerHTML=document.getElementById('simgag').innerHTML.replace(' selected',' data-selected').replace('>' + ingifstyle + '', ' selected>' + ingifstyle + '');
} else {
ingifstyle=finds[1].split('>')[1].split('<')[0];
document.getElementById('simgag').innerHTML=document.getElementById('simgag').innerHTML.replace(' selected',' data-selected').replace('>' + ingifstyle + '', ' selected>' + ingifstyle + '');
}
document.getElementById('simgag').value=clooktv(ingifstyle);
}
}
}
}
/** @param {Uint8Array} uint8 */
function isGifAnimated (uint8) { // thanks to https://stackoverflow.com/questions/69564118/how-to-get-duration-of-gif-image-in-javascript#:~:text=Mainly%20use%20parseGIF()%20%2C%20then,duration%20of%20a%20GIF%20image.
let duration = 0;
for (let i = 0, len = uint8.length; i < len; i++) {
if (uint8[i] == 0x21
&& uint8[i + 1] == 0xF9
&& uint8[i + 2] == 0x04
&& uint8[i + 7] == 0x00)
{
const delay = (uint8[i + 5] << 8) | (uint8[i + 4] & 0xFF);
duration += delay < 2 ? 10 : delay;
}
}
//alert('' + eval(duration / 100));
if (eval(duration / 100) > 0.11) {
var damore='';
if (document.getElementById('aside')) {
if (document.getElementById('aside').outerHTML.toLowerCase().indexOf('';
document.getElementById('aside').style.zIndex='200';
document.getElementById('aside').innerHTML=' Animated GIF ' + ingif.split('#')[0].split('?')[0] + ' duration is ' + eval(duration / 100) + ' seconds ' + damore;
document.getElementById('image').style.opacity='0.5';
document.getElementById('image').style.width='5%';
document.getElementById('isub').style.opacity='0.5';
//ingifint=eval(duration * 10);
//setTimeout(changelook, eval(duration * 10));
if (('' + location.hash).replace('#','') == '') {
document.getElementById('aside').scrollIntoView();
} //else if (('' + location.hash).replace('#','') == 'content') {
//document.getElementById('aside').scrollIntoView();
//window.top.scrollTo(0,0); // top.location.href='#content';
//}
} else {
document.getElementById('aside').innerHTML=' ( animated GIF ' + ingif.split('#')[0].split('?')[0] + ' duration is ' + eval(duration / 100) + ' seconds)' + damore;
}
}
}
document.body.style.cursor='pointer';
return duration / 100; // if 0.1 is not an animated GIF
}
function preob() {
ob(image);
}
function ob(tv) {
prefetch(tv);
if ((tv + '~').toLowerCase().indexOf('.png~') != -1) {
straightaway='';
image=encodeURIComponent(tv);
document.getElementById('myform').target='itwo';
document.getElementById('isub').value=document.getElementById('isub').value.replace('Exif ','Metadata ');
setTimeout(anth, 65000);
} else if ((tv + '~').toLowerCase().indexOf('.jpeg~') != -1 || (tv + '~').toLowerCase().indexOf('.jpg~') != -1) {
if ((tv + '~').toLowerCase().indexOf('rjmprogramming.com.au') != -1 || (tv + '~').toLowerCase().indexOf('http') == -1) {
straightaway=document.URL.split('#')[0].split('?')[0] + '?image=' + encodeURIComponent(tv);
} else {
straightaway='';
}
}
}
function anth() {
var dis=new Date();
top.document.location.href='//www.rjmprogramming.com.au/PHP/read_exif_off_image_rotate.php?return=' + dis.toGMTString() + '&animg=' + image;
}
function doalert() {
alert('Please click OK in more than 60 seconds to receive report.');
setTimeout(anth, 6000);
}
function spagif() {
document.getElementById('spag').innerHTML=\"
\";
}
function doone() {
" . $doaside . "
var xdis=new Date();
parent.document.getElementById('ione').src='//www.rjmprogramming.com.au/PHP/read_exif_off_image_rotate.php?return=' + xdis.toGMTString() + '&animg=' + image;
parent.document.getElementById('ione').style.display='block';
}
" . $lasts . "
";
if (isset($_GET['donothing'])) {
echo "";
} else {
$anotheroption="";
if (isset($_GET['viaparent'])) { $anotheroption="
Non Exif "; }
$nform="
" . $daside . "
" . $aside;
$rotbit="";
$htmlis="";
$indiv="";
$maptemplate="//www.rjmprogramming.com.au/PHP/Map/map.php?title=&onclick=y&label=[%27Lat%27,&value=%27Lon%27,%20%27Name%27]&data=,%20[-33.967,151.2422,~~]";
$factor=1.0;
$sbit="";
$various=" ";
$wasvarious="youl" . "lneverfin" . "dthis";
if (isset($_GET['image'])) {
$image = urldecode($_GET['image']);
} else if (isset($_POST['image'])) {
$image = urldecode($_POST['image']);
} else if (file_exists("/Applications/MAMP/htdocs/clouds.jpg")) {
$image = "/Applications/MAMP/htdocs/clouds.jpg";
} else {
$image="";
if (file_exists("/tmp/pnginfo.txt") && isset($_GET['return'])) {
$stuff=@file_get_contents("/tmp/pnginfo.txt");
echo "" . $javascript . "
" . str_replace("\n", " ", $stuff) . "
" . $nform . "";
try {
unlink("/tmp/pnginfo.txt");
} catch (Exception $ex) { }
} else {
echo "" . $javascript . "" . $nform . "";
}
exit;
}
$types = array(
1 => "GIF",
2 => "JPEG",
3 => "PNG",
4 => "SWF",
5 => "PSD",
6 => "BMP",
7 => "TIFF",
8 => "TIFF"
);
$imagetype = exif_imagetype($image);
if ($types[$imagetype] == "PNG") {
if (file_exists("/tmp/pnginfo.txt")) {
unlink("/tmp/pnginfo.txt");
}
exec('echo "/home/virtfs/rjmprogr/usr/local/cpanel/3rdparty/bin/identify -verbose ' . $image . ' > /tmp/pnginfo.tt ; chgrp rjmprogr /tmp/pnginfo.tt ; chown rjmprogr /tmp/pnginfo.tt; mv /tmp/pnginfo.tt /tmp/pnginfo.txt" > /tmp/pnginfo.ksh');
if (file_exists("/tmp/pnginfo.ksh")) {
$bcnt=0;
while (!file_exists("/tmp/pnginfo.txt") || $bcnt < 20) {
if (file_exists("/tmp/pnginfo.txt")) {
sleep(5);
$stuff="";
$stuff=@file_get_contents("/tmp/pnginfo.txt");
if (trim($stuff) != "") {
//unlink("/tmp/pnginfo.txt");
//header("Location: http://www.rjmprogramming.com.au/PHP/read_exif_off_image_rotate.php?return=y");
echo "" . $javascript . "
" . str_replace("\n", " ", $stuff) . "
";
try {
unlink("/tmp/pnginfo.txt");
} catch (Exception $ex2) { }
} else {
echo "" . $javascript . "
";
}
$bcnt=21;
exit;
} else {
sleep(6);
}
$bcnt++;
}
} else {
// Imagick Type // thanks to http://php.net/manual/en/imagick.getimageproperties.php
// ---------------------------------------------
$imagick_type = new Imagick($image);
// Open File
// ---------------------------------------------
$file_to_grab = $image;
$file_handle_for_viewing_image_file = fopen($file_to_grab, 'a+');
// Grab File
// ---------------------------------------------
$imagick_type->readImageFile($file_handle_for_viewing_image_file);
// Get Image Properties
// ---------------------------------------------
$imagick_type_properties = $imagick_type->getImageProperties('*', FALSE);
// Print Image Properties
// ---------------------------------------------
print("
");
print_r($imagick_type_properties);
// Print Each Individual, Image Property
// ---------------------------------------------
foreach($imagick_type_properties as $value)
{
print("$value --- ");
print($imagick_type->getImageProperty("$value"));
print(" ");
}
print(" ");
}
} else {
if (array_key_exists($imagetype, $types)) {
$anotheroption="";
if (isset($_GET['viaparent'])) { $anotheroption="
Non Exif "; }
$htmlis="" . $javascript . "
Exif for " . $image . " Exif for zipfile " . $anotheroption . " " . $image . $zaside . " " . " Image type of " . $image . " is: " . $types[$imagetype];
$exif = exif_read_data($image, 0, true);
foreach ($exif as $key => $section) {
foreach ($section as $name => $val) {
if (sizeof($val) > 1) {
$indiv.="
" . " $key.$name: " . $val[0];
$nthing=0.0;
$vs=explode("/",$val[0]);
if (sizeof($vs) == 1) {
$vs1=1.0;
} else {
$vs1=$vs[1];
}
if ($key == "GPS" && $name == "GPSAltitude") {
$vs=explode("/",$val[0]);
if (sizeof($vs) == 1) {
$vs1=1.0;
} else {
$vs1=$vs[1];
}
$various.=" up at " . ($vs[0] / $vs1) / ($factor);
$htmlis=str_replace($wasvarious, $wasvarious . " up at " . ($vs[0] / $vs1) / ($factor), $htmlis);
}
if ($key == "EXIF" && $name == "ShutterSpeedValue") {
$vs=explode("/",$val[0]);
if (sizeof($vs) == 1) {
$vs1=1.0;
} else {
$vs1=$vs[1];
}
$various.=" with (" . ($vs[0] / $vs1) . ",";
}
if ($key == "EXIF" && $name == "ApertureValue") {
$vs=explode("/",$val[0]);
if (sizeof($vs) == 1) {
$vs1=1.0;
} else {
$vs1=$vs[1];
}
$various.=($vs[0] / $vs1) . ")";
}
if ($key == "GPS" && $name == "GPSLatitude") {
$nthing+=($vs[0] / $vs1) / ($factor);
$factor*=60;
} else if ($key == "GPS" && $name == "GPSLongitude") {
$nthing+=($vs[0] / $vs1) / ($factor);
$factor*=60;
}
for ($jj=1; $jj
window.open(\"" . $maptemplate . "\",\"_blank\",\"top=50,left=50,height=500,width=500\"); ";
$sbit=" ";
$wasvarious="Geolocation Context for Photograph" . $various;
$htmlis=str_replace("Geolocation Context for Photograph ", "Geolocation Context for Photograph" . $various, str_replace("visibility:hidden", "visibility:visible", $htmlis));
}
} else {
if ($key == "FILE" && $name == "FileName") {
$maptemplate=str_replace("~~", "~" . urlencode($val) . "~", $maptemplate);
$maptemplate=str_replace("title=&", "title=" . urlencode($val) . urlencode($various) . "&", $maptemplate);
} else if ($key == "EXIF" && $name == "ShutterSpeedValue") {
$vs=explode("/",$val);
if (sizeof($vs) == 1) {
$vs1=1.0;
} else {
$vs1=$vs[1];
}
$various.=" with (" . ($vs[0] / $vs1) . ",";
} else if ($key == "EXIF" && $name == "ApertureValue") {
$vs=explode("/",$val);
if (sizeof($vs) == 1) {
$vs1=1.0;
} else {
$vs1=$vs[1];
}
$various.=($vs[0] / $vs1) . ")";
} else if ($key == "EXIF" && $name == "DateTimeOriginal") {
$various.=" on " . $val;
} else if ($key == "GPS" && $name == "GPSAltitude") {
$vs=explode("/",$val);
if (sizeof($vs) == 1) {
$vs1=1.0;
} else {
$vs1=$vs[1];
}
$various.=" up at " . ($vs[0] / $vs1) / ($factor);
$htmlis=str_replace($wasvarious, $wasvarious . " up at " . ($vs[0] / $vs1) / ($factor), $htmlis);
} else if ($key == "GPS" && $name == "GPSAltitudeRef" && trim($val) != "") {
$factor=-1.0;
} else if ($key == "GPS" && $name == "GPSAltitudeRef" && trim($val) == "") {
$factor=1.0;
} else if ($key == "GPS" && $name == "GPSLatitudeRef" && $val == "S") {
$factor=-1.0;
} else if ($key == "GPS" && $name == "GPSLongitudeRef" && $val == "W") {
$factor=-1.0;
} else if ($key == "GPS" && $name == "GPSLatitudeRef" && $val == "N") {
$factor=1.0;
} else if ($key == "GPS" && $name == "GPSLongitudeRef" && $val == "E") {
$factor=1.0;
}
$indiv.=" " . " $key.$name: $val";
}
if (($key.$name) == "IFD0Orientation") {
if (str_replace(" ","","$val") == "8") {
//$htmlis="" . $javascript . "Exif for " . $image . " Exif for zipfile " . $image . " RJM Programming - August, 2016 " . " Image type of " . $image . " is: " . $types[$imagetype];
$htmlis=str_replace("; norepeat; ", "; opacity:0.6; norepeat; -webkit-transform: rotate(270deg); -moz-transform: rotate(270deg); -ms-transform: rotate(270deg); -o-transform: rotate(270deg); transform: rotate(270deg); ", $htmlis);
} else if (str_replace(" ","","$val") == "6") {
//$htmlis="" . $javascript . "
Exif for " . $image . " Exif for zipfile " . $image . " RJM Programming - August, 2016 " . " Image type of " . $image . " is: " . $types[$imagetype];
$htmlis=str_replace("; norepeat; ", "; opacity:0.6; norepeat; -webkit-transform: rotate(90deg); -moz-transform: rotate(90deg); -ms-transform: rotate(90deg); -o-transform: rotate(90deg); transform: rotate(90deg); ", $htmlis);
} else if (str_replace(" ","","$val") == "3") {
//$htmlis="" . $javascript . "
Exif for " . $image . " Exif for zipfile " . $image . " RJM Programming - August, 2016 " . " Image type of " . $image . " is: " . $types[$imagetype];
$htmlis=str_replace("; norepeat; ", "; opacity:0.6; norepeat; -webkit-transform: rotate(180deg); -moz-transform: rotate(180deg); -ms-transform: rotate(180deg); -o-transform: rotate(180deg); transform: rotate(180deg); ", $htmlis);
}
}
}
}
if (str_replace("transXXXform:","",$htmlis) != $htmlis) {
echo str_replace("
" . $indiv . "
" . $nform . $sbit . "";
} else {
echo $htmlis . $indiv . "
" . $nform . $sbit . "";
}
} else {
echo "
" . "Not a valid image type for " . $image . " or Exif functionality not enabled." . $nform;
}
}
}
?>