Skip to content

Instantly share code, notes, and snippets.

@ecerulm
Created September 20, 2010 08:01
Show Gist options
  • Save ecerulm/587573 to your computer and use it in GitHub Desktop.
Save ecerulm/587573 to your computer and use it in GitHub Desktop.
<?php
error_reporting(E_ALL);
/* Make PEL speak the users language, if it is available. */
setlocale(LC_ALL, '');
require_once('pel/PelDataWindow.php');
require_once('pel/PelJpeg.php');
require_once('pel/PelTiff.php');
$prog = array_shift($argv);
$file = '';
while (!empty($argv)) {
switch ($argv[0]) {
case '-d':
Pel::$debug = true;
break;
case '-s':
Pel::$strict = true;
break;
default:
$file = $argv[0];
break;
}
array_shift($argv);
}
if (empty($file)) {
printf("Usage: %s [-d] [-s] <filename>\n", $prog);
print("Optional arguments:\n");
print(" -d turn debug output on.\n");
print(" -s turn strict parsing on (halt on errors).\n");
print("Mandatory arguments:\n");
print(" filename a JPEG or TIFF image.\n");
exit(1);
}
if (!is_readable($file)) {
printf("Unable to read %s!\n", $file);
exit(1);
}
/* We typically need lots of RAM to parse TIFF images since they tend
* to be big and uncompressed. */
ini_set('memory_limit', '32M');
$data = new PelDataWindow(file_get_contents($file));
if (PelJpeg::isValid($data)) {
$img = new PelJpeg();
} elseif (PelTiff::isValid($data)) {
$img = new PelTiff();
} else {
print("Unrecognized image format! The first 16 bytes follow:\n");
PelConvert::bytesToDump($data->getBytes(0, 16));
exit(1);
}
/* Try loading the data. */
$img->load($data);
$exif = $img->getSection(PelJpegMarker::APP1);
$tiff = $exif->getTiff();
$ifd0 = $tiff->getIfd();
$entry = $ifd0->getEntry(PelTag::DATE_TIME);
$time = $entry->getValue();
$cameradate = mktime(1, 0, 0, 11, 30, 1999);
print("camera date: " . $cameradate . " " . date(DATE_RFC822,$cameradate) . "\n");
$tripstartdate = mktime(10,0,0,3,2,2006);
print("trip start date: " . $tripstartdate . " " . date(DATE_RFC822,$tripstartdate) . "\n");
$timediff = $tripstartdate - $cameradate;
print ("diff: " . $timediff . "\n");
print('The image was taken on the ' . $time . " " . date(DATE_RFC822,$time) . "\n");
$time = $time+$timediff;
$entry->setValue($time);
print('new date ' . date(DATE_RFC822,$time) . "\n");
//sub ifds
$ifd0_0 = $ifd0->getSubIfd(PelIfd::EXIF); // IFD Exif
$entry = $ifd0_0->getEntry(PelTag::DATE_TIME_ORIGINAL);
$time = $entry->getValue();
print('$ifd0_0 date_time_original:The image was taken on the ' . $time . " " . date(DATE_RFC822,$time) . "\n");
$time = $time+$timediff;
$entry->setValue($time);
print('new date ' . date(DATE_RFC822,$time) . "\n");
$ifd0_0 = $ifd0->getSubIfd(PelIfd::EXIF); // IFD Exif
$entry = $ifd0_0->getEntry(PelTag::DATE_TIME_DIGITIZED);
$time = $entry->getValue();
print('$ifd0_0 DateTimeDigitized:The image was taken on the ' . $time . " " . date(DATE_RFC822,$time) . "\n");
$time = $time+$timediff;
$entry->setValue($time);
print('new date ' . date(DATE_RFC822,$time) . "\n");
file_put_contents("new-" . $file, $img->getBytes());
//file_put_contents($output, $file->getBytes());
/* Deal with any exceptions: */
if (count(Pel::getExceptions()) > 0) {
print("\nThe following errors were encountered while loading the image:\n");
foreach (Pel::getExceptions() as $e)
print("\n" . $e->__toString());
}
?>
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment