From 7044e1691136092a9aba59bf450de50724b0ce7e Mon Sep 17 00:00:00 2001 From: Damjan Savic Date: Sun, 25 Jan 2026 06:24:07 +0100 Subject: [PATCH] auto-claude: subtask-1-1 - Add blog post image processing to optimize-images.js Extended the image optimization script to process both project and blog post images: - Added constants for posts input/output directories - Refactored processImage to accept output directory parameter - Updated processDirectory to handle multiple content types - Main function now processes both projects and posts directories - Gracefully handles missing directories with informative messages --- scripts/optimize-images.js | 41 ++++++++++++++++++++++---------------- 1 file changed, 24 insertions(+), 17 deletions(-) diff --git a/scripts/optimize-images.js b/scripts/optimize-images.js index e002765..76e7ccd 100644 --- a/scripts/optimize-images.js +++ b/scripts/optimize-images.js @@ -9,10 +9,12 @@ const __dirname = dirname(__filename); // Mehr Größen für bessere Mobile-Unterstützung const SIZES = [200, 300, 400, 600, 800, 1200]; -const INPUT_DIR = join(__dirname, '../source-images/projects'); -const OUTPUT_DIR = join(__dirname, '../public/images/projects'); +const PROJECTS_INPUT_DIR = join(__dirname, '../source-images/projects'); +const PROJECTS_OUTPUT_DIR = join(__dirname, '../public/images/projects'); +const POSTS_INPUT_DIR = join(__dirname, '../source-images/posts'); +const POSTS_OUTPUT_DIR = join(__dirname, '../public/images/posts'); -async function processImage(inputPath, projectSlug) { +async function processImage(inputPath, slug, outputBaseDir) { const filename = basename(inputPath, extname(inputPath)); const ext = extname(inputPath).toLowerCase(); @@ -20,10 +22,10 @@ async function processImage(inputPath, projectSlug) { return; } - const outputDir = join(OUTPUT_DIR, projectSlug); + const outputDir = join(outputBaseDir, slug); await mkdir(outputDir, { recursive: true }); - console.log(`Processing: ${projectSlug}/${filename}${ext}`); + console.log(`Processing: ${slug}/${filename}${ext}`); // Optimierte Originalversion (cover.jpg) const originalOutputPath = join(outputDir, `${filename}.jpg`); @@ -88,23 +90,21 @@ async function processImage(inputPath, projectSlug) { } } -async function processDirectory(dirPath) { - if (!existsSync(dirPath)) { - console.error(`Error: Source directory not found: ${dirPath}`); - console.log('\nPlease ensure original images are placed in:'); - console.log(' source-images/projects//cover.jpg'); - process.exit(1); +async function processDirectory(inputDir, outputDir, typeName) { + if (!existsSync(inputDir)) { + console.log(`Skipping ${typeName}: Source directory not found: ${inputDir}`); + return; } - const entries = await readdir(dirPath, { withFileTypes: true }); + const entries = await readdir(inputDir, { withFileTypes: true }); for (const entry of entries) { - const fullPath = join(dirPath, entry.name); + const fullPath = join(inputDir, entry.name); if (entry.isDirectory()) { const coverPath = join(fullPath, 'cover.jpg'); if (existsSync(coverPath)) { - await processImage(coverPath, entry.name); + await processImage(coverPath, entry.name, outputDir); } else { console.log(`Skipping ${entry.name}: no cover.jpg found`); } @@ -114,12 +114,19 @@ async function processDirectory(dirPath) { async function main() { console.log('Starting image optimization...'); - console.log(`Source: ${INPUT_DIR}`); - console.log(`Output: ${OUTPUT_DIR}`); console.log(`Sizes: ${SIZES.join(', ')}px\n`); try { - await processDirectory(INPUT_DIR); + console.log('Processing projects...'); + console.log(`Source: ${PROJECTS_INPUT_DIR}`); + console.log(`Output: ${PROJECTS_OUTPUT_DIR}\n`); + await processDirectory(PROJECTS_INPUT_DIR, PROJECTS_OUTPUT_DIR, 'projects'); + + console.log('\nProcessing posts...'); + console.log(`Source: ${POSTS_INPUT_DIR}`); + console.log(`Output: ${POSTS_OUTPUT_DIR}\n`); + await processDirectory(POSTS_INPUT_DIR, POSTS_OUTPUT_DIR, 'posts'); + console.log('\nImage optimization complete!'); } catch (error) { console.error('Error during optimization:', error);