Files
PhotoGal/web/scripts/process_images.php

112 lines
4.3 KiB
PHP

<?php
// scripts/process_images.php
require_once 'vendor/autoload.php';
use Hpz\Photogal\Database;
use Hpz\Photogal\Image;
use Hpz\Photogal\ThumbnailGenerator;
ini_set('memory_limit', '512M');
$dotenv = Dotenv\Dotenv::createImmutable(__DIR__ . '/..');
$dotenv->load();
if (!isset($_ENV['DB_FILE_PATH']) || !isset($_ENV['IMG_THUMB_WIDTH']) || !isset($_ENV['IMG_THUMB_HEIGHT']) || !isset($_ENV['IMG_THUMB_QUALITY'])) {
die('Required environment variables are not set in the .env file');
}
// Specify the paths
$albumsDir = 'public/images/';
$dbFilePath = $_ENV['DB_FILE_PATH'];
// Create a new Database connection
$database = new Database($dbFilePath);
$image = new Image($database);
// Function to check for albums in the database and remove those that don't exist in the images folder
function cleanUpAlbums(Database $database, $albumsDir)
{
$db = $database->getConnection();
$albumsQuery = "SELECT DISTINCT album FROM images";
$albumsResult = $db->query($albumsQuery);
while ($row = $albumsResult->fetchArray(SQLITE3_ASSOC)) {
$album = $row['album'];
$albumPath = $albumsDir . $album;
if (!is_dir($albumPath)) {
// Remove all images related to this album from the database
$deleteQuery = $db->prepare("DELETE FROM images WHERE album = :album");
$deleteQuery->bindValue(':album', $album, SQLITE3_TEXT);
$deleteQuery->execute();
echo "Removed album '$album' from database as it does not exist in the images folder\n";
}
}
}
// Function to process a directory
function processDirectory($albumDir, $albumName, Image $image)
{
$dirIterator = new RecursiveDirectoryIterator($albumDir, RecursiveDirectoryIterator::SKIP_DOTS);
$iterator = new RecursiveIteratorIterator($dirIterator);
foreach ($iterator as $file) {
if ($file->isFile()) {
$filePath = $file->getPathname();
$fileInfo = pathinfo($filePath);
$fileName = $fileInfo['basename'];
if (in_array(strtolower($fileInfo['extension']), ['jpg', 'jpeg', 'png', 'gif'])) {
$thumbDir = 'public/images/' . $albumName . '/thumbs/';
$bigDir = 'public/images/' . $albumName . '/big/';
$thumbPath = $thumbDir . $fileInfo['filename'] . '.webp';
$bigPath = $bigDir . $fileInfo['filename'] . '.webp';
if (!file_exists($thumbPath)) {
if (!is_dir($thumbDir) && !mkdir($thumbDir, 0777, true) && !is_dir($thumbDir)) {
error_log("Failed to create directory: $thumbDir");
continue;
}
ThumbnailGenerator::createThumbnail($filePath, $thumbPath, $_ENV['IMG_THUMB_WIDTH'], $_ENV['IMG_THUMB_HEIGHT'], $_ENV['IMG_THUMB_QUALITY']);
echo "Created thumbnail for $fileName in $albumName\n";
}
if (!file_exists($bigPath)) {
if (!is_dir($bigDir) && !mkdir($bigDir, 0777, true) && !is_dir($bigDir)) {
error_log("Failed to create directory: $bigDir");
continue;
}
ThumbnailGenerator::createBigImage($filePath, $bigPath);
echo "Created big image for $fileName in $albumName\n";
}
$relativePath = $albumName . '/photos';
$modifiedDate = filemtime($filePath);
$addedDate = time();
$title = $fileInfo['filename'];
$exists = $image->imageExists($albumName, $fileName, $relativePath);
if (!$exists) {
$image->addImage($albumName, $fileName, $relativePath, $modifiedDate, $addedDate, $title);
echo "Added $fileName to database in album $albumName\n";
}
}
}
}
}
// Clean up albums that no longer exist in the images directory
cleanUpAlbums($database, $albumsDir);
// Process existing albums and images
$albums = scandir($albumsDir);
foreach ($albums as $album) {
if ($album !== '.' && $album !== '..' && is_dir($albumsDir . $album)) {
if (strpos($album, 'videos') === false) {
processDirectory($albumsDir . $album . '/photos/', $album, $image);
}
}
}