چرا گنو/لینوکس رو دوست دارم: یک ستونه کردن یک پی دی اف تصویری دو ستونه

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

من می خوام اینها یک ستونه باشن. کار هم نشد نداره… بخصوص وقتی ابزار خوب دارین. قدم اول اینکه هر پی دی اف رو به یکسری عکس های مستقل با کیفیت خوب تبدیل کنم. می‌زنم:

$ convert -verbose -colorspace GRAY -interlace none -density 150 1.pdf 1.png

مشخصه: تغییر بده -حرف زیاد بزن -خاکستری -کیفیت ۱۵۰ فایل یک.پی‌دی‌اف رو روی فایل‌هایی به اسم ۱.پی‌ان‌جی.

نتیجه؟ بعد از رسیدن دمای سی پی یو به ۸۵ سانتی‌گراد، به چیزی شبیه این می‌رسیم:

کلی فایل دارم که دو ستونه هستن. حالا من یک چیزی می‌خوام که هر عکس رو به دو ستون مختلف تبدیل کنه. بازم جادوی convert. اینبار مثلا برای به دست آوردن سمت چپ صفحه بیست و پنج جلد یک اینطوری کار می کنیم:

$ convert 1-25.png -crop 1240×17540+0+0 +repage 1-25b.png

یعنی تغییر بده -فلان صفحه رو -ببر از گوشه سمت چپ بالا به عرض ۱۲۴۰ پیکسل (نصف عرض تصویر) و ارتفاع 1754 و نتیجه رو بریز توی فایلی با همون اسم که کنارش یک b است. در ضمن یک repage هم اضافه داره که باعث می شه موقع نوشتن تصویر جدید،‌ بیخیال این بشیم که قبلا این تصویر چه ابعادی داشته و کلا یک تصویر جدید با این اطلاعات جدید بسازیم.

برای سمت راست هم:

$ convert 1-25.png -crop 1240×1754+1240+0 +repage 1-25a.png

که خب مثل قبلی است ولی می گه از وسط عرض شروع کنه به بریدن که در نتیجه خروجی می شه ستون سمت راست (اسمش رو می ذاریم a).

حالا که با یک صفحه تونستم اینکار رو بکنم، باید با همه صفحات بتونم. کافیه دستور find که می تونه یکسری فایل رو بهم بده رو تست کنم:

$ find . -name “1-*” -exec convert \{\} -crop 1240×1754+0+0 +repage \{\}b.png \;

دستور فایند همه فایل های توی این شاخه که اسمشون شبیه اسم کتاب من هست رو پیدا می کنه و بعد در بخش exec اونها رو یکی یکی می ده به دستوری که بالا داشتیم (کانورت). حالا عین همین رو بعد از جدا کردن فایل های تازه وارد، برای صفحات سمت راست هم اجرا می کنم:

$ find . -name “1-*” -exec convert \{\} -crop 1240×1754+1240+0 +repage \{\}a.png \;

و بعد می رسم به مجموعه ای فایل‌ها که به ترتیب حروف الفبا،‌ صفحات کتاب هستن:

حالا کافیه مثلا مجموعه همه فایل‌هایی که با ۱ شروع می‌شن رو به هم بچسبونم و یک پی دی اف درست کنم تا به کتاب یک ستونی جلد یک برسم. اما یک سوال مطرحه! باید بتونیم ترتیب این فایل ها رو مشخص کنیم. اگر به سادگی بزنیم

$ convert 1*png jeld1.pdf

اوه شکست موقت خوردیم! ترتیب صفحات قاطی پاتی شده. من دقیق نمی‌دونم باید چیکار کنم پس یک راه کثیف سریع که بلدم رو استفاده می کنم! می دونم دستور دایرکتوری گیری یک سوییچ داره به اسم v که به ترتیب معقول مثل آدم سورت می کنه (پس بیخود نبود که از اسم a و b برای ستون راست و چپ استفاده کردیم ;) ). حالا ls رو با v به همراه سوییچ 1 که هر فایل رو در یک خط نشون می ده می زنم و خروجی رو می دم به xargs echo که کل اینها رو پشت هم نشون بده. می شه این:

می دونم کثیفه ولی یکبار در تاریخ می شه تحملش کرد و تازه جا داره دوستان پیشنهادات بهتر بدن! حالا کافیه این تیکه رو کپی پیست کنم جلوی یک دستور کانورت و آخرش هم اسم فایل خروجی رو بدم.. داریم:

$ convert 1-0.pnga.png 1-0.pngb.png 1-1.pnga.png 1-1.pngb.png 1-2.pnga.png 1-2.pngb.png 1-3.pnga.png 1-3.pngb.png 1-4.pnga.png 1-4.pngb.png 1-5.pnga.png 1-5.pngb.png 1-6.pnga.png 1-6.pngb.png 1-7.pnga.png 1-7.pngb.png 1-8.pnga.png 1-8.pngb.png 1-9.pnga.png 1-9.pngb.png 1-10.pnga.png 1-10.pngb.png 1-11.pnga.png 1-11.pngb.png 1-12.pnga.png 1-12.pngb.png 1-13.pnga.png 1-13.pngb.png 1-14.pnga.png 1-14.pngb.png 1-15.pnga.png 1-15.pngb.png 1-16.pnga.png 1-16.pngb.png 1-17.pnga.png 1-17.pngb.png 1-18.pnga.png 1-18.pngb.png 1-19.pnga.png 1-19.pngb.png 1-20.pnga.png 1-20.pngb.png 1-21.pnga.png 1-21.pngb.png 1-22.pnga.png 1-22.pngb.png 1-23.pnga.png 1-23.pngb.png 1-24.pnga.png 1-24.pngb.png 1-25.pnga.png 1-25.pngb.png 1-26.pnga.png 1-26.pngb.png 1-27.pnga.png 1-27.pngb.png 1-28.pnga.png 1-28.pngb.png 1-29.pnga.png 1-29.pngb.png 1-30.pnga.png 1-30.pngb.png 1-31.pnga.png 1-31.pngb.png 1-32.pnga.png 1-32.pngb.png 1-33.pnga.png 1-33.pngb.png 1-34.pnga.png 1-34.pngb.png 1-35.pnga.png 1-35.pngb.png 1-36.pnga.png 1-36.pngb.png 1-37.pnga.png 1-37.pngb.png 1-38.pnga.png 1-38.pngb.png 1-39.pnga.png 1-39.pngb.png 1-40.pnga.png 1-40.pngb.png 1-41.pnga.png 1-41.pngb.png 1-42.pnga.png 1-42.pngb.png 1-43.pnga.png 1-43.pngb.png 1-44.pnga.png 1-44.pngb.png 1-45.pnga.png 1-45.pngb.png 1-46.pnga.png 1-46.pngb.png 1-47.pnga.png 1-47.pngb.png 1-48.pnga.png 1-48.pngb.png 1-49.pnga.png 1-49.pngb.png 1-50.pnga.png 1-50.pngb.png 1-51.pnga.png 1-51.pngb.png 1-52.pnga.png 1-52.pngb.png 1-53.pnga.png 1-53.pngb.png 1-54.pnga.png 1-54.pngb.png 1-55.pnga.png 1-55.pngb.png 1-56.pnga.png 1-56.pngb.png 1-57.pnga.png 1-57.pngb.png 1-58.pnga.png 1-58.pngb.png 1-59.pnga.png 1-59.pngb.png 1-60.pnga.png 1-60.pngb.png 1-61.pnga.png 1-61.pngb.png 1-62.pnga.png 1-62.pngb.png 1-63.pnga.png 1-63.pngb.png 1-64.pnga.png 1-64.pngb.png 1-65.pnga.png 1-65.pngb.png 1-66.pnga.png 1-66.pngb.png 1-67.pnga.png 1-67.pngb.png 1-68.pnga.png 1-68.pngb.png 1-69.pnga.png 1-69.pngb.png 1-70.pnga.png 1-70.pngb.png 1-71.pnga.png 1-71.pngb.png 1-72.pnga.png 1-72.pngb.png 1-73.pnga.png 1-73.pngb.png 1-74.pnga.png 1-74.pngb.png 1-75.pnga.png 1-75.pngb.png 1-76.pnga.png 1-76.pngb.png 1-77.pnga.png 1-77.pngb.png 1-78.pnga.png 1-78.pngb.png 1-79.pnga.png 1-79.pngb.png 1-80.pnga.png 1-80.pngb.png 1-81.pnga.png 1-81.pngb.png 1-82.pnga.png 1-82.pngb.png 1-83.pnga.png 1-83.pngb.png 1-84.pnga.png 1-84.pngb.png 1-85.pnga.png 1-85.pngb.png 1-86.pnga.png 1-86.pngb.png 1-87.pnga.png 1-87.pngb.png 1-88.pnga.png 1-88.pngb.png 1-89.pnga.png 1-89.pngb.png 1-90.pnga.png 1-90.pngb.png 1-91.pnga.png 1-91.pngb.png 1-92.pnga.png 1-92.pngb.png 1-93.pnga.png 1-93.pngb.png 1-94.pnga.png 1-94.pngb.png 1-95.pnga.png 1-95.pngb.png 1-96.pnga.png 1-96.pngb.png 1-97.pnga.png 1-97.pngb.png 1-98.pnga.png 1-98.pngb.png 1-99.pnga.png 1-99.pngb.png 1-100.pnga.png 1-100.pngb.png 1-101.pnga.png 1-101.pngb.png 1-102.pnga.png 1-102.pngb.png 1-103.pnga.png 1-103.pngb.png 1-104.pnga.png 1-104.pngb.png 1-105.pnga.png 1-105.pngb.png 1-106.pnga.png 1-106.pngb.png 1-107.pnga.png 1-107.pngb.png 1-108.pnga.png 1-108.pngb.png 1-109.pnga.png 1-109.pngb.png 1-110.pnga.png 1-110.pngb.png 1-111.pnga.png 1-111.pngb.png 1-112.pnga.png 1-112.pngb.png 1-113.pnga.png 1-113.pngb.png 1-114.pnga.png 1-114.pngb.png 1-115.pnga.png 1-115.pngb.png 1-116.pnga.png 1-116.pngb.png 1-117.pnga.png 1-117.pngb.png 1-118.pnga.png 1-118.pngb.png 1-119.pnga.png 1-119.pngb.png 1-120.pnga.png 1-120.pngb.png 1-121.pnga.png 1-121.pngb.png 1-122.pnga.png 1-122.pngb.png 1-123.pnga.png 1-123.pngb.png 1-124.pnga.png 1-124.pngb.png 1-125.pnga.png 1-125.pngb.png 1-126.pnga.png 1-126.pngb.png 1-127.pnga.png 1-127.pngb.png 1-128.pnga.png 1-128.pngb.png 1-129.pnga.png 1-129.pngb.png 1-130.pnga.png 1-130.pngb.png 1-131.pnga.png 1-131.pngb.png 1-132.pnga.png 1-132.pngb.png 1-133.pnga.png 1-133.pngb.png 1-134.pnga.png 1-134.pngb.png 1-135.pnga.png 1-135.pngb.png 1-136.pnga.png 1-136.pngb.png 1-137.pnga.png 1-137.pngb.png 1-138.pnga.png 1-138.pngb.png 1-139.pnga.png 1-139.pngb.png 1-140.pnga.png 1-140.pngb.png 1-141.pnga.png 1-141.pngb.png 1-142.pnga.png 1-142.pngb.png 1-143.pnga.png 1-143.pngb.png 1-144.pnga.png 1-144.pngb.png 1-145.pnga.png 1-145.pngb.png 1-146.pnga.png 1-146.pngb.png jeld1.pdf

و حالا بعد از نیم ساعت کار یک کتاب دارم که جوری است که راحت می تونم بخونمش (:

صاحب ابزار خوب بودن فوق العاده نیست؟

توضیح لازم

من وقتی شروع می کنم به چنین کاری دقیقا نمی‌دونم چجوری و با چه ابزاری و با چه جزییاتی قراره انجام بشه.اما می‌دونم که اینکار چیزی پیچیده تر از تبدیل یکسری فرمت به همدیگه و بریدن و چسبوندن و اتوماتیک کردن این پروسه‌ها نیست و مطمئن هستم که فلسفه سیستم عامل من (گنو/لینوکس و فلسفه پوزیکس) دقیقا بر اساس همین ایده ابزارهای کوچیک و کارا که می شه به خوبی باهم ترکیبشون کرد ساخته شده پس مطمئن هستم که اینکار عملیه. در حین انجامش راهنما نگاه می کنم و سوییچ‌ها رو تجربه می کنم و کار پیش می ره و با هم لذت می بریم. قرار نیست کسی اینها رو حفظ باشه. چیزی که مهمه درک فلسفه پوزیکس است.

کتاب داستان پداگوژیکی است، که تا مدت محدودی برای دانلود می ذارمشون اینجا: جلد یک و جلد دو