22-04-2022

This commit is contained in:
2022-04-22 15:48:30 +02:00
parent 97a73cc2d1
commit e73a0c3a4b
7 changed files with 682 additions and 294 deletions

View File

@@ -28,6 +28,8 @@
<body>
<h1><?php echo gettext('Clean / repare database'); ?></h1>
<?php
$base = 'db_photo.sqlite3';
@@ -39,28 +41,8 @@ $th_h = 300;
$img_path = "photos/img/";
$thumb_path = "photos/thumb/";
//$dir = (new AdvancedFilesystemIterator('photos/img/'))->match('/heic|HEIC|jpg|jpeg|JPG|JPEG|webp|WEBP$/');
//echo '<h3>' . count($dir) . gettext(' images found in folder') . ' <i>photos/img/</i> ...</h3>';
//_pr($dir);
/*
foreach($dir as $file){
//$file->getFilename()
//$file->getpathName()
$file = $file->getpathName();
$x = in_bdd($file);
if ($x == false) { //false
}
}
*/
echo '<h2>' . gettext('Clean folder img...') . '</h2>';
$originals = array_map('basename', glob('photos/img/*.{jpg,jpeg,JPG,JPEG,heic,HEIC,webp,WEBP}', GLOB_BRACE));
$thumbs = array_map('basename', glob('photos/thumb/*.{jpg,jpeg,JPG,JPEG,heic,HEIC,webp,WEBP}', GLOB_BRACE));
@@ -68,6 +50,7 @@ $thumbs = array_map('basename', glob('photos/thumb/*.{jpg,jpeg,JPG,JPEG,heic,HEI
$missing_thumbs = array_diff($originals, $thumbs);
$a = count($missing_thumbs);
echo '<h3>' . gettext('Missing thumbs: ') . $a . '</h3>';
if ($a > 0) {
echo '<h4>' . gettext('Create missing thumbs...') . '</h4>';
@@ -79,13 +62,15 @@ if ($a > 0) {
}
$missing_originals = array_diff($thumbs, $originals);
$b = count($missing_originals);
$extra_thumbs = array_diff($thumbs, $originals);
$b = count($extra_thumbs);
echo '<h3>' . gettext('Extra thumbs: ') . $b . '</h3>';
//_pr($extra_thumbs);
if ($b > 0) {
echo '<h4>' . gettext('Delete extra thumbs...') . '</h4>';
foreach($missing_originals as $thumb){
foreach($extra_thumbs as $thumb){
$file = $thumb_path . $thumb;
if (unlink($file)) {
echo $thumb . gettext(' was deleted successfully!') . '<br>';
@@ -95,10 +80,8 @@ if ($b > 0) {
}
}
_pr($missing_thumbs);
_pr($missing_originals);
echo '<h3>' . gettext('Compare folder img and daatabase...') . '</h3>';
echo '<h2>' . gettext('Compare folder img and database...') . '</h2>';
try {
$conn = new PDO("sqlite:db_photo.sqlite3");
@@ -112,7 +95,6 @@ try {
$result = $stmt->fetchAll(PDO::FETCH_CLASS);
$rowcount = count($result);
//$conn = null;
}
catch(PDOException $e) {
echo $e->getMessage();
@@ -122,47 +104,393 @@ try {
$bdd = array();
foreach($result as $file) {
//$img = $file->filename;
$bdd[] = $file->filename;
}
$base = array_map('basename', $bdd);
$missing_originals = array_diff($base, $originals);
$c = count($missing_originals);
echo count($base) . " entries in database". "<br />";
echo count($originals) . " files on disk" . "<br />";
$extra_in_bdd= array_diff($base, $originals);
$c = count($extra_in_bdd);
echo '<h3>' . gettext('Extra images in database: ') . $c . '</h3>';
if ($c > 0) {
echo '<h4>' . gettext('Delete extra images in database...') . '</h4>';
//foreach($missing_originals as $img){
foreach($missing_originals as $key => $img){
echo $key;
$query2 = "DELETE FROM photos WHERE id=:id";
$stmt=$conn->prepare($query2);
$stmt->bindParam(':id',$key,PDO::PARAM_INT, 5);
if($stmt->execute()){
echo "Successfully deleted record ";
} else {
print_r($sql->errorInfo());
}
foreach($extra_in_bdd as $img){
$file = $img_path . $img;
$query4 = "DELETE FROM photos WHERE filename=:filename";
$stmt = $conn->prepare($query4);
$stmt->bindParam(':filename', $file);
$result = $stmt->execute();
if ($result) {
echo $img . gettext(' has been deleted from database !') . "<br />";
}
}
}
//_pr($bdd);
//_pr($base);
$missing_in_bdd = array_diff($originals, $base);
$d = count($missing_in_bdd);
_pr($missing_originals);
echo '<h3>' . gettext('Missing images in database: ') . $d . '</h3>';
if ($d > 0) {
echo '<h4>' . gettext('Adding missing images in database...') . '</h4>';
$i = 1;
$photos = array();
foreach($missing_in_bdd as $img){
$file = $img_path . $img;
$query4 = "INSERT INTO photos WHERE filename=:filename";
/*
foreach($fileList as $filename){
echo $filename;
if ($exif = @exif_read_data($file, 0, true )) {
$mod = isset($exif['IFD0']['Model']) ? $exif['IFD0']['Model'] : '';
# YYYY-MM-DD HH:MM:SS.SSS - 2019:10:01 14:03:12
$da = isset($exif['EXIF']['DateTimeOriginal']) ? $exif['EXIF']['DateTimeOriginal'] : '';
if (isset($exif['EXIF']['UndefinedTag:0xA434'])) {
$w = $exif['EXIF']['UndefinedTag:0xA434'];
$arr = array("100.0 mm" => "EF100mm f/2.8 Macro USM", "100.0-400.0 mm" => "EF100-400mm f/4.5-5.6L IS USM", "140.0-560.0 mm" => "EF100-400mm f/4.5-5.6L IS USM +1.4x II", "17.0-40.0 mm" => "EF17-40mm f/4L USM", "24-70mm" => "SIGMA 24-70mm F2.8 EX DG", "70.0-200.0 mm" => "EF70-200mm f/4L USM", "10.0-22.0 mm" => "EF-S10-22mm f/3.5-4.5 USM", "500.0 mm" => "Sigma 500mm f/4.5 EX HSM ", "500mm" => "Sigma 500mm f/4.5 EX HSM ");
if (array_key_exists($w, $arr)) $obj= $arr[$w];
else $obj = $w;
} else {
$obj = '';
}
if (isset($exif['EXIF']['ExposureTime'])) {
$q = explode('/', $exif['EXIF']['ExposureTime']);
$sp = ($q[0] > 1) ? ($q[0] / $q[1]) . "s" : $exif['EXIF']['ExposureTime'];
} else {
$sp = '';
}
$iso = isset($exif['EXIF']['ISOSpeedRatings']) ? $exif['EXIF']['ISOSpeedRatings'] : '';
if (isset($exif['EXIF']['MeteringMode'])) {
$mm = $exif['EXIF']['MeteringMode'];
switch ($mm) {
case 1: $mm = gettext("Average");
break;
case 2: $mm = gettext("Center-weighted average"); // Moy. à pred. centrale
break;
case 3: $mm = gettext("Spot");
break;
case 4: $mm = gettext("Multi-Spot");
break;
case 5: $mm = gettext("Pattern"); // Mesure évaluative
break;
case 6: $mm = gettext("Partial"); // Mesure sélective
break;
default: $mm = gettext("Unknown") . ': ' . $mm;
// Evaluative Mesure évaluative
// Centre-weighted Average Moy. à pred. centrale
// Partial Mesure sélective
// Spot Spot
// Pattern =Mesure évaluative (30D)
// Average Mesure évaluative
}
} else {
$mm = '';
}
if (isset($exif['EXIF']['Flash'])) {
$fla = $exif['EXIF']['Flash'];
switch ($fla) {
case 0: $fla = gettext("Off");
break;
case 1: $fla = gettext("Auto");
break;
case 2: $fla = gettext("On");
break;
case 3: $fla = gettext("Red Eye Reduction");
break;
case 4: $fla = gettext("Slow Synchro");
break;
case 5: $fla = gettext("Auto + Red Eye Reduction");
break;
case 6: $fla = gettext("On + Red Eye Reduction");
break;
case 16: $fla = gettext("External Flash");
break;
default: $fla = gettext("Unknown");
}
} else {
$fla = '';
}
if (isset($exif['EXIF']['FocalLength'])) {
$k = explode('/', $exif['EXIF']['FocalLength']);
$fl = $k[0] . " mm";
} else {
$fl = '';
}
if (isset($exif['EXIF']['WhiteBalance'])) {
$wb = $exif['EXIF']['WhiteBalance'];
switch ($wb) {
case 0: $wb = gettext("Auto");
break;
case 1: $wb = gettext("Daylight");
break;
case 2: $wb = gettext("Cloudy");
break;
case 3: $wb = gettext("Tungsten");
break;
case 4: $wb = gettext("Fluorescent");
break;
case 5: $wb = gettext("Flash");
break;
case 6: $wb = gettext("Custom");
break;
case 7: $wb = gettext("Black & White");
break;
case 8: $wb = gettext("Shade");
break;
case 9: $wb = gettext("Manual Temperature (Kelvin)");
break;
default: $wb = gettext("Unknown");
}
} else {
$wb = '';
}
if (isset($exif['EXIF']['ExposureProgram'])) {
$ep = $exif['EXIF']['ExposureProgram'];
switch ($ep) {
case 1: $ep = gettext('Manual');
break;
case 2: $ep = gettext('Program');
break;
case 3: $ep = gettext('Aperture Priority');
break;
case 4: $ep = gettext('Shutter Priority');
break;
case 5: $ep = gettext('Program Creative');
break;
case 6: $ep = gettext('Program Action');
break;
case 7: $ep = gettext('Portrait');
break;
case 8: $ep = gettext('Landscape');
break;
default: $ep = gettext('Unknown') . ': ' . $data;
break;
}
} else {
$ep = '';
}
$wi = isset($exif['COMPUTED']['Width']) ? $exif['COMPUTED']['Width'] : '';
$he = isset($exif['COMPUTED']['Height']) ? $exif['COMPUTED']['Height'] : '';
$ht = isset($exif['COMPUTED']['html']) ? $exif['COMPUTED']['html'] : '';
$ap = isset($exif['COMPUTED']['ApertureFNumber']) ? $exif['COMPUTED']['ApertureFNumber'] : '';
$gps = get_gps($exif);
$photos[$i] = array(
'filename' => $file,
'date' => $da,
'lens' => $obj,
'speed' => $sp,
'iso' => $iso,
'width' => $wi,
'height' => $he,
'html' => $ht,
'aperture' => $ap,
'model' => $mod,
'lat' => $gps['latitude'],
'long' => $gps['longitude'],
'alt' => $gps['altitude'],
'metering' => $mm,
'flash' => $fla,
'focal' => $fl,
'wb' => $wb,
'program' => $ep
);
}
if ($iptc = @getimagesize($file, $info)) {
//_pr($iptc);
if (isset($info["APP13"])) {
$mots = "";
$iptc = iptcparse ($info["APP13"]);
$legende = (isset($iptc["2#120"][0])) ? $iptc["2#120"][0] : '';
$copyright = (isset($iptc["2#116"][0])) ? $iptc["2#116"][0] : '';
$title = (isset($iptc["2#105"][0])) ? $iptc["2#105"][0] : '';
$creator = (isset($iptc["2#080"][0])) ? $iptc["2#080"][0] : '';
$mots_cles = (isset($iptc["2#025"])) ? $iptc["2#025"] : '';
if (!empty($mots_cles)) {
foreach ($mots_cles as $key => $val) {
$mots .= $val . ",";
}
$mots = substr($mots, 0, -1);
}
$photos[$i]['legende'] = $legende;
$photos[$i]['copyright'] = $copyright;
$photos[$i]['title'] = $title;
$photos[$i]['creator'] = $creator;
$photos[$i]['mots_cles'] = $mots;
}
else {
$photos[$i]['legende'] = '';
$photos[$i]['copyright'] = '';
$photos[$i]['title'] = '';
$photos[$i]['creator'] = '';
$photos[$i]['mots_cles'] = '';
}
}
$i++;
}
*/
//_pr($fileList);
$query5 = "SELECT MAX(id) FROM photos";
$stmt = $conn->prepare($query5);
$stmt->execute();
$resultat = $stmt->fetch(PDO::FETCH_ASSOC);
$avant = $resultat['MAX(id)'];
$nb_avant = (isset($avant)) ? $avant : 0;
try {
$query2 = "INSERT OR IGNORE INTO photos (filename, date, lens, speed, iso, width, height, html, aperture, model, lat, long, alt, legende, copyright, title, creator, keywords, metering, flash, focal, wb, program) VALUES (:filename, :date, :lens, :speed, :iso, :width, :height, :html, :aperture, :model, :lat, :long, :alt, :legende, :copyright, :title, :creator, :keywords, :metering, :flash, :focal, :wb, :program)";
$stmt = $conn->prepare($query2);
$stmt->bindParam(':filename', $file);
$stmt->bindParam(':date', $da);
$stmt->bindParam(':lens', $obj);
$stmt->bindParam(':speed', $sp);
$stmt->bindParam(':iso', $iso);
$stmt->bindParam(':width', $wi);
$stmt->bindParam(':height', $he);
$stmt->bindParam(':html', $ht);
$stmt->bindParam(':aperture', $ap);
$stmt->bindParam(':model', $mod);
$stmt->bindParam(':lat', $gps['latitude']);
$stmt->bindParam(':long', $gps['longitude']);
$stmt->bindParam(':alt', $gps['altitude']);
$stmt->bindParam(':legende', $leg);
$stmt->bindParam(':copyright', $cop);
$stmt->bindParam(':title', $tit);
$stmt->bindParam(':creator', $crea);
$stmt->bindParam(':keywords', $mot);
$stmt->bindParam(':metering', $mm);
$stmt->bindParam(':flash', $fla);
$stmt->bindParam(':focal', $fl);
$stmt->bindParam(':wb', $wb);
$stmt->bindParam(':program', $ep);
if (isset($photos)) {
foreach ($photos as $item) {
$file = $item['filename'];
$da = $item['date'];
$obj = $item['lens'];
$sp = $item['speed'];
$iso = $item['iso'];
$wi = $item['width'];
$he = $item['height'];
$ht = $item['html'];
$ap = $item['aperture'];
$mod = $item['model'];
$gps['latitude'] = $item['lat'];
$gps['longitude'] = $item['long'];
$gps['altitude'] = $item['alt'];
$leg = $item['legende'];
$cop = $item['copyright'];
$tit = $item['title'];
$crea = $item['creator'];
$mot = $item['mots_cles'];
$mm = $item['metering'];
$fla = $item['flash'];
$fl = $item['focal'];
$wb = $item['wb'];
$ep = $item['program'];
create_thumb($th_w, $th_h, $file);
$stmt->execute();
}
}
}
catch(PDOException $e) {
echo $e->getMessage();
}
try {
$query4 = "SELECT filename, date, lens, speed, iso, width, height, html, aperture, model, lat, long, alt, legende, copyright, title, creator, keywords, metering, flash, focal, wb, program FROM photos WHERE id > ? ORDER BY date DESC";
$stmt = $conn->prepare($query4);
$stmt->bindValue(1, $nb_avant, SQLITE3_INTEGER); // (1,3...) 1=1ere valeur 3=valeur
$stmt->execute();
echo '<h3>' . gettext('Reading added photos') . ':</h3>';
echo '<div id="add_to_bdd">';
echo '<table class="styled-table">';
echo '<thead>';
echo '<th>' . gettext('Thumb') . '</th><th>' . gettext('Filename') . '</th><th>' . gettext('Date') . '</th><th>' . gettext('Lens') . '</th><th>' . gettext('Speed') . '</th><th>' . gettext('Iso') . '</th><th>' . gettext('Width') . '</th><th>' . gettext('Height') . '</th><th>' . gettext('Html') . '</th>';
echo '<th>' . gettext('Aperture') . '</th><th>' . gettext('Model') . '</th><th>' . gettext('Latitude') . '</th><th>' . gettext('Longitude') . '</th><th>' . gettext('Alttitude') . '</th><th>' . gettext('Legende') . '</th><th>' . gettext('Copyright') . '</th><th>' . gettext('Title') . '</th>';
echo '<th>' . gettext('Creator') . '</th><th>' . gettext('Keywords') . '</th><th>' . gettext('Metering') . '</th><th>' . gettext('Flash') . '</th><th>' . gettext('Focal') . '</th><th>' . gettext('Wb') . '</th><th>' . gettext('Program') . '</th>';
echo '</thead>';
echo '<tbody>';
while ($row = $stmt->fetch(PDO::FETCH_ASSOC)) {
$thumbnail = host() . str_replace("photos/img", "photos/thumb", $row['filename']);
$full = host() . $row['filename'];
echo '<tr><td>' . '<a href="' . $full . '"><img src="'.$thumbnail.'" /></a>' . '</td><td>' . $row['filename'] . '</td><td>' . $row['date'] . '</td><td>' . $row['lens'] . '</td><td>' . $row['speed'] . '</td><td>' . $row['iso'] . '</td><td>' . $row['width'] . '</td><td>' . $row['height'] . '</td><td>' . $row['html'] . '</td><td>' . $row['aperture'] . '</td><td>' . $row['model'] . '</td><td>' . $row['lat'] . '</td><td>' . $row['long'] . '</td><td>' . $row['alt'] . '</td><td>' . $row['legende'] . '</td><td>' . $row['copyright'] . '</td><td>' . $row['title'] . '</td><td>' . $row['creator'] . '</td><td>' . $row['keywords'] . '</td><td>' . $row['metering'] . '</td><td>' . $row['flash'] . '</td><td>' . $row['focal'] . '</td><td>' . $row['wb'] . '</td><td>' . $row['program'] . '</td></tr>';
}
echo '</tbody></table>';
echo '</div>';
$conn = null;
}
catch(PDOException $e) {
echo $e->getMessage();
}
$conn = null;
}
//echo '<h3>' . gettext('Find duplicate images in database: ') . '</h3>';
?>
<p class="navPage"><a href="index.php" title="<?php echo gettext("Home"); ?>"><?php echo gettext("Home"); ?></a> | <a href="maps.php" title="<?php echo gettext("Maps"); ?>"><?php echo gettext("Maps"); ?></a> | <a href="photo-du-mois.php" title="<?php echo gettext("Picture of the month"); ?>"><?php echo gettext("Picture of the month"); ?></a> | <a href="admin/index.php" title="<?php echo gettext("Admin"); ?>"><?php echo gettext("Admin"); ?></a></p>
<p><em><small>&copy; 2013-<?php echo date('Y'); ?> sur-le-sentier.fr</small></em></p>