لینوکس و من
انتخاب عنوان خیلی سخت بود!
کاری که میخوایم بکنیم اینه که از یک مطلب چاپ شده که میتونه کتاب، نمونه سوال، مجله و هر چیزی باشه، عکس بگیریم و این عکس ها رو در یک PDF جمع کنیم. به طوری که کیفیت PDF مثل کتاب های چاپی باشه، و حجم زیادی هم نگیره.
 
تصویر اصلی که توسط گوشی گرفته شده
 
 
تصویر ویرایش شده توسط اسکریپت
 
 
اول باید دقت کنید که با موبایل یا اسکنر تصاویر رو به دقت تهیه کنید تا نیاز به برش یا crop تصاویر نباشه. اگر دقت نکنید اون وقت مجبورید دونه دونه عکس ها رو کراپ کنید. چون هر کدوم با دیگری متفاوته و نمیشه این کار رو توسط اسکریپت به صورت فله ای انجام داد.
۱- همه عکس ها رو در یک فولدر قرار بدید. چون عکس ها پشت سر هم گرفته شدن، پس نیازی به تغییر نام و مرتب کردن اونها نیست. 
۲- باید imagemagic رو در لینوکس خودتون نصب داشته باشید.
۳- اسکریپت زیر رو یک جا ذخیره کنید و بهش مجوز اجرایی بدید:
#!/bin/bash
#
# Digital Camera + This Software + Printer = A Document Photocopier
#
# Input:  pictures of B&W Text documents taken with a digital camera using
#         flash from about 3 feet away with no dark border around the page.
#
# Output1: b-file.tif (a very small B&W TIF file)
# Output2: g-file.jpg (a alternative grayscale file)
#
# If input is purely black and white,  Output1 should be better
# If input is not purely black and white, Output2 may be better
#
# Corey Satten, corey @ cac.washington.edu, March 2007

do1 () {
   echo starting $1 1>&2
   BASE="${1##*/}"; NAME=${BASE%.[jJ][pP][gG]}; TMP1="t-$BASE"; TMP2="x-$BASE"
   trap 'rm -f "$TMP1" "$TMP2"; exit' 0 1 2 13 15
   CGQ="-colorspace gray -quality"
   CGT="-compress group4 -density 480x480"

   convert $CGQ 99 "$1" -resize 5120x5120 "$TMP2"
   convert $CGQ 99 "$1" -resize 1024x1024 -negate -blur 15,15 -resize 5120x5120 "$TMP1"
   composite $CGQ 99 -compose plus "$TMP2" "$TMP1" "$TMP1"
   convert $CGQ 60 "$TMP1" -normalize -level 50,85% "g-$BASE"
   convert $CGT "$TMP1" -normalize -threshold 85% "b-$NAME.tif"
   rm -f "$TMP1" "$TMP2"
}

# This tries to detect multiprocessors and run 2 conversions in parallel
# Move CPUS=1 after the test to effectively disable the test.
CPUS=1
if [ -f /proc/cpuinfo ] ;then
    CPUS=`grep ^processor /proc/cpuinfo | wc -l`
    if [ "$CPUS" -lt 2 ] ;then CPUS=1; fi
fi

for i in "$@"; do
   case $#/$CPUS in
    0/*) exit;;                                     # done
    1/*) do1 "$1"; shift;;                          # only one file to do
    */1) do1 "$1"; shift;;                          # only one cpu to use
      *) do1 "$1" & do1 "$2"; wait; shift; shift;;  # process 2 files at once
   esac
done

exit 0
۴- حالا باید این اسکریپت رو در فولدری که عکسهاتون قرار داره اجرا کنید. مثلا:
/PATH/TO/scan /PATH/TO/*.jpg
پس از اجرای اسکریپت، دو نوع فایل در کنار فایلهای اصلی تولید میشه. یکی tiff و یکی jpg. که طبق گفته خود اسکریپت اگر تصویرهای ورودی کاملا سیاه و سفید باشند فرمت tiff نتیجه بهتری خواهد داشت و در غیر این صورت فرمت jpg بهتر خواهد بود.
 
۵- حالا میخوایم از تصاویر تولید شده، یک PDF بسازیم. به راحتی با این دستور میتونیم فایلهای tiff رو تبدیل به یک فایل PDF کنیم:
convert /PATH/TO/*.tif /PATH/TO/custom.pdf
توجه داشته باشید که نتیجه به صورت سیاه و سفید خواهد بود. شما میتونید با تغییر پارامترها در اسکریپت بالا، نتیجه رو به دلخواه خودتون عوض کنید.
اگر شما از قبل یک PDF داشتید که از یک کتابی تهیه شده و صرفا عکسها رو برداشتن PDF کردند، بدون اینکه این کارها رو روشون انجام بدن، میتونین با دستور زیر به سادگی یک فایل PDF رو یه فایلهای jpg تبدیل کنید. یعنی مثلا یک فایل PDF صد صفحه ای، تبدیل خواهد شد به صد تا فایل jpg و اونوقت میتونین عملیات دلخواهتون رو روی این عکسها انجام بدید و مجدد خروجی PDF تولید کنید. 
برای این کار نیاز به نصب pdftoppm خواهید داشت
 pdftoppm /PATH/TO/file.pdf  filename -jpeg
قسمت filename اسم فایلهای jpeg است که قرار است تولید شوند. ضمنا شما میتونید بجای آپشن jpeg از png هم استفاده کنین.
دسته:

ترفند

کلیدواژه:

imagemagic