สแกนอัลบั้มรูปภาพด้วยสคริปต์จากบรรทัดคำสั่ง

เห็นได้ชัดว่ามีหลายอย่าง อินเทอร์เฟซแบบกราฟิกสำหรับการสแกนภาพถ่ายซึ่งมีตัวเลือกมากมาย แต่เมื่อภาพถ่ายที่ต้องสแกนมีจำนวนมากและเราไม่มีเครื่องสแกนที่มีตัวป้อนกระดาษอัตโนมัติสิ่งต่างๆก็ยากลำบาก โดยทั่วไปคุณต้องคลิกเพื่อสแกนอาจมีการคลิกอีกครั้งที่ส่วนท้ายของหน้าต่างเพื่อบันทึก ... ต้องใช้เวลา อย่างไรก็ตามข้ออ้างที่ดีในการใช้ไฟล์ บรรทัดคำสั่ง.

นี่เป็นผลงานจากRubénจึงกลายเป็นหนึ่งในผู้ชนะการแข่งขันประจำสัปดาห์ของเรา: «แบ่งปันสิ่งที่คุณรู้เกี่ยวกับ Linux«. ขอแสดงความยินดีRubén!

ฉันอ่านบทความเกี่ยวกับ การประมวลผลภาพเป็นกลุ่มด้วย GIMP y วิธีจัดการภาพจากเทอร์มินัลเพียงแค่วันที่ Huguito เพื่อนของฉันขอรูปถ่าย (ที่เขาทำหายไป) จากทริปที่เราทำเมื่อปี 1989 … (4 ม้วน 36 รูป! และแน่นอนบนกระดาษ🙂มันทำให้ฉันนึกถึงเคล็ดลับนี้ในการสแกน รูปถ่ายที่ฉันลืมไป

แนวคิดคือการใช้สคริปต์เพื่อให้เร็วที่สุด:

1.- ใส่ภาพถ่ายบนเครื่องสแกน
2.- กดปุ่มใด ๆ เพื่อสแกน
3. - ทำซ้ำขั้นตอนนี้เว้นแต่ว่าปุ่มที่กดอยู่เช่น 'n' เพื่อออก
4.- รูปภาพจะถูกบันทึกและกำหนดหมายเลขไว้ในไดเร็กทอรีย่อยที่กำหนดไว้ล่วงหน้า

คำสั่งอะไร?

คำสั่ง 'magic' คือ scanimage ซึ่งเป็นส่วนหนึ่งของ SANE SANE เป็น API ที่ให้การเข้าถึงมาตรฐานไปยังอุปกรณ์ถ่ายภาพใด ๆ Sane API อยู่ในโดเมนสาธารณะและซอร์สโค้ดมีอยู่ภายใต้สัญญาอนุญาตสาธารณะทั่วไปของ GNU

การติดตั้งทำได้ง่าย การกระจายสินค้าแต่ละครั้งจะนำบรรจุภัณฑ์ สำหรับ Ubuntu (หรืออนุพันธ์ของมัน) ก็เพียงพอแล้วที่จะใช้ synaptic และติดตั้ง sane และ sane-utils

วิธีใช้?

วิธีที่ดีที่สุดคือการเขียน 'man scanimage' ในเทอร์มินัลเสมอ อย่างไรก็ตามเราจะสรุปตัวเลือกที่เราจะใช้

เราเปิดเทอร์มินัลและเรียกใช้ scanimage -L เพื่อดูอุปกรณ์ที่มี:

สแกนอิมเมจ -L

ในกรณีของฉันมันส่งคืน:

อุปกรณ์ `xerox_mfp: libusb: 001: 005 'เป็นอุปกรณ์ต่อพ่วงมัลติฟังก์ชั่น SAMSUNG ORION

นี่คือผลลัพธ์ที่ได้รับจากมัลติฟังก์ชั่น Samsung SCX-4200 ของฉัน หากคุณมี MFP และไม่พบอุปกรณ์ตรวจสอบให้แน่ใจว่าเครื่องพิมพ์ไม่ได้ทำงานอยู่ตัวอย่างเช่นมีการพิมพ์ที่รอดำเนินการ

ค่า 'xerox_mfp: libusb: 001: 003' ใช้เพื่อบอกคำสั่ง scanimage ว่าจะใช้อุปกรณ์ใดผ่านตัวเลือก -d หากเชื่อมต่อเครื่องสแกนเพียงเครื่องเดียวไม่จำเป็นต้องใช้ตัวเลือกนี้

เมื่อคำสั่ง scanimage สแกนคำสั่งจะส่งภาพที่ได้ไปยังเอาต์พุตมาตรฐานในรูปแบบ pnm หรือ tiff ดังนั้นในการสแกนเราจึงเปลี่ยนเส้นทางผลลัพธ์ไปยังไฟล์ และถ้าเราต้องการดูข้อความที่คำสั่งให้เราเพิ่มตัวเลือก -v หากเราต้องการดูเปอร์เซ็นต์ความคืบหน้าของการดำเนินการเราจะเพิ่มตัวเลือก -p

scanimage -v -p> image.tiff

scanimage: สแกนภาพขนาด 1284x1734 พิกเซลที่ 24 บิต / พิกเซล
scanimage: รับเฟรม RGB
scanimage: ค่ากรวดต่ำสุด / สูงสุด = 69/255
scanimage: อ่าน 6679368 ไบต์ทั้งหมด
ความคืบหน้า: 13.8%

สิ่งนี้จะให้อะไรกับเราถ้าเราทำการ scanimage –help? ดูเหมือนชัดเจนว่าให้ความช่วยเหลือเกี่ยวกับคำสั่ง แต่คำสั่งนี้มีความไม่ชอบมาพากล ในตอนท้ายของวิธีใช้ทั่วไปสำหรับคำสั่งให้เพิ่มพารามิเตอร์เฉพาะที่เครื่องสแกนของคุณยอมรับ

scanimage - ช่วย

การใช้งาน: scanimage [OPTION] ...

บลาบลา ....

ตัวเลือกเฉพาะสำหรับอุปกรณ์ `xerox_mfp: libusb: 001: 005 ':

มาตรฐาน:
- ความละเอียด 75 | 100 | 150 | 200 | 300 | 600dpi [150] ตั้งค่าความละเอียดของภาพที่สแกน
--mode Lineart | Halftone | Grey | Color [สี] เลือกโหมดการสแกน (เช่นลายเส้นขาวดำหรือสี)
- ไฮไลท์ 30..70% (ขั้นละ 10) [ไม่ใช้งาน] เลือกความสว่างต่ำสุดเพื่อให้ได้จุดสีขาว
- แหล่งที่มา Flatbed | ADF | อัตโนมัติ [Flatbed] เลือกแหล่งที่มาของการสแกน (เช่นตัวป้อนเอกสาร)
เรขาคณิต:
-l 0..215.9mm (ขั้นตอนที่ 1) [0] ตำแหน่ง x ด้านซ้ายบนของพื้นที่สแกน
-t 0..297.18 มม. (ขั้นตอนที่ 1) [0] ด้านซ้ายบนและตำแหน่งของพื้นที่สแกน
-x 0..215.9 มม. (ปรับขั้นละ 1) [215.9] ความกว้างของพื้นที่สแกน
-y 0..297.18 มม. (ขั้นละ 1) [297.18] ความสูงของพื้นที่สแกน

พิมพ์ `` scanimage --help -d DEVICE '' เพื่อดูรายการตัวเลือกทั้งหมดสำหรับ DEVICE

รายชื่ออุปกรณ์ที่มี:

xerox_mfp: libusb: 001: 005

จากตรงนี้เราสามารถเลือกตัวเลือกพร้อมค่าที่เราใช้ได้

ตัวอย่าง:

ความละเอียด

- ความละเอียด 150

modo

- โหมดสี

ตอนนี้รูปทรงเรขาคณิต สิ่งนี้มีประโยชน์มากเพราะเราสามารถบอกให้สแกนเนอร์แตกภาพของภาคเดียวเท่านั้น (ที่เราจะใส่รูปถ่าย) และเราประหยัดเวลาในการสแกนพื้นผิวที่เหลือซึ่งเราควรตัดในภายหลังด้วยโปรแกรมแก้ไขกราฟิกเช่น เป็น Gimp

-l 0 เริ่มการสแกนในแนวนอนจาก 0 มม. จากมุมบนซ้ายของสแกนเนอร์

-t 0 เริ่มการสแกนในแนวตั้งจาก 0 มม. จากมุมบนซ้ายของสแกนเนอร์

โปรดทราบว่าฉันเลือกที่จะวางภาพถ่ายไว้ที่มุมของเครื่องสแกน [พิกัด (0,0)] เนื่องจากวางได้ง่ายกว่า บนเครื่องสแกนของฉัน (ขนาด A4) l สามารถเปลี่ยนจาก 0 ถึง 215.9 และ t จาก 0 ถึง 297.18

ความกว้างและความสูงของภาพถ่าย ในกรณีของฉันภาพถ่ายมีขนาด 13x18 ซม.:

กว้าง -x 180

- และสูง 130

ดังนั้นมันจะสแกนเฉพาะส่วนที่เราใส่รูปถ่ายเท่านั้น แน่นอนว่าถ้าเราตกลงกันว่าซ้ายขวาความกว้างความสูงบนและล่างคืออะไร จะขึ้นอยู่กับว่าคุณมองไปที่เครื่องสแกนของคุณอย่างไร ฉันขอแนะนำให้ทดสอบพิกัดและปรับให้เข้ากับความต้องการของคุณ

ตัวอย่างของคำสั่งอาจเป็น:

scanimage -d xerox_mfp: libusb: 001: 003 -p - โหมดสี - ความละเอียด 150 -l 0 -t 0 -x 180 -y 130> image.pnm

ด้วยตัวเลือกเหล่านี้เราสามารถสร้างสคริปต์ของเราได้แล้ว

แต่ก่อน…

Tiff หรือ pnm เป็นรูปแบบที่ไม่มีการบีบอัดดังนั้นรูปภาพของเราจะใช้พื้นที่ดิสก์มาก นี่คือที่มาของคำสั่ง ImageMagick convert ซึ่งอธิบายไว้ในวิธีจัดการภาพจากเทอร์มินัล

หากเราได้รับ image.pnm จากเครื่องสแกนเราสามารถแปลงเป็น jpg ได้:

แปลง image.pnm image.jpg

แต่ก่อนที่จะทำเช่นนั้นเคล็ดลับอื่น:

image.pnm ใช้พื้นที่มากและเราควรลบทิ้งหลังจากได้ image.jpg แล้ว มีตัวเลือกสำหรับคำสั่งแปลงดังนั้นแทนที่จะนำไฟล์จากดิสก์มันจะแปลงอินพุตมาตรฐานโดยตรง สิ่งนี้ทำได้โดยใช้เส้นประ - แทนไฟล์:

แปลง - image.jpg

เนื่องจาก scanimage ส่งออกภาพที่สแกนไปยังเอาต์พุตมาตรฐานเราจึงสร้าง "ไปป์ไลน์" และประหยัดเวลาในการประมวลผลที่ต้องใช้ในการเขียนจากนั้นจึงลบไฟล์ image.pnm ออกจากดิสก์

scanimage -d xerox_mfp: libusb: 001: 003 -p - โหมดสี - ความละเอียด 150 -l 0 -t 0 -x 180 -y 130 | แปลง - image.jpg

ตอนนี้ใช่บท ...

เราเขียนรหัสต่อไปนี้ในไฟล์ที่เราจะเรียกว่า scan-album.sh และเราให้สิทธิ์ในการดำเนินการ เมื่อเราเรียกใช้มันจะสร้างไดเร็กทอรีย่อยที่จะใช้รูปภาพที่สแกนของเรา อย่าลืมปรับเปลี่ยนค่าพารามิเตอร์ตามความต้องการของคุณ

อย่าลืมอ่านคำแนะนำหลังสคริปต์

#! / bin / ทุบตี
# ข้อมูลสำหรับตัวเลือก

VERBOSE = "" # ดูสถานะ msg: "" ไม่ใช่; "-v" ใช่
PROGRESS = "- p" # แสดงความคืบหน้า "" ไม่ใช่; "-p" ใช่

# พารามิเตอร์ต่อไปนี้กำหนดโดย scanimage - help สำหรับสแกนเนอร์ของคุณ
#Device: หากมีเครื่องสแกนเพียงเครื่องเดียวก็ไม่จำเป็นให้ใส่ DEV = ""
# DEV = "xerox_mfp: libusb: 001: 003"

DEV = ""
MODE = "- โหมดสี"
RESOLUTION = "- ความละเอียด 600dpi"

# เรขาคณิตเช่นภาพถ่าย 130x180 มม
# ตำแหน่งในเครื่องสแกนจุดยอดด้านซ้ายบน

x0 = 0
y0 = 0
ความกว้าง = 180
สูง = 130

#ตัวเลือก:

L = "- ล $ x0"
T = "- เสื้อ $ y0"
WIDTH = "- x $ width"
HIGH = "- และ $ สูง"

# พารามิเตอร์ทั้งหมดเข้าด้วยกัน:

PARAMETERS = "$ DEV $ VERBOSE $ PROGRESS $ MODE $ RESOLUTION $ L $ T $ WIDTH $ HIGH"

# ชื่ออัลบั้ม. สร้างไดเรกทอรีย่อยด้วยชื่อของคุณ:

ALBUM = "วันหยุด _1989"

# เพื่อความปลอดภัยฉันไม่ทำอะไรเลยหากมีไดเร็กทอรีอยู่แล้ว

mkdir $ ALBUM

ถ้า ["$?" = "1"]; แล้ว
ทางออก 100
fi

# ชื่อฐานสำหรับภาพถ่าย (ในคำสั่งย่อย)

ไฟล์ = "./" $ ALBUM "/" $ ALBUM "_foto_"

คำถามเกี่ยวกับฟังก์ชัน () {
โยนทิ้ง "----------------------------------------------- - ------------------------- "
เสียงสะท้อน
โยนออก "******************************"
echo "จำนวนภาพที่สแกน:" "$ I"
โยนออก "******************************"
echo -e "กด: n * n เพื่อออก * คีย์อื่นเพื่อสแกน"
เสียงสะท้อน
อ่าน -s -n1 -p "สแกนรูปภาพใหม่?" กดปุ่ม
เสียงสะท้อน
}

##############################################

# เริ่ม

##############################################

ฉัน = 0

Pregunta

ในขณะที่ ["$ keypress"! = "n"]; ทำ
# ภาพใหม่ที่จะสแกน
ให้ "I + = 1"
NAME = $ FILE $ I
scanimage $ PARAMETERS | แปลง - $ NAME.jpg
Pregunta
ทำ

ข้อเสนอแนะ

การใช้ความละเอียดสูงเช่นเดียวกับในตัวอย่างทำให้การสแกนช้าลงมาก

โปรดทราบว่าหากคุณต้องการพิมพ์ภาพถ่ายบนกระดาษคุณต้องใช้ประมาณ 250 จุดต่อนิ้ว หากแนวคิดในการสแกนภาพถ่ายคือการพิมพ์ในขนาดเดียวกันกับต้นฉบับความละเอียด 250 ก็เพียงพอแล้วหากต้องการดูบนจอภาพที่มี 100 ก็เพียงพอแล้ว ความละเอียดที่สูงขึ้นจะใช้สำหรับการขยาย

ขอแนะนำให้เตรียมภาพซ้อนกันล่วงหน้าเพื่อให้ภาพถ่ายแต่ละภาพอยู่ทางขวา ด้วยวิธีนี้คุณจะไม่เสียเวลาเมื่อใส่ลงในสแกนเนอร์เพื่อไม่ให้หมุน180º

เมื่อทำการปรับเทียบการวัดพารามิเตอร์เรขาคณิตขอแนะนำให้สังเกตว่าจะวางต้นฉบับไว้ในตำแหน่งใดเพื่อไม่ให้ภาพดิจิทัล "กลับหัว" ในกรณีของฉันส่วนล่างของภาพถ่ายจะไปตามแกน 'l'

หากคุณมีสแกนเนอร์เพียงเครื่องเดียวที่เชื่อมต่ออย่าลังเลที่จะใช้ตัวเลือก -d ในสคริปต์คือ DEV = »»

บางครั้งตัวเลขใน "xerox_mfp: libusb: 001: 003" จะเปลี่ยนไปและคุณจะต้องแก้ไขทุกครั้งที่คุณใช้สคริปต์

ระวังขีดกลางและเครื่องหมายคำพูดเมื่อคัดลอกสคริปต์ ยัติภังค์ (เครื่องหมายลบ) สามารถเป็นหนึ่งหรือสองร่วมกันได้ขึ้นอยู่กับตัวเลือก เครื่องหมายอัญประกาศเป็นสองเท่าของแป้นพิมพ์ไม่ใช่เครื่องหมายที่โปรแกรมประมวลผลคำบางตัวเช่น LibreOffice ใส่ไว้

เพื่อความปลอดภัยสคริปต์จะไม่สร้างไดเร็กทอรีหากมีอยู่แล้วเพื่อไม่ให้เขียนทับไฟล์หากมี ในกรณีนั้นจะหยุด

หากอัลบั้มรูปภาพเก่าอย่าเสียใจหากรูปภาพมีขนมีริ้วรอยหรือกิโลกรัมหายไป: -


แสดงความคิดเห็นของคุณ

อีเมล์ของคุณจะไม่ถูกเผยแพร่ ช่องที่ต้องการถูกทำเครื่องหมายด้วย *

*

*

  1. ผู้รับผิดชอบข้อมูล: Miguel ÁngelGatón
  2. วัตถุประสงค์ของข้อมูล: ควบคุมสแปมการจัดการความคิดเห็น
  3. ถูกต้องตามกฎหมาย: ความยินยอมของคุณ
  4. การสื่อสารข้อมูล: ข้อมูลจะไม่ถูกสื่อสารไปยังบุคคลที่สามยกเว้นตามข้อผูกพันทางกฎหมาย
  5. การจัดเก็บข้อมูล: ฐานข้อมูลที่โฮสต์โดย Occentus Networks (EU)
  6. สิทธิ์: คุณสามารถ จำกัด กู้คืนและลบข้อมูลของคุณได้ตลอดเวลา

  1.   รุ่นน้อง Calderon dijo

    ว้าว! ช่างเป็นอะไรที่ดี!
    ฉันไม่คิดว่าจะสามารถทำอะไรได้มากมายกับ bash xD
    ทุกวันคุณเรียนรู้เพิ่มเติม!
    ขอบคุณสำหรับข้อมูล!
    ฉันไม่มีเครื่องสแกน แต่ถ้าได้มาฉันจะลองใช้ทันที🙂

  2.   คนบ้านนอก dijo

    การมีส่วนร่วมนี้จะช่วยฉันได้มากแค่ไหนในการทำให้บันทึกย่อของฉันเป็นดิจิทัลฉันหวังว่ามันจะดีขึ้นฉันกำลังคิดหาฟังก์ชั่นในการสแกนไฟล์ที่สมบูรณ์และตรวจจับขนาดของวัตถุที่สแกนเนื่องจากเราขึ้นอยู่กับเวทมนตร์ของภาพก็สามารถทำได้ แปลงเป็น djvu หรือ pdf และสร้างไฟล์เดียว ฉันแค่เดินเตร่ไป ขอบคุณมากที่อุดหนุน

  3.   รักมัน dijo

    สิ่งที่น่ายินดีขอบคุณมากสำหรับการแบ่งปัน