آیا تا به حال نیاز به تبدیل فرمت یا کاهش حجم ده‌ها عکس به صورت همزمان داشته‌اید؟ مثلاً بخواهید تمام تصاویر JPG خود را به فرمت بهینه‌تر WEBP برای وب‌سایتتان تبدیل کنید. انجام این کار به صورت دستی، فوق‌العاده زمان‌بر و خسته‌کننده است.

خبر خوب این است که با یک اسکریپت ساده و ابزار قدرتمند ImageMagick، می‌توانید این فرآیند را کاملاً خودکار کنید. در این مطلب، یک اسکریپت کاربردی به شما معرفی می‌کنیم که با اجرای آن، می‌توانید تمام تصاویر یک پوشه را به فرمت دلخواه تبدیل و در صورت نیاز، فشرده‌سازی کنید.

ابزار مورد نیاز: ImageMagick

ImageMagick یک مجموعه نرم‌افزار متن‌باز و رایگان برای پردازش تصاویر از طریق خط فرمان است. اگر این ابزار را نصب نکرده‌اید، می‌توانید با دستور زیر (در سیستم‌های مبتنی بر اوبونتو/دبیان) آن را به راحتی نصب کنید:


sudo apt update
sudo apt install imagemagick

اسکریپت نهایی برای تبدیل و فشرده‌سازی

این اسکریپت تمام کارها را برای شما انجام می‌دهد.


\#!/bin/bash

# از کاربر فرمت مورد نظر برای تبدیل را درخواست می‌کند

read -p "Enter the format you want to convert to (e.g., png, webp, jpg): " TARGET_FORMAT

# بررسی می‌کند که آیا کاربر فرمتی را وارد کرده است یا خیر

if [ -z "\$TARGET_FORMAT" ]; then
echo "No format specified. Aborting."
exit 1
fi

# از کاربر سطح کیفیت فشرده‌سازی را می‌پرسد

read -p "Enter compression quality [1-100] (e.g., 90). Press Enter to skip: " QUALITY

# یک پوشه جدید برای ذخیره فایل‌های تبدیل شده ایجاد می‌کند

OUTPUT_DIR="${TARGET_FORMAT}_images"
mkdir -p "$OUTPUT_DIR"

# بر اساس ورودی کاربر، دستور مناسب را اجرا می‌کند

if [ -n "\$QUALITY" ]; then
\# اگر کاربر سطح کیفیت را وارد کرده باشد، فشرده‌سازی اعمال می‌شود
echo "Converting images to \$TARGET_FORMAT with quality $QUALITY..."
    mogrify -quality "$QUALITY" -format "$TARGET_FORMAT" -path "$OUTPUT_DIR/" *.*
else
\# اگر کاربر سطح کیفیت را وارد نکرده باشد، فقط تبدیل فرمت انجام می‌شود
echo "Converting images to $TARGET_FORMAT without extra compression..."
    mogrify -format "$TARGET_FORMAT" -path "\$OUTPUT_DIR/" *.*
fi

echo "Conversion complete!"

این اسکریپت چگونه کار می‌کند؟

  • read -p "...": از شما فرمت مقصد (مثل webp) و سطح کیفیت فشرده‌سازی (عددی بین ۱ تا ۱۰۰) را می‌پرسد.
  • mkdir -p "$OUTPUT_DIR": یک پوشه جدید (مثلاً webp_images) می‌سازد تا تصاویر اصلی دست‌نخورده باقی بمانند.
  • mogrify: ابزار اصلی ما از ImageMagick برای پردازش دسته‌ای تصاویر است.

    • -format: فرمت خروجی را تعیین می‌کند.
    • -quality: سطح فشرده‌سازی را مشخص می‌کند (مقادیر بین 85 تا 92 معمولاً بهترین تعادل بین حجم و کیفیت را دارند).
    • -path: مسیر پوشه خروجی را مشخص می‌کند.
    • *.*: به دستور می‌گوید تمام فایل‌های موجود در پوشه فعلی را پردازش کند.

راهنمای گام به گام استفاده

  1. ذخیره اسکریپت: کد بالا را در فایلی با نام convert.sh ذخیره کنید.
  2. انتقال به پوشه تصاویر: فایل convert.sh را به پوشه‌ای که تصاویرتان در آن قرار دارند، منتقل کنید.
  3. اجرایی کردن اسکریپت: ترمینال را در همان پوشه باز کرده و دستور زیر را وارد کنید:

    chmod +x convert.sh
  4. اجرای اسکریپت: با دستور زیر اسکریپت را اجرا کنید:

    ./convert.sh
  5. پاسخ به سوالات:

    • فرمت مورد نظر (مثلاً webp) را تایپ و Enter را بزنید.
    • سطح کیفیت (مثلاً 90) را وارد کنید. اگر فشرده‌سازی نمی‌خواهید، این مرحله را خالی گذاشته و Enter را بزنید.

تمام! پس از چند لحظه، یک پوشه جدید حاوی تصاویر بهینه‌شده شما ایجاد خواهد شد.