เลเยอร์ภาพ PNG ที่มองไม่เห็นที่มองเห็นเป็นพื้นหลังเท่านั้น


48

ฉันเพิ่งเจอภาพที่แปลกประหลาดมากและมีคุณสมบัติแปลก ๆ รูปภาพอยู่ในรูปแบบ PNG และเพิ่งแสดงให้เห็นถึงนกที่เรียบง่ายที่มีพื้นหลังโปร่งใส เพื่อนของฉันส่งรูปพร้อมคำแนะนำง่ายๆเพื่อบันทึกและตั้งเป็นพื้นหลังของฉัน

ภาพต้นฉบับที่มีเพียงนกนางนวล

หลังจากตั้งค่าภาพเป็นพื้นหลังของฉันภาพที่สองปรากฏขึ้นเพื่อแสดงให้เห็นว่าในความเป็นจริงนกนางนวลยืนอยู่บนอาวุธ:

ภาพพื้นหลังที่มีเลเยอร์ลับหรือไม่?

นี่เป็นครั้งแรกที่ฉันมีความอยากรู้อยากเห็นมากกับธรรมชาติของภาพและวิธีการทำภาพดังกล่าว ฉันเปิดภาพใน Photoshop และไม่มีอะไรผิดปกติปรากฏขึ้น - ภาพยังคงเหมือนนกนางนวลโปร่งใสไม่มีเลเยอร์หรือหน้ากากที่ซ่อนอยู่เพื่อให้มองไม่เห็น หลังจากตรวจสอบภาพใน Photoshop ฉันคิดว่า Windows ได้ทำการเปลี่ยนแปลงไฟล์เมื่อตั้งค่าเป็นพื้นหลังเดสก์ท็อปของฉัน - หลังจากการนำทางไป%AppData%\Microsoft\Windows\Themesยังภาพดูเหมือนจะเหมือนกัน

ทำไมภาพนี้แสดงเลเยอร์ที่ซ่อนแยกต่างหากหรือภาพที่แยกจากกันอย่างสมบูรณ์เมื่อตั้งเป็นพื้นหลังเดสก์ท็อป Windows เมื่อเทียบกับการดูหรือแก้ไขใน Photoshop


6
เปิดด้วย XnView คลิก "ลบช่องอัลฟ่า" และคุณจะเห็นภาพเต็ม Windows 7 แปลงพื้นหลังเพื่อ JPEG, การสูญเสียความโปร่งใสanswers.microsoft.com/en-us/windows/forum/windows_7-desktop/...
leonbloy

คำตอบ:


59

ฉันคาดเดามันเป็นสิ่งที่ถูกเรียกว่า "ความโปร่งใสสกปรก" ในการนี้บทความจากนิตยสาร Smashing

โดยทั่วไปแล้วสีใด ๆ ใน PNG แบบโปร่งใสสามารถอธิบายได้ด้วยค่า RGBA โดยที่ RGB ย่อมาจากช่องสีแดง, เขียวและน้ำเงินและ A หมายถึงอัลฟ่า สี "ที่มองไม่เห็น" สามารถมีค่า RGB ใด ๆ + 0 อัลฟ่าซึ่งหมายความว่าสีจะรักษาข้อมูลดั้งเดิมไว้ แต่แสดงเป็นแบบโปร่งใสเนื่องจากอัลฟาตั้งค่าเป็น 0

ทำไมคุณต้องการจัดเก็บค่า RGB เมื่อมีการใช้อัลฟ่า ดังนั้นคุณสามารถรับขอบที่ราบรื่นและสีโปร่งใสซึ่งแตกต่างจากขอบหยักใน GIF พื้นหลังโปร่งใส ความโปร่งใสใน PNG สามารถเลื่อนจาก 0 ถึง 255 ใน GIF ได้ทั้งแบบโปร่งใสและทึบแสง 100% หากต้องการแสดงบางสิ่งที่สมมติว่าโปร่งใส 50% คุณจะต้องรู้ค่า RGB ดังนั้นจึงเก็บค่าไว้ ซอฟต์แวร์แก้ไขภาพส่วนใหญ่จะทิ้งข้อมูล RGB เมื่อบันทึกเป็นสีโปร่งใสอย่างครบถ้วน Photoshop รวมอยู่ด้วย

ฉันไม่สามารถพูดถึงรุ่น CC ได้ แต่เพื่อที่จะเห็นสี "ล่องหน" ใน Photoshop รุ่นเก่าคุณจะต้องมีปลั๊กอิน เลือกหนึ่ง: PhotofreebiesหรือSuperPNG SuperPNG ดูเหมือนจะยุ่งเหยิงกว่านี้

ทำไมกลอุบายถึงใช้งานได้? ภาพพื้นหลังจะต้องทึบเนื่องจากไม่มีสิ่งใดที่ "อยู่เบื้องหลัง" ให้แสดงผ่านใช่ไหม ฉันเดาว่า Windows จะทิ้งข้อมูลช่องอัลฟ่าซึ่งเป็นการเปิดเผยค่า RGB ที่ซ่อนอยู่ในกระบวนการ


6
ฉันเพิ่งลองสิ่งที่คุณพูดโดยลบหน้ากากเลเยอร์โปร่งใส (ช่องอัลฟา) ที่ฉันไม่เคยเกิดขึ้นกับฉัน - โดยการทำเช่นนั้นฉันสามารถจำลองผลกระทบได้ นี่เป็นวิธีที่ยอดเยี่ยมในการสร้างภูมิหลังฉันคิดว่าฉันจะสำรวจความสามารถในการหมุนรอบในไม่ช้า: D
Callum

15
ฉันจะบอกว่านี่เป็นข้อผิดพลาดใน Windows หากค่าอัลฟาของพิกเซลเป็น 0 แสดงว่าพิกเซลนั้นโปร่งใสและค่า RGB นั้นไม่สำคัญ Windows ควรแสดงภาพที่มีความโปร่งใสด้านบนของสิ่งอื่นเช่นพื้นหลังสีขาว
Paul

5
@ Paul ตกลงยกเว้นว่าจะเป็นสีพื้นหลังที่กำหนดไว้สำหรับเดสก์ท็อปสีเดียวกันกับที่ใช้หากภาพไม่ได้ยืดหรือเป็นกระเบื้องและมีขนาดเล็กเกินไปที่จะเติมเดสก์ท็อป อุปมาคือวอลล์เปเปอร์อยู่บนพื้นผิวหรือผนังที่มีสีทึบ
trlkly

3
ฉันจะแปลกใจมากถ้า Adobe Photoshop ต้องการปลั๊กอินเพื่อให้บรรลุสิ่งนี้ - ฉันคาดหวังว่ามันจะให้การควบคุมคล้ายกับ GIMP เช่นการปรับค่าอัลฟาด้วยเส้นโค้งหรือเครื่องมือระดับ (นั่นเป็นเพียงสองวิธีเท่านั้น เพื่อทำให้มองเห็นชิ้นส่วนโปร่งใส)
Michael Schumacher

2
@MichaelSchumacher คุณจะประหลาดใจกับวิธีที่ Photoshop สามารถขาดได้ในบางพื้นที่ เพื่อความยุติธรรมฉันไม่รู้ว่ารุ่น CC ปัจจุบันรองรับอยู่แล้ว ฉันตัดสินใจที่จะยึดติดกับ PS ที่ได้รับอนุญาตตลอดเวลาดังนั้นเวอร์ชันของฉันจึงล้าสมัยไปแล้วในตอนนี้
Rhaenys

13

เพื่อเพิ่มคำตอบของ Nihalสิ่งนี้สามารถทำซ้ำได้โดยใช้แปรง "anti-erase" ใน GIMP แปรงลบสามารถเพิ่มหรือลบช่องอัลฟาหากรูปภาพใช้รูปแบบที่รองรับ (กดปุ่ม Alt เพื่อสลับระหว่างการลบและการลบ)

สำหรับ Krita Layer > Split Alpha > Alpha into Maskคุณสามารถทำสิ่งนี้: หลังจากทำเช่นนั้นคุณสามารถซ่อนหรือลบช่องทาง Transparency Mask 1 ที่เพิ่งสร้างขึ้นและคุณจะเห็นภาพเต็ม

เนื่องจากพื้นหลังของ Windows ไม่สามารถมีสิ่งใดอยู่ข้างหลังมันอาจจะเป็นเพียงแค่ดึงความโปร่งใสออกมาและแสดงภาพโดยไม่ใช้มัน (รูปภาพ 32 บิตที่รวดเร็วและสกปรกถึง 24 บิตจากรูปลักษณ์ของมัน)


3

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


1
คุณช่วยลองและค้นหาข้อความที่เกี่ยวข้องจากข้อกำหนดได้หรือไม่ เพราะผมไม่สามารถหานี้ในw3.org/TR/PNG ขอบคุณ!
MarnixKlooster ReinstateMonica
โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.