Jak pracovat s vrstvami PSD v Python
Tento průvodce ukazuje, jak vypsat vrstvy dokumentu, číst a měnit editovatelná metadata vrstvy, přesunout vrstvu a odstranit vrstvu ze sbírky. Vlastnost layers načteného PsdImage vrací jeho kolekci objektů Layer. Každý Layer poskytuje editovatelná metadata — název, viditelnost, neprůhlednost, oříznutí, režim prolnutí a pozici (hrany ohraničení) — plus jen pro čtení celkové ohraničení a informace o kanálech.
Průvodce krok za krokem
Krok 1: Nainstalujte balíček
git clone https://github.com/aspose-psd-foss/Aspose.PSD-FOSS-for-Python.git
cd Aspose.PSD-FOSS-for-Python
# No packaging manifest is published yet -- run from this folder,
# or add it to PYTHONPATH:
export PYTHONPATH=$PWD:$PYTHONPATHKrok 2: Importujte požadované třídy
PsdImage načte dokument; BlendMode se později použije k nastavení režimu prolnutí vrstvy:
from aspose_psd_foss.psdimage import PsdImage
from aspose_psd_foss.layers.blendmode import BlendModeKrok 3: Načíst dokument a vypsat jeho vrstvy
Načtěte dokument a poté iterujte layers, abyste viděli název a geometrii každé vrstvy:
image = PsdImage.load("input.psd")
for layer in image.layers:
print(f"{layer.name}: {layer.width}x{layer.height} at ({layer.left},{layer.top})")Krok 4: Číst a upravovat viditelnost vrstvy, průhlednost a režim prolnutí
is_visible, opacity (obvykle 0-255), clipping, name a blend_mode_key mají všechny funkční settery:
layer = image.layers[0]
layer.is_visible = False # hide the layer
layer.opacity = 200 # ~78% opacity
layer.blend_mode_key = BlendMode.MULTIPLY
layer.name = "Renamed Layer"Krok 5: Číst a přemístit ohraničení vrstvy
bounds, width, height a channels_count jsou pouze pro čtení — ale top, left, bottom a right mají každý funkční setter, který přemísťuje vrstvu:
print(f"Bounds: {layer.bounds}")
print(f"Channels: {layer.channels_count}")
layer.left = 10
layer.top = 20
layer.right = 40
layer.bottom = 60Krok 6: Nahradit kolekci vrstev
PsdImage.layers má sám funkční setter, takže můžete nahradit celou kolekci (například pro odebrání vrstvy):
image.layers = [l for l in image.layers if l.name != "Renamed Layer"]Krok 7: Uložit dokument
Uložte všechny úpravy provedené v předchozích krocích zpět na disk a poté uvolněte prostředky obrázku:
image.save("output.psd")
image.dispose()Běžné problémy a opravy
NotSupportedException při nastavení channel_information, layer_mask_data, nebo layer_blending_ranges_data. Tyto tři Layer nastavovače nejsou v tomto FOSS sestavení podporovány — považujte je za pouze ke čtení.
Hodnota opacity vypadá po nastavení špatně. opacity je běžně hodnota v rozmezí 0-255, nikoli zlomek 0,0-1,0 nebo procento — layer.opacity = 200 znamená přibližně 78% neprůhlednosti (200/255).
Změny vrstvy se po uložení neobjeví. Potvrďte, že upravujete Layer instanci získanou z image.layers, a že zavoláte image.save() po provedení úprav.
Často kladené otázky
Můžu odstranit vrstvu z dokumentu?
Ano — PsdImage.layers má funkční setter, takže mu můžete přiřadit filtrovaný seznam k odstranění vrstev (viz Krok6).
Jaké režimy prolnutí jsou k dispozici?
BlendMode zahrnuje hodnoty jako NORMAL, MULTIPLY, SCREEN, OVERLAY a DARKEN, mezi jinými — nastaveno pomocí Layer.blend_mode_key.
Jsou k dispozici data masky vrstvy?
Layer.layer_mask_data má funkční getter, ale jeho setter vyvolá NotSupportedException v této FOSS verzi.