ความโปร่งใสเป็น RGB + Alpha ที่ไม่มีการควบคุม


16

ฉันมีเลเยอร์แบบโปร่งใสใน Photoshop CS5 (ภายในคือส่วนใหญ่อาจเก็บไว้เป็นองค์ประกอบ RGB ที่ไม่มีพื้นฐานพร้อมองค์ประกอบอัลฟาต่อพิกเซล)

ตอนนี้ฉันต้องการแปลงให้เป็นเลเยอร์ทึบแสง (เพียง RGB ที่ไม่มีการควบคุม) + a alpha mask ผลลัพธ์ควรมีลักษณะเหมือนกับต้นฉบับ

ฉันไม่สามารถรองรับเลเยอร์โปร่งใสด้วยสีดำเอาตัวเลือกจากมันเป็นหน้ากากและผสานเลเยอร์ได้เพราะจะทำให้อัลฟากลายเป็นแบบพหุคูณในค่า RGB

ฉันหวังว่าคุณจะเข้าใจปัญหาและให้วิธีแก้ปัญหาแก่ฉัน

ในฐานะที่เป็นคำอธิบายทางเลือก: ฉันต้องการกระบวนการ REVERSE ของสิ่งนี้:

  1. สร้างเลเยอร์ใหม่และวางในภาพใด ๆ
  2. สร้างหน้ากากที่มีการไล่ระดับสีขาวไปดำ
  3. ใช้หน้ากากชั้น

ภาพคำอธิบาย:

รัฐ A: ป้อนคำอธิบายรูปภาพที่นี่

รัฐ B: ป้อนคำอธิบายรูปภาพที่นี่


สำคัญ:เลเยอร์เป็นเพียงตัวอย่างนี้สีแดงคงที่เต็มรูปแบบ - แต่คุณอาจนึกถึงภาพใด ๆ ที่กำหนดเองแทนที่จะเป็นสีแดงคงที่ ดังนั้น - จากสถานะ A ไปจนถึงสถานะ B, เพียงแค่ใช้หน้ากากเลเยอร์

ฉันต้องการทราบวิธีเดินทางจากรัฐ B ไปยังรัฐ A


ฉันสงสัยว่าปลั๊กอินกำบังบางประเภทอาจช่วยได้ที่นี่หรือไม่ ข้อมูลความทึบมีอยู่มันเป็นแค่เรื่องของการได้มา การรับข้อมูลระดับพิกเซลไม่มีอยู่ในสคริปต์ API (อย่างน้อยใน Applescript แต่ภาษาที่รองรับทั้งหมดดูเหมือนจะปรับแนวจากที่ฉันเคยเห็น)
Philip Regan

คำตอบ:


6

ฉันเข้าใจความเจ็บปวดของคุณอย่างสมบูรณ์ นี่คือวิธีแก้ปัญหาของฉัน :)
ดึง Alpha เป็น Mask Action
นี่คือสิ่งที่ทำ:

ป้อนคำอธิบายรูปภาพที่นี่ แก้ไข:
ป้อนคำอธิบายรูปภาพที่นี่
ฉันหวังว่านี่จะช่วยได้ :)


ว้าวเจ๋ง.. แน่นอนว่าต้องใช้การกระทำเพื่อให้เป็นกระบวนการที่ทนได้
Ars Magika

5

ไม่ถูกต้อง! ผิดทั้งหมด!

ฉันหลอกตัวเองและคุณด้วยในกระบวนการ: สิ่งที่ฉันสร้างขึ้นนั้นเป็นภาพที่มีมาก่อน - ไม่ใช่ไม่ใช่สีดำ แต่มีสีขาว ฉันปล่อยคำตอบนี้ให้คนอื่นสร้างต่อไป


ฉันพยายามที่จะทำเช่นนี้:

  1. แยกช่อง RGBA จริงจากภาพ
  2. ใช้พวกเขาเพื่อสร้างภาพใหม่

และนี่คือวิธีที่ฉันทำ:

ภาพทดสอบ

นี่คือภาพทดสอบที่ฉันใช้ มุมมองช่องใน PS มีลักษณะดังนี้:

ช่อง

โดยการเลือกแต่ละช่องฉันคัดลอกมันลงในเลเยอร์แต่ละชั้นแล้วแบนด้วยพื้นหลังสีขาวเพื่อรับแผนที่ขาวดำดังที่แสดงที่นี่:

BW-แผนที่

ฉันยังแยกความโปร่งใสของภาพต้นฉบับลงในเลเยอร์โดยคลิกคำสั่งที่เลเยอร์ - ธัมบ์เนลและเติมเลเยอร์ใหม่ด้วยการเลือก

จากนั้นฉันสร้างภาพใหม่ที่มีขนาดเท่ากันและไม่มีความโปร่งใส จากนั้นฉันก็วางเลเยอร์ RGB ที่ฉันสร้างลงในช่องที่สอดคล้องกันในภาพใหม่:

ช่องของภาพใหม่

ในขั้นตอนสุดท้ายฉัน 'เลเยอร์' เลเยอร์โดยดับเบิลคลิกและสร้างเลเยอร์มาสก์โดยใช้เลเยอร์อัลฟาจากภาพต้นฉบับทำให้เกิดสิ่งนี้:

หน้ากากชั้น


ตามที่ระบุไว้ข้างต้นสิ่งนี้ไม่ได้สร้างภาพที่ไม่ได้แยกจากกันเนื่องจากตัวอย่างของฉันจะต้องมีลักษณะเช่นนี้เป็นแบบไม่ จำกัด สาขา:

รุ่นที่ถูกต้อง

มีใครฉลาดกว่าฉันและสามารถสร้างได้ไหม ฉันคิดว่าถ้าไม่มีการใช้สคริปต์พิกเซลขั้นสูงสิ่งนี้เป็นไปไม่ได้ใน Photoshop



2

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

แก้ไข:

ฉันสร้างไฟล์ png ตัวอย่างแล้วใช้ php เพื่อจัดการไฟล์เหล่านี้ (ซอร์สโค้ดด้านล่าง)

หากฉันสร้าง png ด้วยความโปร่งใสแบบสุ่มและบันทึกในขณะที่เลเยอร์มีมาสก์พื้นที่ที่ชัดเจน 100% (เช่นจากกล่องเครื่องมือ) จะแสดงเป็นสีขาวไม่ว่าจะรองรับอัลฟาหรือไม่ การไล่ระดับสีที่มีจำนวนที่ชัดเจน 100% ไม่ปรากฏขึ้นเมื่อปิดการใช้งานอัลฟา

ถ้าฉันใช้เลเยอร์มาสก์ (อย่างถาวร) แล้วสร้าง png ดังนั้น php จะแสดงรูปภาพต้นฉบับหากอัลฟาถูกปิดใช้งาน

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

ตัวอย่างโค้ดทั้งคู่เป็นเครื่องพิสูจน์แนวคิดและ SLOW

<?php

$im = imagecreatefrompng('./images/alphatest_nolayer.png');
$enable_alpha = 0;  //set to 0 to disable aplha

if ($enable_alpha) {
    imagealphablending($im, false);
    imagesavealpha($im, true);
}

header('Content-Type: image/png');
imagepng($im);

imagedestroy($im);

?>

หากต้องการแยกอัลฟา (หมายเหตุ: php มีข้อ จำกัด ของ GD ที่ระดับ 128 อัลฟามากกว่า 256) ดังนั้นความแม่นยำบางอย่างจึงสูญหายไป อัลฟาสามารถยืดได้ถึง 256 โดยใช้เครื่องมือระดับ)

<?php

$im = imagecreatefrompng('./images/alphatest_nolayer.png');
$w = imagesx($im);
$h = imagesy($im);

$om = imagecreatetruecolor($w,$h);

for ($x = 0; $x < $w; $x++) {
    for ($y = 0; $y < $h; $y++) {
        $rgb = imagecolorat($im, $x, $y);
        $colors = imagecolorsforindex($im,  $rgb);

        $orgb = imagecolorallocate($om,$colors['alpha'],$colors['alpha'],$colors['alpha']);
        imagesetpixel($om,$x,$y,$orgb);
    }
}

header('Content-Type: image/png');
imagepng($om);

imagedestroy($om);
imagedestroy($im);

?>

แต่ข้อมูลยังอยู่ที่นั่น มันเป็นส่วน RGB ของข้อมูลพิกเซล RGBA จะต้องมีวิธีการแยกมัน
Mat

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

.png มีจานสีที่กำหนดไว้ล่วงหน้าสำหรับสีดำโปร่งใส 100% ซึ่งจะถูกนำไปใช้ (โดย photoshop) เมื่อใดก็ตามที่มีความโปร่งใส 100% เพียงเพื่อประหยัดพื้นที่บางส่วน
Ars Magika

ไม่แน่ใจว่าสิ่งนี้ตอบคำถามได้จริง - ดูเหมือนจะเฉพาะเจาะจงกับการจัดการ PNG
e100

2

ฉันค้นพบวิธีการทำในGIMPอาจไม่ใช่ PhotoShop แต่อย่างน้อยมันจะทำในสิ่งที่คุณถาม (ตามที่ฉันตีความมันอยู่แล้ว;)

  • เปิดภาพใน GIMP
  • คลิกด้วยปุ่มเมาส์ขวาบนเลเยอร์ในกล่องเลเยอร์
  • เลือก " เพิ่มเลเยอร์มาสก์ " จากเมนูบริบท
  • ในเมนูต่อไปนี้เลือก " transfer layer alpha channel " และคลิก " add " -button

ณ จุดนี้คุณจะเหลือภาพที่มีหน้ากากช่องอัลฟา

คุณสามารถไปอีกขั้นหนึ่งได้:

  • คลิกขวาที่เลเยอร์มาสก์และเลือก " ลบเลเยอร์มาสก์ "
  • ตอนนี้คุณเหลือภาพโดยไม่มีหน้ากากอัลฟ่า

นอกจากนี้ยังมีคลิป youtubeเกี่ยวกับวิธีการทำ


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

1

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

หากนี่คือคำถามคำตอบนั้นง่ายมากถ้าน่าเบื่อนิดหน่อย

  1. คัดลอกเลเยอร์ 10 ครั้ง ความโปร่งใสจะ "เติม" ในภาพรวม

  2. รวมสำเนาทั้งหมด (แต่ไม่ใช่เลเยอร์ดั้งเดิมซึ่งคุณจะต้องใช้ในขั้นตอนสุดท้าย)

  3. ทำซ้ำขั้นตอนที่ 1 และ 2 ด้วยเลเยอร์ที่ผสานจากนั้นทำอีกครั้ง ณ จุดนี้พิกเซลทั้งหมดที่มีความโปร่งใสน้อยกว่า 100% ตอนนี้เป็นทึบแสง 100% (หากมีบางส่วนอยู่ให้ลองทำซ้ำจนกว่าจะไม่มี) นั่นคือข้อมูลภาพมากที่สุดเท่าที่เป็นไปได้ในการกู้คืน

  4. Ctl / Cmd- คลิกที่ภาพขนาดย่อของเลเยอร์ดั้งเดิมเพื่อโหลดความโปร่งใส

  5. เมื่อเลือกเลเยอร์ทึบแสงใหม่ให้คลิกไอคอนเลเยอร์มาสก์ในแผงเลเยอร์


0

ตกลงจริง ๆ แล้วเป็นเรื่องง่าย (คุณต้องละเว้นมดเดินขบวน)

สร้างเลเยอร์ใหม่และเติมให้สมบูรณ์ด้วยสีใดก็ตามที่คุณใช้ (หากการสุ่มตัวอย่างนำมาจากกึ่งกลางภาพแรก)

ป้อนคำอธิบายรูปภาพที่นี่

ป้อนคำอธิบายรูปภาพที่นี่

จากนั้นถ่ายรูปแรกของคุณแล้วกด CTRL + คลิกที่ภาพขนาดย่อของเลเยอร์คุณควรเห็นบางรุ่นของสิ่งนี้: ป้อนคำอธิบายรูปภาพที่นี่

ดังที่ฉันได้พูดไปก่อนหน้านี้: ละเว้นมดเดินขบวนการขนนกมีผลโดยอัตโนมัติใน CS5

จากนั้นตรวจสอบให้แน่ใจว่าคุณได้เลือกเลเยอร์ที่เต็มแล้วและคลิกปุ่มรูปแบบ:

ป้อนคำอธิบายรูปภาพที่นี่

จากนั้นเพียงซ่อนเลเยอร์ด้านล่างและคุณควรจะทำโดยมีเอฟเฟกต์ที่แน่นอนหลังจากคุณ :)

ป้อนคำอธิบายรูปภาพที่นี่

และนี่คือวิธีการย้อนวิศวกรรมสร้างหน้ากากที่ใช้ใน CS5 ฟังก์ชั่นการเลือกเลเยอร์ CS5 นั้นค่อนข้างล้ำหน้าดังนั้นเวลาส่วนใหญ่จึงไม่สนใจมดเดินขบวนเนื่องจากพวกมันไม่แสดงขนนกที่จะไปพร้อมกับการเลือกอย่างถูกต้อง :)

หวังว่ามันจะเป็นประโยชน์สำหรับคุณ


ขอบคุณสำหรับคำตอบของคุณ แต่นี่ไม่ใช่สิ่งที่ฉันกำลังมองหา - ตามที่อธิบายไว้สีแดงคงที่เป็นเพียงตัวอย่างนี้! มันสามารถเป็นภาพใด ๆ (ไม่เพียง แต่สีเติมคงที่) - และ corse ฉันไม่ได้มีภาพที่ไม่โปร่งใสเดิม
Mat

คุณควรโพสต์ภาพในคำถามของคุณ หากคุณโพสต์การเติมคงที่เราจะตอบตามการเติมคงที่ ลองใช้เทคนิคต่าง ๆ ที่นี่การเลือก CS5 นั้นล้ำหน้ามากอาจทำให้คุณประหลาดใจ มันเป็นฉัน
Kyle

แน่นอนฉันรู้เกี่ยวกับเทคนิคการเลือกเหล่านั้น! ปัญหาในคำถามคือวิธีการเข้าถึง RGB เพียงส่วนหนึ่งของชั้นโปร่งใส
จ้า

เหนือเลเยอร์มีสามแท็บคลิกช่อง คุณมีหน้ากากสีแดงเขียวน้ำเงินและเลเยอร์ บางทีนี่คือสิ่งที่คุณหลังจาก?
Kyle

แต่เลเยอร์ดังเช่นในneo.cycovery.com/alpha_prob2.jpgจะไม่แสดงช่องอัลฟ่า - แต่จะแสดงเฉพาะช่องสัญญาณ RG และ B ด้วยความโปร่งใสที่ใช้อยู่แล้ว
Mat

0

สิ่งที่คุณต้องการทำทำได้ง่าย ๆ โดยปลั๊กอินเช่นปลั๊กอิน "ลบความโปร่งใส" ของ Photofreebies ก่อนอื่นให้คุณคลิกที่คำสั่งเลเยอร์เพื่อเลือกพิกเซลที่โปร่งใสแล้วบันทึกข้อมูลความโปร่งใสนี้ในช่องใหม่เพื่อให้มันอยู่รอบ ๆ จากนั้นคุณใช้ตัวกรอง "ลบความโปร่งใส" และคุณเห็นพิกเซล 'ซ่อน' ในเลเยอร์ของคุณเปิดทึบแสง (ค่อนข้างน่าสนใจเพื่อดูว่ารูปแบบ Photoshop ของคุณพิกเซลโปร่งใส 100% BTW) ฉันหวังเป็นเวลาหลายปีว่าสิ่งนี้ถูกสร้างขึ้นใน Photoshop โดยกำเนิด แต่ก็ดีนะฉันเดาว่าสูงเกินไป

น่าเสียดายที่ฉันไม่พบปลั๊กอินดังกล่าวที่ใช้ร่วมกับ Photoshop CS6 สำหรับ Mac ดังนั้นตอนนี้ฉันติดอยู่ GraphicConverter สามารถทำได้เช่นกัน (ลบช่อง Alpha)


0

นี่คือคำตอบ:

  1. สร้างเลเยอร์กับสิ่งที่คุณต้องการในภาพ

  2. ทำการเลือกสำหรับช่องอัลฟาที่ต้องการ

  3. ทำการเลือกเป็น "เลเยอร์มาสก์" สำหรับเลเยอร์รูปภาพ

  4. คลิกขวาที่เลเยอร์มาสก์และ "ใช้เลเยอร์มาสก์"

ตอนนี้ความมหัศจรรย์เริ่มต้น:

  1. ไปที่ "Layer" และที่ด้านล่าง: "Matting" จากนั้นเลือก "Remove black matte"

ยินดี!

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