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
|