หมุนรูปภาพจากเทอร์มินัล


34

ฉันมีไดเรกทอรีที่มีรูปภาพจำนวนมาก แต่อยู่ในทิศทางที่ไม่ถูกต้อง ฉันต้องการหมุนภาพเพื่อแก้ไขทิศทาง (ส่วนใหญ่± 90 o ) การใช้โปรแกรมดูรูปภาพ (shotwell photo) ฉันสามารถหมุนมันทีละภาพโดยคลิกที่ปุ่มหมุน แต่มันน่าเบื่อเกินไป

ฉันดูman shotwellแล้วshotwell --help-allแต่ไม่มีอะไรที่อธิบายวิธีเรียกใช้คำสั่งหมุนจากบรรทัดคำสั่ง

มีวิธีใดบ้างที่ฉันสามารถเรียกใช้คำสั่งหมุนของ shotwell (หรือโปรแกรมดูอื่น ๆ ) จากเทอร์มินัลได้? หรือวิธีการอื่นในการหมุนภาพก็ยินดีเช่นกัน


1
askubuntu.com/a/432662/15811ถ้าคุณต้องการจาก nautilus แต่คำสั่งเทอร์มินัลที่คุณต้องการคือ "แปลง" จาก "imagemagick"
Rinzwind

1
หากคุณต้องการการหมุนแบบไม่สูญเสียและไฟล์เป็น jpeg ให้ดูที่jpegtran ; ImageMagick จะทำ(เล็ก ๆ ตรงไปตรงมา) หมุนสูญเสีย
Rmano

คำตอบ:


39

หากคุณกำลังมองหาการใช้งาน bash อย่างแท้จริงconvertคำสั่งของ ImageMagick คือสิ่งที่คุณกำลังมองหา:

for szFile in /path/*.png
do 
    convert "$szFile" -rotate 90 /tmp/"$(basename "$szFile")" ; 
done

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

(และจะใช้ได้กับ Ubuntu ทุกรุ่นเนื่องจากเป็นซอฟต์แวร์มาตรฐาน)


28
for file in *.JPG; do convert $file -rotate 90 rotated-$file; done

สิ่งนี้จะคัดลอก- หมุน - และเปลี่ยนชื่อไฟล์ของคุณ

หากคุณต้องการปล่อยให้ไฟล์ดั้งเดิมไม่ถูกแตะต้องวิธีนี้อาจใช้ได้ผลกับคุณ ...

โปรดทราบว่านี่เป็นตัวพิมพ์ใหญ่ - เล็ก: ถ้าไฟล์ของคุณชื่อ * .jpg แทนที่ด้วยตัวพิมพ์เล็ก (หรือ * .png ... ) ตามลำดับ


4

หากคุณต้องการเขียนทับแบบแทนที่mogrifyชุด ImageMagick น่าจะเป็นวิธีที่ง่ายที่สุดในการทำสิ่งนี้:

# counterclockwise:
mogrify -rotate -90 *.jpg

# clockwise:
mogrify -rotate 90 *.jpg

CAVEAT : นี้ไม่ได้เป็นวิธีการหมุน lossless สำหรับไฟล์ JPEG, https://www.imagemagick.org/discourse-server/viewtopic.php?t=5899 jpegtranประสบความสำเร็จ (ยังไม่ทดลอง):

# counterclockwise
ls *.jpg | xargs -n 1 jpegtran -perfect -rotate 270

# clockwise
ls *.jpg | xargs -n 1 jpegtran -perfect -rotate 90

ทำงานอย่างสมบูรณ์แบบ
พอลโจนส์

Mogrify เป็นของมีดชาวสวิสเมื่อพูดถึงการแก้ไขรูปภาพแบบง่าย ๆ รวดเร็ว
EA304GT

คำตอบที่ดีที่สุดทำไมคุณไม่ต้องการทำแบบนี้?
mLstudent33

1
@ mLstudent33: คำถามที่ดี ดูเหมือนว่าmogrifyจะไม่สูญเสียไฟล์ JPEG แต่jpegtranเป็น
krlmlr

3

นี่คือวิธีที่ฉันทำ:

  1. ติดตั้ง gThumb

    sudo apt-get install gthumb
  2. เปิดหอยโข่งและไปที่ไดเรกทอรีรูปภาพของคุณ Open with -> gthumbคลิกขวาที่หนึ่งและเลือก

  3. ใต้viewเมนูให้เลือกBrowserหรือกดEscปุ่ม วิธีนี้จะเปิดเบราว์เซอร์ไดเรกทอรีที่แสดงภาพทั้งหมดของคุณ

    ป้อนคำอธิบายรูปภาพที่นี่

  4. กดCtrlและเลือกภาพที่คุณต้องการที่จะหมุนหรือเลือกทั้งหมดของพวกเขาผ่านทาง+CtrlA

  5. บนแถบเครื่องมือเลือกToolsและจากนั้นRotate RightหรือRotate Leftขึ้นอยู่กับความต้องการของคุณ

    ป้อนคำอธิบายรูปภาพที่นี่


0

ทางออกที่ดีคือสร้างชุดการสำรองข้อมูล (เช่นนำหน้าbackup-) หมุนไฟล์ต้นฉบับที่สร้างชุดไฟล์ใหม่ (นำหน้าเช่นrotated-) เพื่อให้ชุด

  • img-1.png
  • backup-img-1.png
  • rotated-img-1.png
  • img-2.png
  • ... และต่อไป

mv/ cpเครื่องมือ [ทุบตี globbing] สามารถเพิ่มคำนำหน้ามันยุ่งจะพาพวกเขาออกไป (มันจะใช้การขยายตัวพารามิเตอร์ ewww ... )

renameเครื่องมือที่ช่วยให้คุณใช้s/before/after/ไวยากรณ์เปลี่ยนตัว (จากsedเครื่องมือ) เพื่อแลกเปลี่ยนที่คำนำหน้าป้องกันและเขียนทับไฟล์เดิมดังนั้นกระบวนการโดยรวมของคุณสำหรับการให้ชุดของภาพimg-{} 1..n.pngจะเป็น:

for imgf in img-*.png; do mv "$imgf" "backup-$imgf"; done
for imgf in backup-img-*.png; do convert "$imgf" -rotate 90 "rotated-$imgf"; done

บันทึก:

  • คุณสามารถใช้cpแทนได้mvแต่จากนั้นมีสำเนาต้นฉบับ 2 ชุดวางอยู่รอบ ๆ (ข้อเสียคือคุณจะต่อท้ายคำนำหน้า " rotated-backup-... ")
  • การหมุนตามเข็มนาฬิกา (ทวนเข็มนาฬิกา-rotate 27090 องศา)
  • เพื่อติดตามความคืบหน้าเพิ่มecho "Rotating ${imgf#backup-} ... ";หลังจากการconvertโทร (ก่อนdone)
  • สำหรับรูปแบบที่กะทัดรัดกว่า (เช่นชุดของไฟล์ที่มีหมายเลข) ให้ใช้การขยายพารามิเตอร์บางอย่างecho "$(echo ${imgf#backup-img-} | cut -d\. -f 1)...";แทน

    (คุณไม่สามารถลบคำนำหน้าและคำต่อท้ายในการขยาย bash param เดียวกันที่ใช้cut)

จากนั้นหลังจากการตรวจสอบคุณไม่ได้ทำผิดพลาดให้ลบรูปภาพโดยการย้ายกลับไปเป็นต้นฉบับ

rename 's/^rotated-//;' rotated-*
rm backup-img-*

0

คุณสามารถคัดลอก / วางรหัสนี้และบันทึกเป็น rotate.sh

#!/bin/bash -e

CUR_DIR=$(pwd)
cd $1
for file in *.jpg
do
    convert $file -rotate 90 $file
done
cd $CUR_DIR

./rotate.sh folder_containing_imagesหลังจากบันทึกแฟ้มนี้เรียกใช้จากขั้วใช้


กรุณาตรวจสอบรหัสของคุณและลิงค์ที่ให้ไว้!
George Udosen
โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.