แปลงภาพสีเทาเป็นภาพช่องอัลฟาในยูนิกซ์เชลล์


14

ฉันมีภาพระดับสีเทา ฉันต้องการแปลงเป็น PNG แบบโปร่งใสเช่นพิกเซลสีดำ (ในภาพต้นฉบับ) จะกลายเป็นทึบแสงเต็มพิกเซลสีขาวกลายเป็นโปร่งใสทั้งหมดพิกเซลสีเทา 50% จะกลายเป็นโปร่งใส 50% และสำหรับทุกเฉดสี ในระหว่าง.

ฉันจะบรรลุสิ่งนี้ได้อย่างไร

(ใช่ฉันรู้ว่านี่เกือบจะเป็นคำถามเดียวกันกับการแปลงเฉดสีเทาเป็นอัลฟาแชนเนลแต่ฉันต้องการทราบวิธีการทำสิ่งนี้โดยใช้เครื่องมือบรรทัดคำสั่งเท่านั้น - เช่น ImageMagick หรือ NetPBM)

นี่คือตัวอย่างผลลัพธ์จากคำถามที่กล่าวถึงข้างต้น ตัวอย่างนี้เป็นผลลัพธ์ที่ฉันต้องการให้บรรลุโดยใช้เครื่องมือบรรทัดคำสั่งเท่านั้น

ตัวอย่าง

หากคุณเปิด PNG นี้ในมุมมองที่สนับสนุนความโปร่งใสคุณจะเห็นว่าฉันหมายถึงอะไร

คำตอบ:


18

Ooookay หลังจาก googling มากมายและอ่านคู่มือ ImageMagick มากกว่าที่ฉันสนใจจริง ๆ นี่คือคำตอบ ระบุว่าคุณมีภาพสีเทาที่เรียกว่าsource.pngนี่คือคำสั่งของฉัน

ในการทำให้พิกเซลสีดำโปร่งใสและทำให้พิกเซลขาวเหมือนเดิมให้รันคำสั่งนี้:

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

หากต้องการทำให้พิกเซลสีขาวโปร่งใสในขณะที่รักษาสีดำตามสภาพเดิมให้ใช้:

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

ลองอธิบายว่าคำสั่งสุดท้ายอีกหน่อย:

  • convert - เป็นคำสั่ง ImageMagic (หนึ่งในหลาย ๆ คำสั่ง)
  • source.png - ภาพต้นฉบับของเฉดสีเทา
  • -alpha copy - คัดลอกเนื้อหาของไฟล์ก่อนหน้านี้ลงในช่องอัลฟา
  • -channel alpha - ระบุว่าตัวดำเนินการต่อไปนี้ควรมีผลกับช่องอัลฟา
  • -negate- กลับช่องอัลฟา (จะเพราะก่อนหน้านี้-chanel alphaไม่ส่งผลกระทบต่อส่วนอื่น ๆ ของภาพ)
  • +channel- ระบุว่าตัวดำเนินการต่อไปนี้ควรมีผลกับช่องสีและไม่แก้ไขช่องอัลฟาอีกต่อไป (นี่คือค่าเริ่มต้นดังนั้นเราจึงไม่จำเป็นต้องระบุในตัวอย่างแรกที่ง่ายกว่า)
  • -fx '#000'- แทนที่เนื้อหาของช่องสีด้วยพิกเซลสีดำ (เนื่องจาก+channelช่องอัลฟาจะไม่ได้รับผลกระทบ)

มันค่อนข้างสำคัญที่จะรวม-fxตัวเลือกสุดท้ายนั้นมิฉะนั้นพิกเซลกึ่งโปร่งใสทั้งหมดในภาพที่สร้างขึ้นจะคงสีไว้ (เนื่องจากพิกเซลเหล่านี้มีความโปร่งแสงครึ่งหนึ่งจึงอาจไม่ชัดเจน แต่ผลลัพธ์ที่ได้คือสิ่งที่ไม่คาดคิด)

ฉันพบรายการของตัวเลือก ImageMagickค่อนข้างมีประโยชน์


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

มันมีประโยชน์มากขอบคุณ! :) ดีใจที่ฉันไม่ต้องคิดออกเอง
Sam Watkins

ฉันรักคุณ!!!!!!
mescarra

ความคิดเห็นประเภทนั้นน่าจะดีกว่าที่จะส่งมาให้ฉันผ่านช่องทางนี้: okcupid.com/profile/zrajm :)
zrajm

1
ไม่แน่ใจว่าทำไม แต่ด้วยรุ่นปัจจุบัน (ImageMagick 7.0.7-21) ฉันได้รับภาพสีขาว / ดำทึบเท่านั้นโดยไม่มีช่องอัลฟา ฉันคัดลอกคำต่อคำบรรทัดคำสั่งเปลี่ยนเส้นทางไฟล์อินพุต / เอาต์พุตเท่านั้น บางทีพวกเขาอาจทำการเปลี่ยนแปลงย้อนหลังที่เข้ากันไม่ได้
ชื่อที่ปรากฏ

0

ด้วย ImageMagick 7.0 คำตอบข้างต้นไม่ได้อีกต่อไป แต่คุณสามารถใช้:

แปลง source.png -channel rgb -fx '#fff' result.png

Aka เติมช่อง RGB ด้วยช่องว่างแล้วปล่อยให้อัลฟาเหมือนก่อน


ฉันสงสัยว่าคุณพลาด '-alpha copy' :)
Chris

0

ด้วย imagemagick 7 ฉันพบว่าจำเป็นต้องระบุ-channel RGBก่อนหน้า-fxมิฉะนั้นคุณจะได้รับภาพสีดำทึบเช่น:

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

และลบล้างมีประโยชน์ถ้าคุณต้องการให้สีดำเป็นสีขาวขุ่นและสีขาวมีความโปร่งใส:

convert input.png -negate -alpha copy -channel RGB -fx '#000' out.png
โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.