PNG görüntülerdeki saydamlığı beyaz arka planla değiştir


294

Şeffaflık içeren bazı PNG görüntülerim var ve görüntü katmanıyla beyaz bir arka plan üzerinde oluşturulmuş sürümler oluşturmam gerekiyor. Image Magick "dönüştürme" işlemleri ile çeşitli şeyler denedim, ama ya hiç bir şey olmaz ya da bir hata alırım. Ara JPG formuna gitmek istemiyorum çünkü eserler istemiyorum. Elbette bunu Gimp veya Photoshop'ta ya da her neyse yapmak kolaydır, ancak komut satırından gerçekten komut yazmayı tercih ederim, çünkü bunların çoğu var.

Çalışmayan bir Image Magick komutunun bir örneği:

convert img1.png -background white -flatten img1-white.png

Bu bir hatayla sonuçlanır.

Teşekkürler!


Benim özel durumumda, bir PDF / A oluşturmak için (Apache) FO işlemcisinden geçerken PNG'deki saydamlık katmanı çakıştı. PDF / A saydamlığa izin vermez. Kullandığım kesmek bunun yerine JPG'ye dönmek.
Wivani

3
"Bu bir hatayla sonuçlanır." hata mesajı nedir?
Aaron McDaid

Bu komutun iyi çalışması gerekir. Değilse, Imagemagick veya libpng'nin yüklü bir yüklemesine sahip olabilirsiniz veya her ikinizin sürümleri çok eski olabilir. Imagemagick ve libpng sürümünüz nedir?
fmw42

Yanıtlar:


255

Bu benim için çalışıyor:

convert -flatten img1.png img1-white.png

Dokümantasyon referansları:


3
Her nasılsa bu benim için çalışmıyor ... "Şeffaf-beyaz renk" denedim, ancak bir istisna / uyarı var.
William Niu

1
-Arka planı beyaza da ayarlamam gerekiyor. Ayrıca eksik olan colors.xml dosyasını da indirmem gerekiyordu.
William Niu

9
Cevabımı aşağıda görebilirsiniz. Bundan 2 yıl sonra eklendi.
Rok Kralj

42
Çok sayfalı belgeleri ile dönüştürmeye ÇALIŞMAYIN-flatten . Sayfaları tek bir sayfaya düzleştirir.
Tim

8
Klasörünüzdeki tüm dosyalarda bunu yapmak istiyorsanız, bunu şu şekilde yapabilirsiniz: mogrify -flatten *.pngher ihtimale karşı, yedekleme yapmayı unutmayın. Daha fazla bilgi için: imagemagick.org/script/mogrify.php
troyane

372
-background white -alpha remove -alpha off

Misal:

convert image.png -background white -alpha remove -alpha off white.png

whiteİstediğiniz diğer renklerle değiştirmekten çekinmeyin . Imagemagick belgeleri -alpha removeoperasyon hakkında şunları söylüyor :

Bu işlem basit ve hızlıdır ve fazladan bellek kullanımına veya alternatif saydamlık giderme teknikleriyle ilişkili olabilecek diğer yan etkilere ihtiyaç duymadan işi yapar. Dolayısıyla görüntü saydamlığını kaldırmanın tercih edilen yoludur.


3
-background whiteGerekli değil gibi görünüyor (muhtemelen diğer renkler için de olsa).
Skippy le Grand Gourou

5
@SkippyleGrandGourou: PNG için saydamlık geri dönüş rengi her zaman beyaz olmadığından gereklidir.
Rok Kralj

3
kabul edilen cevaptan daha iyi (birden fazla katman olması durumunda doğru olanı yapmaz)
axkibe 28:01 '

5
Ortaya çıkan görüntüde bir alfa kanalı olacaktır. Boş olacak ama hala orada olacak. Kanal tamamen kaldırmak için ekleyin -alpha off.
josch

2
Çalışmıyor. Saydam arka planı ve ortasında kırmızı bir nokta olan yeni bir PNG yaptım. Hangi rengi seçersem seçelim, daima siyah bir arka plan üretti. convert image.png -background white -alpha off white.pngsiyah bir arka plan ile bir görüntü üretti. convert image.png -background "#00ff33" -alpha off 00ff33.pngsiyah bir arka plan üretti
McNulty

46

ImageMagick'te görüntüyü düzleştirme ve arka plan görüntüsünü uygulama basittir

Ancak, komutların sırası çok önemlidir

Saydam bir görüntüye herhangi bir arka plan uygulamak ve düzleştirmek için, önce arka planı düzleştirmektense uygulayın. Tersi çalışmıyor.

$ convert sourceimage.png -background BackgroundColor -flatten destinationimage.png

Her ne sebeple olursa olsun, bu benim için iyi çalıştı. Orijinal denemenizin neden işe yaramadığından emin değilim.
Anthony

23

Benim için çalışan tek şey tüm cevapların bir karışımıydı:

convert in.png -background white -alpha remove -flatten -alpha off out.png

4
Harika, işe yaradı. Aslında beyazdan başka bir renge ihtiyacım vardı ve beyaz kullanmak ... -background "#010203" ...yerine kullanabilirsiniz .
Alexis Wilke

aynı görüntüyü bir dizindeki tüm klasörlerde nasıl değiştireceğinizi öğreninmogrify -background white -flatten */*.png
Julian

-alpha removebenim için ne yaptı
Stefan Dragnev

13

bir dizindeki tüm klasörlerde aynı görüntüyü saydam yerine beyaz ile nasıl değiştireceğiniz aşağıda açıklanmıştır:

mogrify -background white -flatten */*.png


10

-Flatten kullanmak beni tamamen kızdırdı, çünkü mogrify mahsulü ve yeniden boyutlandırma ile birlikte düzleşmek işe yaramaz. Resmi ve benim için doğru yol alfa kanalını "kaldırmak".

-alfa kaldırma -alfa kapalı (JPG ile gerekli değildir)

Belgeye bakınız: http://www.imagemagick.org/Usage/masking/#remove


Peki komut nasıl olur? Bu burada işe yaramadı:convert imgWithTranspBkg.png -alpha remove -alpha off bkg.jpg resultImg.png
Kova Gücü

Sadece alfa kaldırmak istedim. JPG'ye dönüştürün, güzel ve kolay. Bahşiş için teşekkürler.
Roger CS Wernersson

Yukarıdakilerin benim için işe yarayan tek çözümü bu. Artık iTunes mağazası resmimden memnun.
Bill Cheswick

7

Alfa Kaldır bölümünde Kılavuzu ImageMagick Kullanımı kullanarak önerir -alpha removeseçeneği, örneğin:

convert in.png  -background white  -alpha remove  out.png

... -backgroundseçtiğiniz rengi kullanarak .

Rehber şunları belirtmektedir:

Bu işlem basit ve hızlıdır ve fazladan bellek kullanımına veya alternatif saydamlık giderme teknikleriyle ilişkili olabilecek diğer yan etkilere ihtiyaç duymadan işi yapar. Dolayısıyla görüntü saydamlığını ortadan kaldırmanın tercih edilen yoludur.

Ayrıca not ekler:

Saydamlık 'kaldırıldığında' alfa kanalının açık kalacağını, ancak şimdi tamamen opak olacağını unutmayın. Artık alfa kanalına ihtiyacınız yoksa devre dışı bırakmak için Alpha Off'u kullanabilirsiniz.

Böylece, alfa kanalına ihtiyacınız yoksa, -alpha offseçeneği ekleyerek çıktı görüntü boyutunuzu küçültebilirsiniz , örneğin:

convert in.png  -background white  -alpha remove  -alpha off  out.png

Saydamlığı Görüntülerden Çıkarma bölümünde açıklanan saydamlığı kaldırmak için sık kullanılan diğer teknikler hakkında daha fazla ayrıntı vardır .

Bu bölümde, -flattensaydamlığı gidermek için bir teknik olarak kullanılmasına ilişkin önemli bir uyarıdan bahsedilmektedir :

Ancak bu, "mogrify" ile veya birden fazla görüntü dizisiyle çalışmaz, çünkü temel olarak "-flatten" operatörü gerçekten birden fazla görüntüyü tek bir görüntüde birleştirmek için tasarlanmıştır.

Dolayısıyla, aynı anda birden fazla görüntüyü dönüştürüyorsanız, örneğin bir PDF dosyasından küçük resimler oluşturmak, -flattenistediğinizi yapmaz (tüm sayfalar için tüm görüntüleri tek bir görüntüye düzleştirir). Öte yandan, -alpha removetekniği kullanmak yine de her biri saydamlık kaldırılmış birden fazla görüntü üretecektir.


5

Komutunuzun doğru olduğu anlaşılıyor, bu nedenle sorunun PNG () desteğinin eksik olması olabilir. Aşağıdakileri kontrol edebilir convert -list configureveya deneyebilirsiniz:

sudo yum install libpng libpng-devel

1
Evet teşekkürler; Bu (eski) konudur "graphicks Magick" bir hata, bir çatal / yeniden yazma / "görüntü maji' ne olursa olsun.
Pointy

@Pinti görüyorum! Meraktan, sorunun asıl nedeni neydi (sadece bir versiyonda idi)?
Alastair

Gerçekten tam olarak bilmiyorum; sadece bir hataydı. Ben onların Graphicks Magick bir sürdürücü değilim, bu yüzden onların kodları hakkında hiçbir fikrim yok. Sanırım bir noktada tekrar denemem gerekiyor.
Sivri

Ubuntu yok mu? İşte libpng12-0 ama yine de çalışmıyor :(
Kova Gücü

libpng12-0Kurulu ve çalışan Ubuntu 13.04 kullanıyorum . Bunu çalıştırırsan png görebilir misin? convert -list configure | grep \png
Alastair

5

Bu tam olarak sorunuzun cevabı değil, ama alfa kanalını nasıl kaldıracağınızı anlamaya çalışırken sorunuzu buldum, bu yüzden bu cevabı buraya eklemeye karar verdim:

Alfa kanalını imagemagick kullanarak kaldırmak istiyorsanız, bu komutu kullanabilirsiniz:

mogrify -alpha off ./*.png

3

Welp "görüntü magick" üzerine "grafik magick" yükleme kararı biraz kaba kenarları var gibi görünüyor - orijinal crufty eski "image magick" yeniden yüklediğinizde, yukarıdaki komut mükemmel çalışır.

düzenlemek , uzun bir süre sonra - "Grafik magick" bu sorunu çözüp çözmediğini görmek için bu günlerden biri.


2

İkisine de ihtiyacım vardı: hem -alpha backgroundve -flatten, ya da -fill.

Saydam bir arka plan ve ortasında kırmızı bir nokta ile yeni bir PNG yaptım.

convert image.png -background green -alpha off green.png başarısız oldu: siyah arka plana sahip bir görüntü oluşturdu

convert image.png -background green -alpha background -flatten green.png doğru yeşil arka plana sahip bir görüntü üretti.

Tabii ki, yeniden adlandırdığım başka bir dosyayla, image.pnghiçbir şey yapamadı. Bu dosya için, saydam piksellerin renginin "# d5d5d5" olduğunu buldum, bu yüzden o rengi yeşil ile doldurdum:

convert image.png -fill green -opaque "#d5d5d5" green.png saydam pikselleri doğru yeşille değiştirdi.


geçerli ImageMagick ile uygun komut convert image.png -background green -alpha background -alpha off green.pngveya convert image.png -background green -alpha background -alpha remove green.pngveya convert image.png -background green -flatten green.png
fmw42

1

Komut satırı olmayan seçenek: PNG dosyasını Windows Paint'te açın ve Kaydet'i tıklatın.


0

bu, saydamlığı ile ilkini 2.'nin üstüne yerleştiren bir görüntü oluşturur

composite -gravity center ImgWithTransp.png BackgroundSameSizeOfImg.png ResultImg.png

aslında bu yazıdaki ipucunu buldu


0

Alfa kanalını dosyadan gerçekten kaldırmak için alfa off seçeneğini kullanın:

convert in.png -background white -alpha off out.png

1
Aslında, sağladığınız bağlantı şöyle diyor: "Görüntüye eklenmiş alfa kanalını gerçekten silmez veya açmaz, yalnızca kanalın görüntü üzerindeki etkisini kapatır." Alfa kanalını gerçekten kaldırmak için cevabıma bakın.
Rok Kralj

0

Bana gerçekten yardımcı olan bu soru ve cevapları gördüm, ancak daha sonra bir çok dosya için yapmam gerekiyordu, Yani bir klasörde birden fazla görüntü (PNG görüntüsü) olması ve bunu herkes için yapmak istiyorsanız:

find ./ -name "*.png" -exec convert {} -flatten {} \;

-1

-Alfa kapalı, DEĞİL -alfa kaldır! Herhangi bir simgede bir alfa kanalı olduğunda iOS uygulama mağazası yüklemesi başarısız oluyor !!

İşte nasıl yapılacağı: mogrify -alpha off * .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.