ทำไมสีของไฟล์ PNG บางไฟล์จึงผิดเพี้ยนเมื่อเปิดใน Illustrator


11

ฉันพยายามเปิดภาพหน้าจอของ iPhone ใน Illustrator แต่ด้วยเหตุผลบางอย่างสีจึงบิดเบี้ยว ถ้าฉันเปิดไฟล์เดียวกันในแอปพลิเคชันอื่น (Photoshop, GIMP, Preview เป็นต้น) สีจะแสดงผลได้ดี สิ่งที่น่าแปลกใจก็คือสิ่งนี้เกิดขึ้นกับภาพหน้าจอบางอย่างเท่านั้นขณะที่ฉันทดสอบภาพหน้าจอของหน้าจอหลักด้วยเช่นกันซึ่ง Illustrator เปิดขึ้นโดยไม่บิดเบือนสี

แม้ว่าด้วย GIMP กล่องโต้ตอบจะปรากฏขึ้นเพื่อระบุ:

ภาพ 'IMG_1199.PNG' มีและโพรไฟล์สีฝังอยู่:

แสดง P3

แปลงภาพเป็นพื้นที่ใช้งาน RGB (sRGB ในตัว) หรือไม่?

ด้วยตัวเลือกเพื่อเก็บหรือแปลงโปรไฟล์สี ซึ่งทำให้ฉันคิดว่า Illustrator อาจไม่รู้จักโพรไฟล์สีดังกล่าว

นี่คือภาพต้นฉบับโดยตรงจากโทรศัพท์ [ซ้าย] และภาพที่เปิด (บันทึกแล้ว) จาก Illustrator [ขวา]:

ภาพหน้าจอของปุ่มกด iPhone ภาพหน้าจอของปุ่มกด iPhone บิดเบี้ยว


ปรับปรุง

การแปลงโปรไฟล์สีใน GIMP แล้วบันทึกจากนั้นการเปิดไฟล์อีกครั้งใน Illustrator จะช่วยแก้ไขปัญหาได้ ดูเหมือนว่าจะเป็นการยืนยันข้อสงสัยของฉันว่าโปรไฟล์สี Display P3 เป็นปัญหาซึ่งเปลี่ยนคำถามของฉันบ้างฉันจะเปิดภาพใน Illustrator ได้อย่างไรโดยไม่ต้องแปลงภาพก่อน

ดูเหมือนว่าอาจเป็นข้อบกพร่องใน Illustrator ดังนั้นฉันจึงส่งรายงานข้อผิดพลาดไปยัง Adobe ฉันจะอัปเดตหากรายงานเป็นข้อสรุปหรือหาก Adobe มีวิธีแก้ไข


1
ประสาทหลอน! ฉันรู้จักคนที่กินยาเพื่อดูสิ่งนี้ เฮ้ไบรอันยินดีต้อนรับสู่ GDSE และขอบคุณสำหรับคำถามของคุณ หากคุณมีคำถามเกี่ยวกับ SE นี้โปรดดูที่ศูนย์ช่วยเหลือหรืออย่าลังเลที่จะเข้าร่วมกับเราในการออกแบบกราฟิคแชท ! ร่วมให้ข้อมูลและเพลิดเพลินกับเวลาของคุณที่นี่
Vincent

ฉันมีปัญหากับภาพหน้าจอของ iPhone มากมาย แต่ฉันไม่เคยมีอะไรแบบนี้ ประทับใจ
Cai

โปรไฟล์สี P3 มีความหมายถึงสี 10bpp (หรือ 30 บิต) หรือไม่? นี่เป็นข้อบกพร่องหรือ AI ไม่สามารถจัดการ 10bpp (ARGB 02 10 10 10) ได้หรือไม่ การสอบถามจิตใจอยากรู้ (แก้ไข: มีความชัดเจนฉันต้องการทราบอย่างแท้จริงเนื่องจากฉันไม่มีเงื่อนงำ)
Yorik

แปลก: ทั้ง GraphicsMagick's identifyและ Linux ' fileระบุภาพหน้าจอที่คุณโพสต์ทางด้านซ้ายเป็น jpg แม้จะมีคำต่อท้าย. png นี่เป็นภาพหน้าจอต้นฉบับ / ไม่มีการแก้ไขหรือไม่ คุณเปลี่ยนชื่อส่วนต่อท้ายเป็น. png หรือไม่ บางทีนั่นอาจเป็นปัญหา ลองเปลี่ยนคำต่อท้ายเป็น jpg แล้วเปิดใหม่อีกครั้ง
Socowi

@Socowi Huh แปลกฉันทดสอบด้วยตัวเองโดยใช้fileคำสั่งบน macOS มันเกิดขึ้นเช่นJPEG image dataกันแม้ว่าหน้าต่างข้อมูลจะยังคงแสดงเป็นไฟล์ PNG มันจะต้องเป็นสิ่งที่ Imgur ทำเพื่อขยายภาพ หากคุณดาวน์โหลดภาพจากการเชื่อมโยงขนาดเต็มfileคำสั่งควรตระหนักอย่างถูกต้องเป็นไฟล์ PNG
ไบรอัน

คำตอบ:


9

สิ่งที่อาจเกิดขึ้น: ภาพหน้าจอเป็น png 16 บิต แต่ผู้วาดภาพประกอบอ่านมันเป็น 8-bit png โดยใช้บิตที่ต่ำกว่า (!) 8 บิตเท่านั้น

คำอธิบาย

สำหรับคำอธิบายต่อไปนี้เราสมมติว่าภาพหน้าจอเป็นภาพโทนสีเทาขนาด 16 บิตนั่นคือทุกพิกเซลเป็นตัวเลขระหว่างกัน

สีดำ = 0 = 0x0000 = 0b 0000 0000 0000 0000

และ

(16 บิต) ขาว = 2 ^ 16-1 = 65535 = 0xFFFF = 0b 1111 1111 1111 1111

(0x หมายถึงตัวเลขฐานสิบหกและ 0b หมายถึงเลขฐานสอง)

Illustrator ดูเหมือนจะโหลดเพียง 8 จาก 16 บิตเหล่านี้ แต่น่าเสียดายที่ผิดนั่นคือค่าที่น้อยที่สุด การเลือกบิตที่สำคัญน้อยที่สุดเป็นปัญหาเดียว

0b #### #### #### ####
   \_______/ \_______/
   discarded   loaded

หลังจากนำเข้าแล้วนักวาดภาพประกอบจะปรับการตีความ (หมายเลขใดเป็นสีขาวซึ่งเป็นสีดำ) ตามจำนวนสูงสุดใหม่:

(8 บิต) สีขาว = 2 ^ 8-1 = 255 = 0xFF = 0xb 1111 1111

สมมติว่าหนึ่งในพิกเซลของเรามีค่า 0b 1111 1111 0000 00001 = 0xFF01 = 65281 นั่นคือเกือบขาว หลังจากการนำเข้าค่าจะเป็น 0b 0000 0001 = 0x01 = 1 ซึ่งเกือบจะเป็นสีดำ

มันเหมือนกับ "การปัดเศษ" 999.1 ต่อ 1 - ผิดทั้งหมด!

การจำลอง

เราจะมั่นใจได้อย่างไรว่าปัญหาที่อธิบายไว้เป็นปัญหาของเรา เราจำลองข้อผิดพลาด!

โปรแกรมไพ ธ อนต่อไปนี้โหลดภาพหน้าจอ 16 บิตตามที่อธิบายไว้ข้างต้น
(โปรดอย่าตัดสินฉันมันเป็นโปรแกรมหลามแรกของฉัน)

#! /usr/bin/python
import numpy as np
import cv2

# load picture
img = cv2.imread('screen.png', 3)

# assert (by hand) that picture is loaded as 16 bit image
print img.dtype

# simulate the bug
img[:,:] &= 0x00FF # use only 8 least significant bits
img[:,:] <<= 8     # rescale

# save the picture
cv2.imwrite('bug.png',img)

ข้อบกพร่องจำลอง
ผลลัพธ์bug.png
คลิกที่นี่เพื่อดูขนาดต้นฉบับและที่นี่เพื่อเปรียบเทียบกับเวอร์ชั่นของ OP

อย่างที่เราเห็นการจำลองของเราให้ผลลัพธ์เหมือนกันทุกประการ

วิธีแก้ปัญหา

ฉันนึกถึงวิธีแก้ปัญหาเพียงวิธีเดียว (เนื่องจากฉันไม่ได้ใช้ผู้วาดภาพประกอบ):

แปลงภาพหน้าจอของคุณเป็น 8-bit pngs

GraphicsMagick และ / หรือ ImageMagick เป็นเครื่องมือคอนโซลที่มั่นใจสำหรับงานนี้ คำสั่งต่อไปนี้แปลงเป็น pngs 8 บิต:

convert original.png -depth 8 converted.png

ว้าวขอบคุณสำหรับคำอธิบายในเชิงลึก Adobe ยังไม่ได้ตอบกลับรายงานข้อผิดพลาดของฉัน แต่หวังว่าพวกเขาจะโชคดีที่พวกเขาจะเพิ่มการสนับสนุนสีแบบ 16 บิตให้กับ Illustrator หรืออย่างน้อยที่สุดก็ปัดเศษให้เป็นสี 8 บิตอย่างถูกต้อง
ไบรอัน

1

ตอนนี้เป็นปัญหาที่ขี้ขลาด

GIMP ได้ให้เบาะแสกับเราเพื่อยืนยันความสงสัยว่าเป็นสิ่งที่มีโปรไฟล์สีของภาพหน้าจอ การแปลงค่า sRGB และ 8 บิตต่อช่องของคุณในแต่ละวันอาจหลีกเลี่ยง Illustrator ที่จะทำให้มันยุ่งเหยิงในการพยายามดึงมันเป็น CMYK


1

นี่เป็นวิธีที่ล่าช้า แต่วิธีแก้ปัญหาง่ายๆ (สำหรับผู้ใช้ Mac) คือการเปิด PNG ในหน้าตัวอย่างจากนั้นส่งออกเป็น PNG เพื่อสลับตัวเลือก 16 บิตเริ่มต้นเป็นตัวเลือก 8 บิต ไม่ต้องใช้ซอฟต์แวร์เพิ่มเติมและใช้เวลาเพียงไม่กี่วินาที

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