Chuyển đổi một loạt các tệp BMP thành JPEG trên Linux


32

Ai đó đã gửi cho tôi một loạt các tệp BMP và tôi cần chúng ở dạng JPEG. Tôi có thể chuyển đổi từng cái một bằng GIMP, nhưng tôi muốn làm tất cả trong một lần. Tôi có Ubuntu.

Câu trả lời:


46

Bạn có thể sử dụng công cụ mogrify của ImageMagick

mogrify -format jpg * .bmp

1
Lưu ý rằng câu trả lời này cũng hoạt động với Windows, vì ImageMagick cũng có sẵn để tải xuống cho Windows.
Gnoupi

Nó có sudo apt install imagemagicktrên Ubuntu và bạn có thể thiết lập chất lượng bằng cách thêm-quality 100
mpen

15

Bạn có thể đã cài đặt ImageMagick trên Ubuntu.
Điều đó có thể làm ,

convert filename.bmp filename.jpg

cập nhật:

Các mogrify(trả lời bằng hyperslugvà giới thiệu bởi cjm) cũng là một lựa chọn tốt.

Sử dụng chương trình mogrify để thay đổi kích thước hình ảnh, làm mờ, cắt, khử màu, hòa sắc, vẽ, lật, nối, lấy mẫu lại, và nhiều hơn nữa.
Công cụ này tương tự để chuyển đổi ngoại trừ tệp hình ảnh gốc bị ghi đè
(trừ khi bạn thay đổi hậu tố tệp với -formattùy chọn) với bất kỳ thay đổi nào bạn yêu cầu.


1
Lệnh mogrify của ImageMagick tốt hơn chuyển đổi cho điều này, bởi vì nó có thể được sử dụng dễ dàng với các ký tự đại diện. Xem câu trả lời của hyperslug.
cjm

7

Hãy để tôi làm một chút thay đổi để trả lời salmonmoose:

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

Các công việc trên nhưng tạo ra các tệp có tên "bmp.jpg". Bạn có thể nhận được các tập tin .jpg bằng lệnh này:

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

Xem man bashđể biết chi tiết của forlệnh. Phần này ${i%bmp}có nghĩa là chuỗi "$ {i}" không có chuỗi con "bmp" ở cuối.

Có các hoạt động khác để chuyển đổi chuỗi trong "$ {i}". "$ i" là cách viết tắt của "$ {i}". Phần ls *.bmptrong câu trả lời của salmonmoose có nghĩa là "thực thi ls *.bmp, sau đó phần for igán cho mỗi chuỗi được phân tách bằng dấu cách cho i". Điều tương tự cũng đạt được bởi *.bmpvì nó khớp với tất cả các tên tệp trong thư mục.

Có một nhược điểm với for- nếu các tệp trong thư mục của bạn có khoảng trắng trong tên, ví dụ "ảnh cưới 1.bmp", nó sẽ được gán 3 lần cho ivar, thực hiện các lệnh sau:

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

Trong câu trả lời của tôi, trận đấu "$ {i% bmp}" không thành công.

Nhưng có một giải pháp - bạn có thể sử dụng findlệnh thay thế. Xem man findđể biết chi tiết. Bạn nên gõ một cái gì đó như sau (vui lòng kiểm tra cú pháp với trang man trước khi thử):

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

(Tôi không chắc lắm về phần tên, và tôi có một số nghi ngờ trong -execphần này, xem man findtrước)

Nếu bạn muốn tham gia tất cả các hình ảnh trong một tệp .jpg, bạn có thể ghép chúng với bộ lọc khác, như hình ảnh được đề cập trong câu trả lời đầu tiên.


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

Vâng, điều này sẽ tạo ra một loạt các tệp được gọi là filename.bmp.jpg nhưng nó sẽ thực hiện công việc.


Sử dụng vô dụng ls.
Dmitry Grigoryev
Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.