แปลงไฟล์ BMP เป็นไฟล์ JPEG บน Linux


32

มีคนส่งไฟล์ BMP ให้ฉันจำนวนมากและฉันต้องการไฟล์เป็น JPEG ฉันสามารถแปลงทีละคนโดยใช้ GIMP แต่ฉันอยากทำทุกอย่างในครั้งเดียว ฉันมีอูบุนตู

คำตอบ:


46

คุณสามารถใช้เครื่องมือ mogrify ของ ImageMagick

mogrify -format jpg * .bmp

1
โปรดทราบว่าคำตอบนี้ใช้ได้กับ Windows ด้วยเช่นกันเพราะ ImageMagick สามารถดาวน์โหลดได้สำหรับ Windows เช่นกัน
Gnoupi

มันsudo apt install imagemagickอยู่บน Ubuntu และคุณสามารถตั้งค่าคุณภาพโดยเพิ่ม-quality 100
mpen

15

คุณน่าจะติดตั้งImageMagickบน Ubuntu
ที่สามารถทำ ,

convert filename.bmp filename.jpg

อัปเดต:

mogrify(ตอบhyperslugและเรียกโดยcjm) ยังเป็นตัวเลือกที่ดี

ใช้โปรแกรมmogrifyเพื่อปรับขนาดรูปภาพเบลอครอบตัด despeckle dither วาดบนพลิกพลิกเข้าร่วมตัวอย่างใหม่และอีกมากมาย
เครื่องมือนี้มีความคล้ายคลึงกันในการแปลงยกเว้นว่าไฟล์ภาพดั้งเดิมจะถูกเขียนทับ
(เว้นแต่คุณจะเปลี่ยนคำต่อท้ายไฟล์ด้วย-formatตัวเลือก) พร้อมกับการเปลี่ยนแปลงใด ๆ ที่คุณร้องขอ


1
คำสั่ง mogrify ของ ImageMagick นั้นดีกว่าการแปลงสำหรับสิ่งนี้เพราะมันสามารถใช้กับ wildcard ได้อย่างง่ายดาย ดูคำตอบของ hyperslug
cjm

7

ให้ฉันเปลี่ยนแปลงเล็กน้อยเพื่อคำตอบ salmonmoose:

for i in `ls *.bmp`; do convert $i $i.jpg; done

การทำงานด้านบน แต่สร้างไฟล์ชื่อ "bmp.jpg" คุณสามารถรับไฟล์. jpg ได้ด้วยคำสั่งนี้:

for i in *.bmp; do convert ${i} ${i%bmp}jpg; done

ดูman bashรายละเอียดของforคำสั่ง ${i%bmp}ส่วนหนึ่งหมายถึงสตริง "$ {i}" โดยไม่มี "bmp" substring ที่สิ้นสุด

มีการดำเนินการอื่นเพื่อแปลงสตริงใน "$ {i}" "$ i" เป็นชวเลขสำหรับ "$ {i}" ls *.bmpมีส่วนร่วมใน salmonmoose คำตอบที่หมายถึง "การดำเนินการls *.bmpแล้วสำหรับการiกำหนดส่วนแต่ละสายแยกจากกันโดยช่องว่างi" ทำได้เหมือนกัน*.bmpเพราะมันตรงกับชื่อไฟล์ทั้งหมดในไดเรกทอรี

มีข้อเสียคือfor- หากไฟล์ในไดเรกทอรีของคุณมีช่องว่างในชื่อตัวอย่างเช่น "wedding picture 1.bmp" มันจะถูกกำหนด 3 ครั้งให้กับivar โดยทำตามคำสั่งเหล่านี้:

convert wedding wedding.jpg 
convert picture picture.jpg
convert 1.bmp  1.bmp.jpg

ในคำตอบของฉันการจับคู่ "$ {i% bmp}" ก็ล้มเหลวเช่นกัน

แต่มีวิธีแก้ไขคือ - คุณสามารถใช้findคำสั่งแทน ดูman findรายละเอียดที่ คุณควรพิมพ์สิ่งต่อไปนี้ (โปรดตรวจสอบไวยากรณ์กับ man page ก่อนลองใช้):

find -name *.bmp -type f -exec convert '{}' '{}'.jpg \;

(ฉันไม่แน่ใจในส่วนของชื่อมากและฉันมีข้อสงสัยใน-execส่วนนี้ให้ดูก่อนman find)

หากคุณต้องการเข้าร่วมภาพทั้งหมดในไฟล์. jpg ไฟล์เดียวคุณสามารถต่อภาพเหล่านั้นเข้ากับตัวกรองอื่นตามที่กล่าวไว้ในคำตอบแรก


1
for i in `ls *.bmp`; do convert $i $i.jpg; done

ใช่สิ่งนี้จะทำให้ไฟล์เป็นไฟล์ชื่อ filename.bmp.jpg แต่มันจะทำงาน


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