Lớp hình ảnh PNG vô hình chỉ hiển thị dưới dạng nền


48

Gần đây tôi đã bắt gặp một hình ảnh rất đặc biệt, với các thuộc tính lạ. Hình ảnh ở định dạng PNG và chỉ hiển thị một con chim đơn giản với nền trong suốt. Bạn tôi đã gửi cho tôi hình ảnh với các hướng dẫn đơn giản chỉ để lưu nó và đặt nó làm nền của tôi.

Hình ảnh gốc chỉ với con mòng biển

Sau khi đặt hình ảnh làm nền của tôi, hình ảnh thứ hai xuất hiện cho thấy trên thực tế con hải cẩu đang đứng trên vũ khí:

Hình nền với một lớp bí mật?

Điều này lúc đầu khiến tôi rất tò mò về bản chất của hình ảnh và cách tạo ra một hình ảnh như vậy. Tôi đã mở hình ảnh trong Photoshop và không có gì khác thường xuất hiện - hình ảnh vẫn giống như con hải cẩu trong suốt, không có lớp ẩn hoặc mặt nạ để làm cho nó vô hình. Sau khi kiểm tra hình ảnh trong Photoshop, tôi đã nghĩ Windows đã thay đổi tập tin khi đặt nó làm nền màn hình của mình - sau khi điều hướng đến %AppData%\Microsoft\Windows\Themeshình ảnh có vẻ giống nhau.

Tại sao hình ảnh này hiển thị một lớp ẩn riêng biệt hoặc một hình ảnh hoàn toàn riêng biệt khi được đặt làm Nền màn hình Windows so với được xem hoặc chỉnh sửa trong Photoshop?


6
Mở nó bằng XnView, nhấp vào "Xóa kênh Alpha" và bạn sẽ thấy hình ảnh đầy đủ. Windows 7 cải nền sang JPEG, mất bạch answers.microsoft.com/en-us/windows/forum/windows_7-desktop/...
leonbloy

Câu trả lời:


59

Tôi đoán đó là cái được gọi là "Tính minh bạch bẩn thỉu" trong bài viết này từ Tạp chí Smashing .

Về cơ bản, bất kỳ màu nào trong các PNG trong suốt đều có thể được mô tả bằng giá trị RGBA, trong đó RGB là viết tắt của các kênh Red, Green và Blue và A là viết tắt của Alpha. Màu "vô hình" có thể có bất kỳ giá trị RGB + 0 Alpha nào, có nghĩa là màu sẽ giữ lại thông tin gốc, nhưng hiển thị dưới dạng trong suốt vì alpha của nó được đặt thành 0.

Tại sao bạn muốn lưu trữ các giá trị RGB khi Alpha đang được sử dụng? Vì vậy, bạn có thể có được các cạnh mịn và màu trong suốt không giống như các cạnh lởm chởm trong GIF nền trong suốt. Độ trong suốt trong PNG có thể tăng từ 0 đến 255, trong GIF, nó trong suốt 100% hoặc mờ. Để hiển thị một cái gì đó tại, giả sử, độ trong suốt 50%, bạn vẫn sẽ cần biết các giá trị RGB, do đó giá trị được lưu trữ. Hầu hết các phần mềm chỉnh sửa hình ảnh đều loại bỏ thông tin RGB đó khi lưu một màu hoàn toàn trong suốt, bao gồm Photoshop.

Tôi không thể nói cho các phiên bản CC, nhưng để thấy màu sắc "vô hình" trong các phiên bản Photoshop cũ hơn, bạn sẽ cần một plugin. Chọn một: Photofree sở thích hoặc SuperPNG . SuperPNG dường như gần đây hơn và ít lộn xộn hơn.

Tại sao thủ thuật hoạt động? Hình nền phải mờ đục vì không có gì "đằng sau" chúng hiển thị xuyên qua, phải không? Tôi đoán là Windows loại bỏ thông tin kênh Alpha, tiết lộ các giá trị RGB ẩn trong quy trình.


6
Tôi vừa thử những gì bạn nói bằng cách loại bỏ mặt nạ lớp trong suốt (kênh alpha), rằng tôi chưa bao giờ xảy ra với tôi - bằng cách đó tôi có thể sao chép hiệu ứng. Đây là một cách rất hay để làm nền, tôi nghĩ rằng tôi sẽ sớm khám phá khả năng troll của nó: D
Callum

15
Tôi muốn nói rằng đây là một lỗi trong Windows. Nếu giá trị alpha của pixel là 0, thì pixel đó trong suốt và các giá trị RGB không nên quan trọng. Windows sẽ hiển thị một hình ảnh có chứa độ trong suốt trên một thứ khác, ví dụ như nền trắng.
Paul

5
@Paul. Đồng ý, Ngoại trừ đó sẽ là màu nền được xác định cho máy tính để bàn, cùng màu được sử dụng nếu hình ảnh không bị kéo dài hoặc lát gạch và quá nhỏ để lấp đầy màn hình nền. Ẩn dụ là hình nền nằm trên một bề mặt hoặc bức tường có màu đặc.
trlkly

3
Tôi sẽ rất ngạc nhiên nếu Adobe Photoshop cần một trình cắm để đạt được điều này - tôi hy vọng nó sẽ cung cấp các điều khiển tương tự như GIMP, ví dụ: điều chỉnh các giá trị alpha bằng các công cụ đường cong hoặc cấp độ (đó chỉ là hai trong số nhiều cách để làm cho các phần trong suốt có thể nhìn thấy).
Michael Schumacher

2
@MichaelSchumacher Bạn sẽ ngạc nhiên về cách Photoshop có thể thiếu ở một số khu vực nhất định. Để công bằng, tôi không biết nếu phiên bản CC hiện tại đã hỗ trợ nó. Tôi đã quyết định gắn bó với PS được cấp phép vĩnh viễn, vì vậy phiên bản của tôi gần như đã lỗi thời.
Rhaenys

13

Để thêm vào câu trả lời của Nihal , điều này có thể được sao chép bằng cách sử dụng cọ "chống xóa" trong GIMP. Bàn chải xóa có thể thêm hoặc xóa kênh alpha nếu hình ảnh đang sử dụng định dạng hỗ trợ nó, (giữ phím Alt để trao đổi giữa xóa và chống xóa).

Đối với Krita, bạn có thể làm điều này : Layer > Split Alpha > Alpha into Mask. Sau khi làm điều đó, bạn có thể ẩn hoặc xóa kênh Transuity Mask 1 vừa được tạo và bạn sẽ thấy hình ảnh đầy đủ.

Vì nền Windows không thể có bất cứ thứ gì đằng sau nó, nên có lẽ nó chỉ cần loại bỏ độ trong suốt và hiển thị hình ảnh mà không có nó, (hình ảnh 32 bit nhanh và bẩn đến 24 bit từ vẻ ngoài của nó).


3

Một điểm cần làm rõ: Đây không phải là một lỗi, nó là hành vi được chỉ định trong đặc tả png. Cụ thể, thông số kỹ thuật nói rằng nếu người xem hoặc trình chuyển đổi không thể hiểu độ trong suốt hoặc độ trong suốt không phù hợp với ngữ cảnh hoặc sử dụng kênh alpha có thể bị bỏ qua. Hơn nữa, đặc tả yêu cầu tất cả các trình tạo hình ảnh đặt các màu trong suốt để hình ảnh hữu ích nếu kênh alpha bị bỏ qua. (cách diễn đạt của tôi, tôi đã được vài năm kể từ khi tôi đọc thông số kỹ thuật.)


1
Bạn có thể vui lòng thử và tìm (các) đoạn văn có liên quan từ đặc điểm kỹ thuật không? Bởi vì tôi không thể tìm thấy điều này trong w3.org/TR/PNG . Cảm ơn!
MarnixKlooster RebstateMonica
Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.