จากคำตอบที่ได้รับและความคิดเห็นคำตอบสั้น ๆ คือคุณไม่สามารถทำสิ่งที่คุณต้องการได้ เมื่อคุณใช้มาสก์เลเยอร์จะแสดงผลและข้อมูลภาพที่มองไม่เห็นจะถูกโยนทิ้งไป
แก้ไข:
ฉันสร้างไฟล์ 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);
?>