Chuyển đổi hình ảnh thang độ xám thành hình ảnh kênh alpha trong vỏ unix


14

Tôi có một hình ảnh tỷ lệ xám. Tôi muốn chuyển đổi nó thành một PNG trong suốt, sao cho các pixel đen (trong ảnh gốc) trở nên mờ hoàn toàn, các pixel trắng trở nên trong suốt hoàn toàn, một pixel xám 50% sẽ trở nên trong suốt 50%, và cứ như vậy cho tất cả các sắc thái ở giữa.

Làm thế nào tôi có thể đạt được điều này?

(Vâng, tôi biết rằng đây là gần như cùng một câu hỏi như Chuyển đổi màu grayscale thành kênh alpha , nhưng tôi muốn biết làm thế nào để làm điều này chỉ sử dụng các công cụ dòng lệnh -. Ví dụ như ImageMagick hoặc NetPBM)

Đây là một kết quả mẫu từ câu hỏi nêu trên. Mẫu này là kết quả mà tôi muốn đạt được chỉ bằng các công cụ dòng lệnh.

Mẫu vật

Nếu bạn mở PNG này trong trình xem hỗ trợ độ trong suốt, bạn sẽ thấy ý tôi là gì.

Câu trả lời:


18

Ôi trời Sau nhiều lần googling và đọc nhiều hướng dẫn sử dụng ImageMagick hơn tôi thực sự quan tâm, đây là câu trả lời. Cho rằng bạn có một hình ảnh thang độ xám được gọi source.png, đây là các lệnh của tôi.

Để làm cho các pixel đen trong suốt và giữ các pixel trắng như hiện tại, hãy chạy lệnh này:

 convert source.png -alpha copy -fx '#fff' result.png

Thay vào đó, làm cho các pixel trắng trong suốt trong khi vẫn giữ nguyên màu đen, sử dụng:

 convert source.png -alpha copy -channel alpha -negate +channel -fx '#000' result.png

Hãy giải thích lệnh cuối cùng kỹ lưỡng hơn một chút:

  • convert - Là lệnh ImageMagic (một trong nhiều)
  • source.png - Hình ảnh nguồn greyscale.
  • -alpha copy - Sao chép nội dung của tập tin trước vào kênh alpha.
  • -channel alpha - Chỉ định rằng các toán tử sau chỉ ảnh hưởng đến kênh alpha.
  • -negate- Đảo ngược kênh alpha (sẽ, vì trước đó -chanel alphakhông ảnh hưởng đến bất kỳ phần nào khác của hình ảnh).
  • +channel- Chỉ định rằng các toán tử sau chỉ nên ảnh hưởng đến các kênh màu và không còn sửa đổi kênh alpha. (Đây là mặc định và do đó chúng tôi không cần cung cấp nó trong ví dụ đầu tiên, đơn giản hơn.)
  • -fx '#000'- Thay thế nội dung kênh màu bằng pixel đen. (Vì +channelkênh alpha sẽ không bị ảnh hưởng).

Điều khá quan trọng là bao gồm -fxtùy chọn cuối cùng đó , nếu không tất cả các pixel bán trong suốt trong hình ảnh được tạo sẽ giữ lại màu sắc. (Vì các pixel này trong suốt một nửa, có thể không rõ ràng, nhưng kết quả cuối cùng không như mong đợi.)

Tôi thấy danh sách các tùy chọn ImageMagick khá hữu ích.


giải thích khá tốt để đạt được mục tiêu của tôi, khi tôi đang sử dụng lệnh thứ hai làm cho hình ảnh của tôi tối hơn hình ảnh thang độ xám thực tế. Trên thực tế, mục tiêu của tôi để đạt được cùng một tông màu có trong thang độ xám khác với độ trong suốt như mong đợi. Ý tưởng nào để đạt được điều đó?
Hardik Patel

Điều đó rất hữu ích, cảm ơn! :) rất vui vì tôi đã không phải tự mình tìm ra
Sam Watkins

Tôi mến bạn!!!!!!
mescarra

Những loại bình luận đó có lẽ tốt hơn để gửi cho tôi qua kênh này: okcool.com/profile/zrajm :)
zrajm

1
không chắc chắn tại sao, nhưng với phiên bản hiện tại (ImageMagick 7.0.7-21) tôi chỉ nhận được hình ảnh trắng / đen, mà không có bất kỳ kênh alpha nào. Tôi đã sao chép nguyên văn dòng lệnh, chỉ thay đổi đường dẫn tệp đầu vào / đầu ra. Có lẽ họ đã thực hiện một số thay đổi không tương thích ngược.
Tên hiển thị

0

Với ImageMagick 7.0, câu trả lời trên không còn nữa. Nhưng bạn có thể sử dụng:

chuyển đổi source.png -channel rgb -fx '#fff' result.png

Aka, điền vào các kênh RGB trống và để alpha như trước.


Tôi nghi ngờ bạn đã bỏ lỡ bản sao '-alpha' :)
Chris

0

Với hình ảnh 7, tôi thấy cần phải chỉ định -channel RGBtrước -fx, nếu không, bạn sẽ có được một hình ảnh đen đặc, như vậy:

convert input.png -alpha copy -channel RGB -fx '#000' out.png

Và phủ định là hữu ích nếu bạn muốn màu đen mờ và màu trắng trong suốt:

convert input.png -negate -alpha copy -channel RGB -fx '#000' out.png
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.