แปลง BMP เป็น PNG ในขณะที่รักษาช่องอัลฟา


3

ฉันมีรูปภาพที่จัดเก็บในรูปแบบ BMP และต้องการแปลงเป็น PNG โดยใช้ imagemagick

ฉันดูที่พิกเซลในมุมมองฐานสิบหกและสังเกตว่ามันถูกเก็บไว้ใน 32bpp ดังนั้นจึงมีช่องอัลฟา พิกเซลแบบโปร่งใสมีค่า RGBA (255, 255, 255, 0) และ paint.NET เลือกพวกเขาเป็นพิกเซลสีขาวน่าจะเป็นเพราะมันไม่ได้คาดหวังว่า BMP จะมีพิกเซลแบบโปร่งใสหรือไม่

อย่างไรก็ตามคำสั่งที่ฉันใช้คือ

convert -alpha on -quality 95 in.bmp out.png

อย่างไรก็ตามเมื่อฉันเปิดภาพผลลัพธ์ใน Paint.NET (ซึ่งโดยปกติจะตีความพิกเซลโปร่งใสอย่างเหมาะสม) พิกเซลโปร่งใสเหล่านั้นยังคงเป็นสีขาว

ฉันกำลังแปลงภาพอย่างไม่ถูกต้องหรือไม่? ฉันต้องการให้พิกเซลที่มีค่าอัลฟาเป็น 0 ปรากฏโปร่งใสในเครื่องมือแก้ไขรูปภาพที่ฉันใช้บ่อย

คำตอบ:


5

คุณค้นพบข้อบกพร่องใน ImageMagick สิ่งนี้จะได้รับการแก้ไขใน ImageMagick 6.8.7-9 ฉันเป็นหนึ่งในนักพัฒนาซอฟต์แวร์สำหรับ ImageMagick และฉันเพิ่งส่งการแก้ไขไปยังที่เก็บ SVN ของเรา ( http://trac.imagemagick.org/changeset/13867 )


คุณรู้เรื่องนี้ได้อย่างไร? ข้อมูลสนับสนุนใด ๆ
Dave M

ฉันขอโทษสำหรับคำตอบสั้น ๆ ฉันเป็นหนึ่งในนักพัฒนาซอฟต์แวร์สำหรับ ImageMagick และฉันเพิ่งส่งการแก้ไขไปยังที่เก็บ SVN ของเรา
dlemstra

@dlemstra - ข้อมูลนั้นจะได้รับการแก้ไขให้ดียิ่งขึ้นในคำตอบของคุณ
ChrisF

ขอบคุณฉันจะลองใช้เมื่อมีการเปิดตัวและกลับมาที่คำถามนี้
That Umbrella Guy

เพิ่งรู้อยากเห็น @Keikoku มีลิงก์ไปยัง repo SVN ที่เราเห็นหรือไม่? ขอขอบคุณที่สละเวลาให้ข้อมูลนี้และเพื่อเปิดเผยการมีส่วนร่วมในโครงการของคุณอย่างถูกต้อง
nhinkle

1

มันอาจไม่ใช่แชนเนลอัลฟ่า หากเป็นไฟล์รูปแบบบิตแมป v4 ก็สามารถมีช่องอัลฟา สำหรับรุ่นก่อนหน้านี้ยังคงเป็นไปได้ที่จะเก็บพิกเซลเป็น 32 บิต แต่บิตด้านบนสงวนไว้และ ศูนย์เสมอ .

นี่คือตัวอย่างของ 32 บิต bmp ด้วย แอลฟา นี่คือตัวอย่างของ 32 บิต bmp ด้วย ไม่มีอัลฟา

ภาพตัวอย่างในความคิดเห็นไม่มีช่องอัลฟาตาม GIMP และ identify -verbose สิ่งที่ดีที่สุดที่คุณสามารถทำได้คือทำให้พื้นหลังสีขาวโปร่งใสด้วย

convert sample.bmp -transparent white alpha.png

ฉันเชื่อว่ามันถูกใช้เป็นช่องอัลฟาเพราะไม่ใช่ทุกพิกเซลมีศูนย์สำหรับไบต์นั้นและถ้าฉันแยกวิเคราะห์ด้วยตนเองและถือว่าเป็นช่องอัลฟ่า ในกรณีนี้บางที Imagemagick ไม่ได้ใช้เป็นอัลฟาแชนเนลดังนั้นฉันอยากจะบอกให้ Imagemagick จัดการกับมัน?
That Umbrella Guy

คุณวิ่งได้ไหม identify -verbose ในไฟล์และดูข้อมูลช่อง? หรือโพสต์ลิงก์ไปยังรูปภาพเอง
parkydr

1
ฉันสร้าง BMP ด้วย alpha (กับ GIMP) และทำการแปลง alpha.bmp alpha.png และมันก็ใช้ได้ png โปร่งใส
parkydr


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