Gri tonlamalı görüntüyü unix kabuğunda alfa kanalı görüntüsüne dönüştürme


14

Gri tonlamalı bir resmim var. Şeffaf bir PNG'ye dönüştürmek istiyorum, böylece siyah pikseller (orijinal görüntüde) tamamen opak hale gelir, beyaz pikseller tamamen şeffaf olur,% 50 gri piksel% 50 şeffaf olur ve böylece tüm gölgeler için arasında.

Bunu nasıl başarabilirim?

(Evet, bunun gri tonlama tonlarını alfa kanalına dönüştürmeyle neredeyse aynı soru olduğunu biliyorum, ancak bunu yalnızca komut satırı araçlarını (örn. ImageMagick veya NetPBM) kullanarak nasıl yapacağımı bilmek istiyorum .)

Yukarıda belirtilen sorudan bir örnek sonuç. Bu örnek, yalnızca komut satırı araçlarını kullanarak elde etmek istediğim bir sonuçtur.

Örneklem

Bu PNG'yi saydamlığı destekleyen bir görüntüleyicide açarsanız, ne demek istediğimi görürsünüz.

Yanıtlar:


18

Ooookay. Çok fazla googling yaptıktan ve gerçekten umduğumdan daha fazla ImageMagick kılavuzu okuduktan sonra, işte cevap. Adında gri tonlamalı bir görüntünüz olduğu göz önüne alındığında source.png, işte benim komutlarım.

Yapmak için markasını siyah pikseller saydam bu komutu çalıştırın ve oldukları gibi beyaz pikselleri tutar:

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

Yerine To beyaz pikselleri saydam yapmak siyah tutarak kullanımı olduğu gibi iken:

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

Son komutu biraz daha ayrıntılı olarak açıklayalım:

  • convert - ImageMagic komutu (birkaç taneden biri)
  • source.png - Gri tonlamalı kaynak görüntü.
  • -alpha copy - Önceki dosyanın içeriğini alfa kanalına kopyalayın.
  • -channel alpha - Aşağıdaki işleçlerin yalnızca alfa kanalını etkilemesi gerektiğini belirtin.
  • -negate- Alfa kanalını ters çevirin (çünkü önceki -chanel alphagörüntünün başka bir bölümünü etkilemez).
  • +channel- Yalnızca aşağıdaki işleçlerin renk kanallarını etkilemesi ve artık alfa kanalını değiştirmemesi gerektiğini belirtin. (Bu varsayılan ayardır ve bu nedenle ilk, daha basit örnekte sağlamamıza gerek yoktur.)
  • -fx '#000'- Renkli kanal içeriklerini siyah piksellerle değiştirin. ( +channelAlfa kanalı etkilenmez).

Bu son -fxseçeneği dahil etmek oldukça önemlidir , aksi takdirde oluşturulan görüntüdeki tüm yarı saydam pikseller renkleri korur. (Bu pikseller yarı saydam olduğundan, açık olmayabilir, ancak sonuçta beklendiği gibi değildir.)

ImageMagick seçeneklerinin listesini oldukça kullanışlı buldum .


resmimi gerçek gri tonlamalı resimden daha koyu yapan ikinci komutu kullanırken hedefime ulaşmak için oldukça iyi bir açıklama. Aslında, bu saydamlıktan farklı gri tonlarında bulunan aynı renk tonuna ulaşma amacım beklendiği gibi. bunu başarmak için herhangi bir Fikir?
Hardik Patel

bu çok faydalı, teşekkürler! :) sevindim ben kendim bulmak zorunda değildi
Sam Watkins

Seni seviyorum!!!!!!
mescarra

Bu tür yorumların bana bu kanaldan gönderilmesi daha iyidir: okcupid.com/profile/zrajm :)
zrajm

1
neden olduğundan emin değilim, ancak mevcut sürümle (ImageMagick 7.0.7-21) Alfa kanalı olmadan sonuç olarak sadece düz beyaz / siyah görüntü alıyorum. Sadece giriş / çıkış dosya yollarını değiştirerek komut satırı kelimesi kelimesine kopyaladım. Belki geriye doğru uyumsuz değişiklikler yaptılar.
Görünen Ad

0

ImageMagick 7.0 ile yukarıdaki cevap artık geçerli değil. Ancak şunları kullanabilirsiniz:

convert source.png -kanal rgb -fx '#fff' sonuç.png

Aka, RGB kanallarını boşla doldurun ve alfa'yı daha önce olduğu gibi bırakın.


'-Alpha kopyasını' kaçırdığınızdan şüpheliyim :)
Chris

0

Imagemagick 7 ile, daha -channel RGBönce belirtmek gerekli buluyorum -fx, aksi takdirde böyle bir katı siyah görüntü elde edersiniz:

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

Ve siyahın opak ve beyazın şeffaf olmasını istiyorsanız olumsuzluk yararlıdır:

convert input.png -negate -alpha copy -channel RGB -fx '#000' out.png
Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.