ภาพรวม

เพื่อออโตเมติกการแก้ไขรูปแบบ PSD และเปลี่ยนไฟล์ PSD โดยไม่ต้องใช้ Adobe® Photoshop® คุณสามารถใช้ Aspose.PSD API ด้านล่างได้ มีโค้ดย่อ C# และ .NET ที่ช่วยให้คุณสามารถแก้ไขไฟล์ PSD

การใช้ PSD Layer และ Vector Masks เราสามารถซ่อนและแสดงพิกเซลของชั้นโดยไม่ลบอย่างถาวร หน้ากากเราสเตอร์เรียกอีกชื่อหนึ่งว่าหน้ากากชั้นหรือหน้ากากผู้ใช้ การเข้าถึงหน้ากากแรสเตอร์และเวกเตอร์ใน Aspose.PSD มีทางเข้าผ่านคุณสมบัติเลเยอร์ LayerMaskDataซึ่งสามารถเป็นตัวอย่างของคลาส ‘LayerMaskDataShort’ และ ‘LayerMaskDataFull’ ที่เป็นคลาสลูกของคลาส ‘LayerMaskData’ อย่างน้อยถ้าเลเยอร์มีทั้งหน้ากากแรสเตอร์และเวกเตอร์ จะมีอินสแตนซ์ของ LayerMaskDataFull ถูกนำมา หากเลเยอร์มีเพียงแค่หน้ากากแรสเตอร์หรือเวกเตอร์ จะมีอินสแตนซ์ของ LayerMaskDataShort ถูกนำมา พรอพเพอร์ตี LayerMaskData ถ้าค่าเป็น null แสดงว่าเลเยอร์ไม่มีหน้ากากหรือมีเพียงหน้ากากเวกเตอร์ที่ปิดการใช้งานอย่างเดียว

todo:image_alt_text

หน้ากากแรสเตอร์และหน้ากากเวกเตอร์ที่ถูกปิดใช้งาน LayerMaskDataShort

หน้ากากราชเทอร์ที่ถูกปิดใข้งาน LayerMaskDataShort

หน้ากากแรสเตอร์และหน้ากากเวกเตอร์ LayerMaskDataFull

หน้ากากแรสเตอร์ LayerMaskDataShort

หน้ากากเวกเตอร์ LayerMaskDataShort

หน้ากากเว็คเตอร์ที่ถูกปิดการใช้งาน null (แต่มีทรัพยากรเวกเตอร์)

วิธีการดึงหน้ากากแรสเตอร์ของเลเยอร์ในไฟล์ PSD?

ต้องมั่นใจก่อนว่าเลเยอร์มีทั้งหน้ากากเวกเตอร์และหน้ากากราชเทอร์:

โค้ดตัวอย่างด้านล่างแสดงวิธีการดึงหน้ากากแรสเตอร์ของเลเยอร์

มิฉะนั้น ประเภทของสมบัติเลเยอร์ LayerMaskData คือ LayerMaskDataShort ในกรณีนี้ มาตรวจสอบว่าเลเยอร์มีหน้ากากแรสเตอร์อย่างเดียวหรือไม่โดยการตรวจสอบสมบัติ Flags ไม่ควรมี LayerMaskFlags.UserMaskFromRenderingOtherData flag มิฉะนั้นหน้ากากก็คือแคชของหน้ากากเวกเตอร์

การดึงโค้ดหน้ากาก:

หากคุณต้องการ ดึงหน้ากากแรสเตอร์ เป็น LayerMaskDataShort (สำหรับการจัดการต่อไป) แม้ว่าทั้งสองหน้ากากจะมีอยู่ LayerMaskDataFull ควรสกัดและแปลงไปเป็น LayerMaskDataShort โค้ดต่อไปนี้สามารถใช้ได้สำหรับทั้งสองกรณี:

การสกัดหน้ากากแรสเตอร์จาก PSD

การตรวจสอบว่าเลเยอร์ในไฟล์ PSD มีหน้ากากแรสเตอร์หรือไม่?

โค้ด C# ต่อไปนี้อาจช่วยให้คุณตรวจสอบว่าเลเยอร์มีหน้ากากแรสเตอร์หรือไม่:

วิธีตรวจสอบว่าหน้ากากแรสเตอร์ถูกนำไปใช้กับ PSD Layer

วิธีการลบ / เพิ่ม / อัปเดตหน้ากากแรสเตอร์ของเลเยอร์ในไฟล์ PSD?

การลบ / เพิ่ม / อัปเดตเพียงแค่ LayerMaskData ไม่เพียงพอสำหรับการบันทึกให้ถูกต้องเพราะช่องไม่ได้รับการอัพเดท แม้ว่าจะสามารถให้การแสดงผลได้อย่างถูกต้อง นี้ไม่ทำให้ช่องหน้ากากเปลี่ยนไป:

ควรใช้วิธีการเพิ่มเลเยอร์ AddLayerMask สำหรับการลบ / เพิ่ม / อัปเดต

นี้จะเพิ่ม / อัปเดตทั้งหน้ากากและช่อง:

นี้จะลบทั้งหน้ากากและช่อง:

การลบหน้ากากแรสเตอร์ของเลเยอร์ในภาพ PSD

ก่อนอื่นเราตรวจสอบว่าหน้ากากเป็นรูปแบบสั้นและหากมันไม่ใช่หนึ่งเวกเตอร์เราสามารถเรียก AddLayerMask method ด้วย null เพื่อลบหน้ากากแรสเตอร์ แต่หากมันเป็นรูปแบบเต็มเราต้องแปลงเป็นรูปแบบสั้นเพื่อทิ้งเฉพาะหน้ากากเวกเตอร์ไว้เพียงอย่างเดียว สำหรับการลบหน้ากากชั้น ข้อมูลนี้เป็นตัวอย่าง

โค้ดตัวอย่างวิธีการลบหน้ากากชั้นจากไฟล์ PSD

การอัปเดตหน้ากากแรสเตอร์ของเลเยอร์ในภาพ PSD

นี่ คือง่ายต่อการกระทำ: หน้ากากเป็นชนิดสั้นเราต้องเปลี่ยน ImageData และ MaskRectangle ถ้าจำเป็น, มิฉะนั้น UserMaskData และ UserMaskRectangle ควรเปลี่ยน โค้ดตัวอย่างนี้สามารถใช้สำหรับการอัปเดตหน้ากากชั้น:

อัปเดต PSD Layer Mask ด้วย C#

นี่คือตัวอย่างของการกระทำที่เป็นไปได้ที่เปลี่ยนหน้ากากแรสเตอร์ อันนี้กลับด้านหน้าของหน้ากากของเลเยอร์:

อัปเดต PSD Layer Mask ด้วย C#

การอัปเดตหน้ากากเวกเตอร์ในไฟล์ PSD เมื่อหน้ากากแรสเตอร์ของเลเยอร์มีอยู่

มันถูกคาดว่าผู้ใช้ได้เปลี่ยนโอปเจ็คเวกเตอร์ไปแล้ว จากนั้นนั้นสามารถอัปเดตหน้ากากเวกเตอร์ได้โดยกระทำการเรียก AddLayerMask ต่อเลเยอร์:

อัปเดต PSD Layer Vector Mask ด้วย C#

การเพิ่มหน้ากากแรสเตอร์ของเลเยอร์ในไฟล์ PSD

ถ้าเลเยอร์ไม่มีหน้ากากเราสามารถเพิ่มหน้ากากแรสเตอร์ที่กำหนดโดยการเรียก AddLayerMask layer method

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