Работа с 3D-эффектами и визуальными эффектами — Aspose.Slides FOSS для Python
Aspose.Slides FOSS for Python provides two separate effect systems accessible on every shape:
EffectFormat(shape.effect_format): 2D визуальные эффекты: тень, свечение, мягкий край, размытие, отражениеThreeDFormat(shape.three_d_format): 3D внешний вид: фаска, проекция камеры, световая установка, материал, глубина выдавливания
Обе сохраняются при циклах сохранения/загрузки.
Визуальные эффекты (EffectFormat)
Внешняя падающая тень
from aspose.slides_foss import ShapeType
from aspose.slides_foss.drawing import Color
import aspose.slides_foss as slides
from aspose.slides_foss.export import SaveFormat
with slides.Presentation() as prs:
shape = prs.slides[0].shapes.add_auto_shape(ShapeType.RECTANGLE, 100, 100, 300, 120)
shape.add_text_frame("Shadowed Text")
ef = shape.effect_format
ef.enable_outer_shadow_effect()
ef.outer_shadow_effect.blur_radius = 10 # softness in points
ef.outer_shadow_effect.direction = 315 # angle: 315° = upper-left cast
ef.outer_shadow_effect.distance = 8 # offset in points
ef.outer_shadow_effect.shadow_color.color = Color.from_argb(128, 0, 0, 0) # semi-transparent black
prs.save("shadow.pptx", SaveFormat.PPTX)Общие direction значения: 0 = вправо, 45 = нижний‑правый, 90 = вниз, 270 = вверх, 315 = верхний левый.
Эффект свечения
from aspose.slides_foss import ShapeType
from aspose.slides_foss.drawing import Color
import aspose.slides_foss as slides
from aspose.slides_foss.export import SaveFormat
with slides.Presentation() as prs:
shape = prs.slides[0].shapes.add_auto_shape(ShapeType.ELLIPSE, 150, 100, 200, 200)
ef = shape.effect_format
ef.enable_glow_effect()
ef.glow_effect.radius = 15
ef.glow_effect.color.color = Color.gold
prs.save("glow.pptx", SaveFormat.PPTX)Мягкий край (размытие границы)
from aspose.slides_foss import ShapeType
import aspose.slides_foss as slides
from aspose.slides_foss.export import SaveFormat
with slides.Presentation() as prs:
shape = prs.slides[0].shapes.add_auto_shape(ShapeType.RECTANGLE, 100, 100, 350, 180)
ef = shape.effect_format
ef.enable_soft_edge_effect()
ef.soft_edge_effect.radius = 12 # feather radius in points
prs.save("soft-edge.pptx", SaveFormat.PPTX)Размытие
from aspose.slides_foss import ShapeType
import aspose.slides_foss as slides
from aspose.slides_foss.export import SaveFormat
with slides.Presentation() as prs:
shape = prs.slides[0].shapes.add_auto_shape(ShapeType.RECTANGLE, 100, 100, 350, 180)
shape.effect_format.set_blur_effect(radius=8, grow=True)
prs.save("blur.pptx", SaveFormat.PPTX)Проверка и удаление эффектов
from aspose.slides_foss import ShapeType
import aspose.slides_foss as slides
with slides.Presentation() as prs:
shape = prs.slides[0].shapes.add_auto_shape(ShapeType.RECTANGLE, 100, 100, 200, 100)
ef = shape.effect_format
ef.enable_outer_shadow_effect()
ef.enable_glow_effect()
print(f"Has effects: {not ef.is_no_effects}") # True
ef.disable_outer_shadow_effect()
ef.disable_glow_effect()
print(f"Has effects: {not ef.is_no_effects}") # False3D Formatting (ThreeDFormat)
Эффект скоса
from aspose.slides_foss import ShapeType, BevelPresetType
import aspose.slides_foss as slides
from aspose.slides_foss.export import SaveFormat
with slides.Presentation() as prs:
shape = prs.slides[0].shapes.add_auto_shape(ShapeType.RECTANGLE, 150, 150, 250, 120)
shape.add_text_frame("3D Button")
tdf = shape.three_d_format
tdf.bevel_top.bevel_type = BevelPresetType.CIRCLE
tdf.bevel_top.width = 12
tdf.bevel_top.height = 6
prs.save("bevel.pptx", SaveFormat.PPTX)Значения BevelPresetType: CIRCLE, RELAXED_INSET, COOL_SLANT, DIVOT, RIBLET, HARD_EDGE, SLOPE, CONVEX
Предустановка камеры
from aspose.slides_foss import ShapeType, BevelPresetType, CameraPresetType
import aspose.slides_foss as slides
from aspose.slides_foss.export import SaveFormat
with slides.Presentation() as prs:
shape = prs.slides[0].shapes.add_auto_shape(ShapeType.RECTANGLE, 150, 150, 250, 120)
tdf = shape.three_d_format
tdf.bevel_top.bevel_type = BevelPresetType.CIRCLE
tdf.bevel_top.width = 10
tdf.camera.camera_type = CameraPresetType.PERSPECTIVE_ABOVE
prs.save("camera.pptx", SaveFormat.PPTX)Осветительная система и материал
from aspose.slides_foss import (
ShapeType, BevelPresetType, CameraPresetType,
LightRigPresetType, LightingDirection, MaterialPresetType,
)
import aspose.slides_foss as slides
from aspose.slides_foss.export import SaveFormat
with slides.Presentation() as prs:
shape = prs.slides[0].shapes.add_auto_shape(ShapeType.RECTANGLE, 150, 150, 250, 120)
shape.add_text_frame("Metal Button")
tdf = shape.three_d_format
tdf.bevel_top.bevel_type = BevelPresetType.CIRCLE
tdf.bevel_top.width = 10
tdf.bevel_top.height = 5
tdf.camera.camera_type = CameraPresetType.PERSPECTIVE_ABOVE
tdf.light_rig.light_type = LightRigPresetType.BALANCED
tdf.light_rig.direction = LightingDirection.TOP
tdf.material = MaterialPresetType.METAL
tdf.depth = 20
prs.save("3d-metal.pptx", SaveFormat.PPTX)Значения MaterialPresetType: CLEAR, DK_EDGE, FLAT, MATTE, METAL, PLASTIC, POWDER, SOFT_EDGE, SOFTMETAL, TRANSLUCENT_POWDER, WARM_MATTE, LEGACY_MATTE, LEGACY_METAL, LEGACY_PLASTIC, LEGACY_WIREFRAME
Комбинирование 2D и 3D эффектов
Вы можете применить оба effect_format и three_d_format к той же форме:
from aspose.slides_foss import (
ShapeType, FillType, BevelPresetType, CameraPresetType, MaterialPresetType,
)
from aspose.slides_foss.drawing import Color
import aspose.slides_foss as slides
from aspose.slides_foss.export import SaveFormat
with slides.Presentation() as prs:
shape = prs.slides[0].shapes.add_auto_shape(ShapeType.ROUND_CORNER_RECTANGLE, 150, 150, 300, 120)
shape.add_text_frame("Premium Card")
# Solid fill
shape.fill_format.fill_type = FillType.SOLID
shape.fill_format.solid_fill_color.color = Color.from_argb(255, 30, 80, 180)
# 3D bevel
tdf = shape.three_d_format
tdf.bevel_top.bevel_type = BevelPresetType.CIRCLE
tdf.bevel_top.width = 8
tdf.camera.camera_type = CameraPresetType.PERSPECTIVE_ABOVE
tdf.material = MaterialPresetType.PLASTIC
# Drop shadow
ef = shape.effect_format
ef.enable_outer_shadow_effect()
ef.outer_shadow_effect.blur_radius = 12
ef.outer_shadow_effect.direction = 270
ef.outer_shadow_effect.distance = 6
ef.outer_shadow_effect.shadow_color.color = Color.from_argb(80, 0, 0, 0)
prs.save("premium-card.pptx", SaveFormat.PPTX)