' . gettext('Clean folder img...') . ''; $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)); $missing_thumbs = array_diff($originals, $thumbs); $a = count($missing_thumbs); echo '

' . gettext('Missing thumbs: ') . $a . '

'; if ($a > 0) { echo '

' . gettext('Create missing thumbs...') . '

'; foreach($missing_thumbs as $img){ $file = $img_path . $img; create_thumb($th_w, $th_h, $file); echo gettext('Thumb for ') . $img . gettext(' was successfully created!') . '
'; } } $extra_thumbs = array_diff($thumbs, $originals); $b = count($extra_thumbs); echo '

' . gettext('Extra thumbs: ') . $b . '

'; //_pr($extra_thumbs); if ($b > 0) { echo '

' . gettext('Delete extra thumbs...') . '

'; foreach($extra_thumbs as $thumb){ $file = $thumb_path . $thumb; if (unlink($file)) { echo $thumb . gettext(' was deleted successfully!') . '
'; } else { echo gettext('There was a error deleting the file ') . $thumb; } } } echo '

' . gettext('Compare folder img and database...') . '

'; try { $conn = new PDO("sqlite:db_photo.sqlite3"); $conn->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION); $query = "SELECT filename FROM photos"; $stmt = $conn->prepare($query); $stmt->execute();// (1,3...) 1=1ere valeur 3=valeur $result = $stmt->fetchAll(PDO::FETCH_CLASS); $rowcount = count($result); } catch(PDOException $e) { echo $e->getMessage(); } //_pr($result); $bdd = array(); foreach($result as $file) { $bdd[] = $file->filename; } $base = array_map('basename', $bdd); echo count($base) . " entries in database". "
"; echo count($originals) . " files on disk" . "
"; $extra_in_bdd= array_diff($base, $originals); $c = count($extra_in_bdd); echo '

' . gettext('Extra images in database: ') . $c . '

'; if ($c > 0) { echo '

' . gettext('Delete extra images in database...') . '

'; 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 !') . "
"; } } } $missing_in_bdd = array_diff($originals, $base); $d = count($missing_in_bdd); echo '

' . gettext('Missing images in database: ') . $d . '

'; if ($d > 0) { echo '

' . gettext('Adding missing images in database...') . '

'; $i = 1; $photos = array(); foreach($missing_in_bdd as $img){ $file = $img_path . $img; $query4 = "INSERT INTO photos WHERE filename=: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++; } $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 '

' . gettext('Reading added photos') . ':

'; echo '
'; echo ''; echo ''; echo ''; echo ''; echo ''; echo ''; echo ''; while ($row = $stmt->fetch(PDO::FETCH_ASSOC)) { $thumbnail = host() . str_replace("photos/img", "photos/thumb", $row['filename']); $full = host() . $row['filename']; echo ''; } echo '
' . gettext('Thumb') . '' . gettext('Filename') . '' . gettext('Date') . '' . gettext('Lens') . '' . gettext('Speed') . '' . gettext('Iso') . '' . gettext('Width') . '' . gettext('Height') . '' . gettext('Html') . '' . gettext('Aperture') . '' . gettext('Model') . '' . gettext('Latitude') . '' . gettext('Longitude') . '' . gettext('Alttitude') . '' . gettext('Legende') . '' . gettext('Copyright') . '' . gettext('Title') . '' . gettext('Creator') . '' . gettext('Keywords') . '' . gettext('Metering') . '' . gettext('Flash') . '' . gettext('Focal') . '' . gettext('Wb') . '' . gettext('Program') . '
' . '' . '' . $row['filename'] . '' . $row['date'] . '' . $row['lens'] . '' . $row['speed'] . '' . $row['iso'] . '' . $row['width'] . '' . $row['height'] . '' . $row['html'] . '' . $row['aperture'] . '' . $row['model'] . '' . $row['lat'] . '' . $row['long'] . '' . $row['alt'] . '' . $row['legende'] . '' . $row['copyright'] . '' . $row['title'] . '' . $row['creator'] . '' . $row['keywords'] . '' . $row['metering'] . '' . $row['flash'] . '' . $row['focal'] . '' . $row['wb'] . '' . $row['program'] . '
'; echo '
'; $conn = null; } catch(PDOException $e) { echo $e->getMessage(); } $conn = null; } //echo '

' . gettext('Find duplicate images in database: ') . '

'; ?>

© 2013- sur-le-sentier.fr