خط فرمان لینوکس

ترجمه فارسی LinuxCommand.org

خط فرمان لینوکس

ترجمه فارسی LinuxCommand.org

photo2mail

photo2mail

امروزه دوربین‌های دیجیتالی به تولید فایلهای بزرگ تصویرها گرایش دارند. فایلهایی که برای پیوست نمودن به پیغام‌های الکترونیکی یا سایر اشکال مخابره اینترنتی نامناسب هستند. این اسکریپت باخواندن یک یا چندفایل تصویر و سپس نوشتن فایل‌های جدید با اندازه مناسب‌تر این مشکل را حل می‌کند. این کار به کمک برنامه convert فراهم شده با بسته ImageMagick انجام می‌شود.

مثال‌ها

me@linuxbox ~ $ photo2mail image.jpg

در ساده‌ترین شکل، photo2mail فایل image.jpg را می‌خواند و یک فایل جدید تصویر به نام image-1024.jpg در همان دایرکتوری اصلی ایجاد می‌کند.

me@linuxbox ~ $ photo2mail -s 800 image.jpg

به طور پیش‌فرض، اسکریپت تصویرها را طوری تغییر اندازه می‌دهد که برای محدود شدن در داخل یک جعبه چهارگوش به اندازه 1024 پیکسل مناسب شود. سایر اندازه‌ها با استفاده از گزینه ‎-s‎، می‌توانند تعیین بشوند.

me@linuxbox ~ $ photo2mail -d ../resized image.jpg

با استفاده از گزینه ‎-d‎، می‌توان برای خروجی یک دایرکتوری جایگزین تعیین نمود.

me@linuxbox ~ $ photo2mail -j image.png

به طور پیش‌فرض، photo2mail تصویر تغییر یافته را با همان قالب فایل اصلی می‌نویسد. گزینه ‎-j‎ برنامه photo2mail را وادار به نوشتن یک فایل JPEG می‌نماید.

#!/bin/bash
# ---------------------------------------------------------------------------
# photo2mail - تغییر اندازه تصویرها برای پیوست به ایمیل

# Copyright 2013, William Shotts <bshotts@users.sourceforge.net>

#  این برنامه نرم‌افزار آزاد است: شما می‌توانید آن را تحت شرایط نگارش  
#    گنو یا به انتخاب خودتان هر نگارش پس از آن که GPL‎  شماره 3 مجوز 
#  .توسط بنیاد نرم‌افزارهای آزاد اعلام گردیده، ‏توزیع و یا ویرایش کنید‎

# این برنامه به امید آنکه سودمند باشد توزیع می‌گردد، اما بدون هرگونه‎
#  تعهد حتی تعهد ضمنی کیفیت یا صلاحیت برای یک مقصود خاص. برای جزییات 
#  .ببینید ‎(http://www.gnu.org/licenses/)‎  گنو را در GPL بیشتر مجوز‎

#  photo2mail [-h|--help] [--options] file... : نحوه کاربرد

# 	:گزینه‌ها
# -d, --directory dir   دایرکتوری برای تصویرهای خروجی، دایرکتوری
#                             .پیش‌فرض همان دایرکتوری مبدا می‌باشد
# -j, --jpeg                اجبار به این‌که تصویر خروجی صرف‌نظر از
#                             .باشد JPEG قالب تصویر مبدا در قالب
# -s, --size size         اندازه محدوده جعبه تصویر خروجی. اندازه
#                                        .پیکسل است  ‎1024‎ پیش‌فرض

#   این برنامه فایل‌های تغییر اندازه داده شده تصویرها را با استفاده از
#   تولید می‌کند. تصویرهای خروجی در ImageMagick از بسته convert برنامه
#   همان دایرکتوری تصویرهای اصلی ایجاد می‌گردند و برای آسان شناخته شدن
#  اندازه size دارای اندازه تصویر پیوست شده در نام‌هایشان هستند. شناسه
#      .اندازه عرض به پیکسل، مجدوده جعبه چهارگوش دربرگیرنده تصویر است

# :تاریخچه بازبینی
# 2014-01-12  تمیزکاری‌های بیشتر ‎(1.2)‏
# 2014-01-04  تمیزکاری‌های مختلف ‎(1.1)‏
# 2013-01-11  ایجاد گردید new_script اسکریپت ‎3.0.1‎ به وسیله نگارش
# ---------------------------------------------------------------------------

PROGNAME=${0##*/}
VERSION="1.2"
DEFAULT_SIZE=1024
REQUIRED_PROGS="identify convert"

clean_up() { # انجام خانه‌تکانی قبل از خروج
  return
}

error_exit() {
  echo -e "${PROGNAME}: ${1:-"Unknown Error"}" >&2
  clean_up
  exit 1
}

error_warning() {
  echo -e "${PROGNAME}: Warning - $1" >&2
  return
}

graceful_exit() {
  clean_up
  exit
}

signal_exit() { # شده trap اداره سیگنال‌های 
  case $1 in
    INT)    error_exit "Program interrupted by user" ;;
    TERM)   echo -e "\n$PROGNAME: Program terminated" >&2
            graceful_exit ;;
    *)      error_exit "$PROGNAME: Terminating on unknown signal" ;;
  esac
}

usage() {
  echo -e "Usage: $PROGNAME [-h|--help] [--options] file..."
}

help_message() {
  cat << _EOF_
$PROGNAME ver. $VERSION
Resize images for use as email attachments

$(usage)

Options:
-d, --directory dir Directory for output images. Default
                    is same directory as source.
-j, --jpeg          Force output image to be JPEG regardless
                    of source image format.
-s, --size size     Size of output image bounding box. Default
                    is 1024 pixels.

_EOF_
  return
}

#	 Trap سیگنال‌های
trap "signal_exit TERM" TERM HUP
trap "signal_exit INT"  INT

size=$DEFAULT_SIZE
f_ext=
f_path=

#	 تجزیه سطر فرمان
while [[ -n $1 ]]; do
  case $1 in
    -d | --directory) shift; f_path="$1" ;;
    -h | --help)      help_message; graceful_exit ;;
    -j | --jpeg)      f_ext="jpg" ;;
    -s | --size)      shift; size="$1" ;;
    -* | --*)         usage; error_exit "Unknown option $1" ;;
    *)                break ;;
  esac
  shift
done

#	 منطق اصلی

# Check validity of options
[[ "$size" =~ ^[0-9]+$ ]] \
  || error_exit "output size must be an integer."
[[ -z "$f_path" || -d "$f_path" ]] \
  || error_exit "output directory '$f_path' does not exist."

# نصب شده‌اند ImageMagick کسب اطمینان از آن‌که برنامه‌های مورد نیاز
for i in $REQUIRED_PROGS; do
  type "$i" &> /dev/null \
    || error_exit "required program '$i' not found."
done

# حلقه پردازش
for input_file in "$@"; do
  if [[ -r "$input_file" ]] && identify "$input_file" &> /dev/null; then
    filename="${input_file##*/}"
    if [[ -z "$f_path" ]]; then
      path="${input_file%/*}"
    else
      path="$f_path"
    fi
    [[ "$filename" == "$path" ]] && path="."
    base="${filename%.*}"
    if [[ -z "$f_ext" ]]; then
      ext="${filename##*.}"
    else
      ext="$f_ext"
    fi
    output_file="$path/$base-$size.$ext"
    convert "$input_file" -resize ${size}x${size} "$output_file" \
      || error_warning "Cannot convert '$input_file'. Skipping..."
  else
    error_warning "'$input_file' not a valid image file. Skipping..."
  fi
done

graceful_exit