แทนที่ความโปร่งใสในภาพ PNG ด้วยพื้นหลังสีขาว


294

ฉันมีรูปภาพ PNG ที่โปร่งใสและฉันต้องสร้างเวอร์ชันด้วยเลเยอร์รูปภาพที่ประกอบไปด้วยพื้นหลังสีขาว ฉันได้ลองทำสิ่งต่าง ๆ ด้วยการดำเนินการ "แปลง" ของ Image Magick แต่ไม่มีอะไรเกิดขึ้นเลยหรือฉันได้รับข้อผิดพลาด ฉันไม่ต้องการไปที่รูปแบบ JPG ระดับกลางเพราะฉันไม่ต้องการสิ่งประดิษฐ์ แน่นอนว่ามันง่ายที่จะทำใน Gimp หรือ Photoshop หรืออะไรก็ตาม แต่ฉันอยากจะเขียนมันจาก command line เพราะมีหลายสิ่งหลายอย่าง

ตัวอย่างของคำสั่ง Image Magick ที่ไม่ทำงานคือ:

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

นั่นส่งผลให้เกิดข้อผิดพลาด

ขอบคุณ!


ในกรณีเฉพาะของฉันเลเยอร์ความโปร่งใสใน PNG ขัดแย้งกันเมื่อผ่านตัวประมวลผล (Apache) FO เพื่อสร้าง PDF / A PDF / A ไม่อนุญาตให้มีความโปร่งใส แฮ็คที่ฉันใช้คือเปลี่ยนเป็น JPG แทน
Wivani

3
"นั่นส่งผลให้เกิดข้อผิดพลาด" ข้อความแสดงข้อผิดพลาดคืออะไร
Aaron McDaid

คำสั่งนั้นควรทำงานได้ดี หากไม่เป็นเช่นนั้นคุณอาจมีการติดตั้ง buggy ของ Imagemagick หรือ libpng หรือเวอร์ชั่นของคุณทั้งสองนั้นเก่าเกินไป Imagemagick และ libpng รุ่นของคุณคืออะไร?
fmw42

คำตอบ:


255

สิ่งนี้ใช้ได้กับฉัน:

convert -flatten img1.png img1-white.png

เอกสารอ้างอิง:


3
ยังไงก็เถอะมันไม่ได้ผลสำหรับฉัน ... ฉันลองใช้ "-transparent-color white" แต่มีข้อยกเว้น / คำเตือน
William Niu

1
ปรากฎว่าฉันต้องตั้งค่าพื้นหลังเป็นสีขาวเช่นกัน ฉันยังต้องดาวน์โหลด colors.xml ซึ่งหายไป
William Niu

9
ตรวจสอบคำตอบของฉันด้านล่าง มันถูกเพิ่ม 2 ปีหลังจากนี้
Rok Kralj

42
อย่า-flattenพยายามที่จะแปลงเอกสารหลายหน้าด้วย มันจะแผ่หน้าเป็นหนึ่งหน้า
Tim S.

8
หากคุณต้องการที่จะทำมันในไฟล์ทั้งหมดจากโฟลเดอร์ของคุณคุณสามารถทำได้ด้วยวิธีนี้: mogrify -flatten *.pngในกรณีอย่าลืมสำรองข้อมูล ข้อมูลเพิ่มเติมที่นี่: imagemagick.org/script/mogrify.php
troyane

372
-background white -alpha remove -alpha off

ตัวอย่าง:

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

อย่าลังเลที่จะแทนที่whiteด้วยสีอื่น ๆ ที่คุณต้องการ เอกสารประกอบของ Imagemagick บอกสิ่งนี้เกี่ยวกับการ-alpha removeดำเนินการ:

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


3
ดูเหมือนว่า-background whiteไม่จำเป็น (เป็นไปได้สำหรับสีอื่น ๆ )
Skippy le Grand Gourou

5
@SkippyleGrandGourou: มันเป็นสิ่งจำเป็นเนื่องจากสีทางเลือกที่โปร่งใสสำหรับ PNG นั้นไม่ใช่สีขาวเสมอไป
Rok Kralj

3
ดีกว่าคำตอบที่ยอมรับได้ (ซึ่งในกรณีที่มีมากกว่าหนึ่งเลเยอร์ไม่ทำสิ่งที่ถูกต้อง)
axkibe

5
ภาพที่ได้จะยังคงมีช่องอัลฟา มันจะว่างเปล่า แต่จะยังอยู่ที่นั่น หากต้องการลบช่องเพิ่ม-alpha offอย่างสมบูรณ์
josch

2
ใช้งานไม่ได้ ฉันสร้าง PNG ใหม่โดยมีพื้นหลังโปร่งใสและมีจุดสีแดงอยู่ตรงกลาง สร้างพื้นหลังสีดำเสมอไม่ว่าจะระบุสีอะไรก็ตาม convert image.png -background white -alpha off white.pngผลิตภาพที่มีพื้นหลังสีดำ convert image.png -background "#00ff33" -alpha off 00ff33.pngผลิตพื้นหลังสีดำ
McNulty

46

รูปภาพที่ปรับให้เรียบและใช้ภาพพื้นหลังตรงไปที่ ImageMagick

อย่างไรก็ตามลำดับของคำสั่งมีความสำคัญมาก

หากต้องการนำพื้นหลังไปใช้กับภาพที่โปร่งใสและแบนให้ใช้พื้นหลังก่อนที่จะปรับให้แบน การย้อนกลับไม่ทำงาน

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

ไม่ว่าจะด้วยเหตุผลใดก็ตามมันใช้งานได้ดีสำหรับฉัน ไม่แน่ใจว่าทำไมความพยายามเริ่มแรกของคุณไม่ทำงาน
Anthony

23

คำตอบเดียวที่ใช้ได้กับฉันคือคำตอบทั้งหมด:

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

4
เจ๋งนั่นมันใช้ได้ ฉันต้องการสีอื่นมากกว่าสีขาวและคุณสามารถใช้... -background "#010203" ...แทนการใช้สีขาว
Alexis Wilke

นี่คือวิธีการแทนที่รูปภาพเดียวกันในโฟลเดอร์ทั้งหมดในไดเรกทอรีmogrify -background white -flatten */*.png
Julian

-alpha removeเป็นสิ่งที่ทำเพื่อฉัน
Stefan Dragnev

13

นี่คือวิธีการแทนที่ภาพเดียวกันในทุกโฟลเดอร์ในไดเรกทอรีด้วยสีขาวแทนที่จะโปร่งใส:

mogrify -background white -flatten */*.png


10

การใช้ -flatten ทำให้ฉันเป็นบ้าอย่างสมบูรณ์เพราะ -flatten เมื่อใช้ร่วมกับการปลูกพืช mogrify และการปรับขนาดก็ไม่ทำงาน อย่างเป็นทางการและสำหรับฉันวิธีที่ถูกต้องคือ "ลบ" ช่องอัลฟา

-alpha remove -alpha off (ไม่จำเป็นต้องใช้กับ JPG)

ดูเอกสาร: http://www.imagemagick.org/Usage/masking/#remove


ดังนั้นจะกลายเป็นคำสั่งได้อย่างไร สิ่งนี้ไม่สามารถใช้งานได้ที่นี่:convert imgWithTranspBkg.png -alpha remove -alpha off bkg.jpg resultImg.png
ราศีกุมภ์ Power

ฉันต้องการลบอัลฟ่าเท่านั้น แปลงเป็น JPG ทำได้ดีและใช้งานง่าย ขอบคุณสำหรับทิป.
Roger CS Wernersson

นี่เป็นทางออกเดียวของข้อที่ได้ผลสำหรับฉัน ตอนนี้ร้านค้า iTunes มีความสุขกับภาพของฉัน
Bill Cheswick

7

ส่วนการลบแบบอัลฟ่าของคู่มือการใช้งาน ImageMagickแนะนำให้ใช้-alpha removeตัวเลือกเช่น:

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

... ใช้-backgroundสีที่คุณเลือก

รัฐคู่มือ:

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

นอกจากนี้ยังเพิ่มหมายเหตุ:

โปรดทราบว่าในขณะที่ความโปร่งใสถูก 'ลบออก' ช่องอัลฟาจะยังคงเปิดใช้งานอยู่ แต่ในขณะนี้จะทึบแสงเต็มที่ หากคุณไม่ต้องการช่องอัลฟาอีกต่อไปคุณสามารถใช้ Alpha Off เพื่อปิดการใช้งานได้

ดังนั้นหากคุณไม่ต้องการช่องอัลฟ่าคุณสามารถทำให้ขนาดภาพเล็กลงโดยเพิ่ม-alpha offตัวเลือกเช่น:

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

มีรายละเอียดเพิ่มเติมในอื่น ๆ เทคนิคที่ใช้บ่อยเพื่อความโปร่งใสลบอธิบายไว้ในที่มีการลบความโปร่งใสจากภาพส่วน

รวมอยู่ในส่วนที่กล่าวถึงข้อแม้ที่สำคัญต่อการใช้-flattenเป็นเทคนิคในการลบความโปร่งใส:

อย่างไรก็ตามสิ่งนี้จะไม่ทำงานกับ "mogrify" หรือต่อเนื่องของภาพหลายภาพโดยทั่วไปเนื่องจากตัวดำเนินการ "-flatten" ได้รับการออกแบบมาเพื่อผสานภาพหลายภาพเป็นภาพเดียว

ดังนั้นหากคุณแปลงภาพหลายภาพในครั้งเดียวเช่นการสร้างภาพขนาดย่อจากไฟล์ PDF -flattenจะไม่ทำสิ่งที่คุณต้องการ (มันจะทำให้รูปภาพทั้งหมดสำหรับทุกหน้าเป็นภาพเดียว) ในทางกลับกันการใช้-alpha removeเทคนิคจะยังคงสร้างภาพหลายภาพแต่ละภาพมีการลบความโปร่งใส


5

ดูเหมือนว่าคำสั่งของคุณจะถูกต้องดังนั้นปัญหาอาจเกิดจากการขาดการสนับสนุน PNG () คุณสามารถตรวจสอบด้วยconvert -list configureหรือลองต่อไปนี้:

sudo yum install libpng libpng-devel

1
ใช่ขอบคุณ; ปัญหา (เก่า) นี้เป็นข้อผิดพลาดใน "graphicks magick" ซึ่งเป็นทางแยก / เขียนใหม่ / อะไรก็ตามของ "image magick"
Pointy

@ คะแนนฉันเห็น! สาเหตุที่แท้จริงของปัญหาคืออะไร (นั่นเป็นเพียงรุ่นเดียว)
Alastair

ฉันไม่รู้จริงๆ มันเป็นเพียงข้อบกพร่อง ฉันไม่ใช่ผู้ดูแล Graphicks Magick ดังนั้นฉันจึงไม่เข้าใจรหัสของพวกเขา ฉันต้องลองอีกครั้งในบางจุดที่ฉันเดา
Pointy

อูบุนตูไม่มีหรือ? นี่คือ libpng12-0 แต่ยังใช้งานไม่ได้ :(
กุมภ์ Power

ฉันใช้ Ubuntu 13.04 เมื่อlibpng12-0ติดตั้งและใช้งานได้ คุณเห็น png ไหมถ้าคุณทำสิ่งนี้ convert -list configure | grep \png
Alastair

5

นี่ไม่ใช่คำตอบที่แน่นอนสำหรับคำถามของคุณ แต่ฉันพบคำถามของคุณในขณะที่พยายามหาวิธีลบช่องอัลฟาดังนั้นฉันจึงตัดสินใจเพิ่มคำตอบนี้ที่นี่:

หากคุณต้องการลบช่องอัลฟาโดยใช้ imagemagick คุณสามารถใช้คำสั่งนี้:

mogrify -alpha off ./*.png

3

ดูเหมือนว่าการตัดสินใจของฉันที่จะติดตั้ง "graphics magick" over "image magick" มีบางส่วนที่ขรุขระ - เมื่อฉันติดตั้ง "image magick" ที่โหดเหี้ยมของแท้ใหม่จากนั้นคำสั่งด้านบนก็ทำงานได้อย่างสมบูรณ์แบบ

แก้ไขเป็นเวลานานในภายหลัง - หนึ่งในวันนี้ฉันจะตรวจสอบเพื่อดูว่า "กราฟิกเวทมนตร์" ได้แก้ไขปัญหานี้แล้วหรือยัง


2

ผมจำเป็นต้องมีอย่างใดอย่างหนึ่งทั้งสอง-alpha backgroundและหรือ-flatten-fill

ฉันสร้าง PNG ใหม่โดยมีพื้นหลังโปร่งใสและมีจุดสีแดงอยู่ตรงกลาง

convert image.png -background green -alpha off green.png ล้มเหลว: มันสร้างภาพที่มีพื้นหลังสีดำ

convert image.png -background green -alpha background -flatten green.png สร้างภาพที่มีพื้นหลังสีเขียวที่ถูกต้อง

แน่นอนด้วยไฟล์อื่นที่ฉันเปลี่ยนชื่อimage.pngมันไม่สามารถทำอะไรได้เลย สำหรับไฟล์นั้นฉันพบว่าสีของพิกเซลโปร่งใสคือ "# d5d5d5" ดังนั้นฉันจึงเติมสีด้วยสีเขียว:

convert image.png -fill green -opaque "#d5d5d5" green.png แทนที่พิกเซลโปร่งใสด้วยสีเขียวที่ถูกต้อง


คำสั่งที่เหมาะสมกับ ImageMagick ปัจจุบันจะเป็นconvert image.png -background green -alpha background -alpha off green.pngหรือ convert image.png -background green -alpha background -alpha remove green.pngหรือ convert image.png -background green -flatten green.png
fmw42

1

ตัวเลือกบรรทัดที่ไม่ใช่คำสั่ง: เปิดไฟล์ PNG ใน Windows Paint และคลิกบันทึก



0

หากต้องการลบช่องอัลฟาจากไฟล์ให้ใช้ตัวเลือกปิดอัลฟา :

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

1
ที่จริงแล้วลิงก์ที่คุณให้มาบอกว่า: "มันไม่ได้ลบหรือทำลายช่องอัลฟาที่แนบมากับภาพ แต่มันจะปิดเอฟเฟกต์ใด ๆ ที่ช่องนั้นมีกับรูปภาพ" หากต้องการลบช่องอัลฟาจริงๆให้ดูคำตอบของฉัน
Rok Kralj

0

ฉันเห็นคำถามและคำตอบที่จริง ๆ แล้วช่วยฉันได้ แต่ต้องใช้ไฟล์จำนวนมากดังนั้นในกรณีที่คุณมีภาพหลายภาพ (ภาพ PNG) ในโฟลเดอร์เดียวและคุณต้องการทำเพื่อทุกสิ่ง:

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

-1

มัน -alpha off, ไม่ใช่ -alpha ลบ! การอัปโหลด iOS app store ล้มเหลวเมื่อมีช่องอัลฟาอยู่ในไอคอนใด ๆ !!

นี่คือวิธีการทำ: mogrify -alpha off * .png

โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.