Přidání obrázkových rámců do prezentací pomocí Pythonu

Úvod

Obrázkové rámy v Aspose.Slides for Python vám umožňují umisťovat a spravovat rastrové i vektorové obrázky jako nativní tvary snímků. Můžete vkládat obrázky ze souborů nebo streamů, umisťovat a měnit jejich velikost pomocí přesných souřadnic, aplikovat otáčení, nastavit průhlednost a kontrolovat pořadí Z spolu s ostatními tvary. API také podporuje ořezávání, zachování poměru stran, nastavení ohraničení a efektů a nahrazení podkladového obrázku bez přestavby rozvržení. Protože obrázkové rámy se chovají jako běžné tvary, můžete přidávat animace, hypertextové odkazy a alternativní text, což usnadňuje vytváření vizuálně bohatých a přístupných prezentací.

Vytvoření obrázkových rámců

Tato sekce ukazuje, jak vložit obrázek do snímku vytvořením PictureFrame pomocí Aspose.Slides for Python. Naučíte se, jak načíst obrázek, umístit jej přesně na snímek a kontrolovat jeho velikost a formátování.

  1. Vytvořte instanci třídy Presentation.
  2. Získejte snímek podle jeho indexu.
  3. Vytvořte PPImage přidáním obrázku do ImageCollection prezentace. Tento obrázek bude použit k vyplnění tvaru.
  4. Zadejte šířku a výšku rámce.
  5. Vytvořte PictureFrame dané velikosti pomocí metody add_picture_frame.
  6. Uložte prezentaci jako soubor PPTX.

Následující kód v Pythonu ukazuje, jak vytvořit obrázkový rámec:

import aspose.slides as slides

# Vytvořte instanci třídy Presentation, která představuje soubor PPTX.
with slides.Presentation() as presentation:
    # Získáte první snímek.
    slide = presentation.slides[0]

    # Přidejte obrázek do prezentace.
    with open("image.jpeg", "rb") as image_stream:
        image = presentation.images.add_image(image_stream)

        # Přidejte rámec obrázku s rozměry podle obrázku.
        picture_frame = slide.shapes.add_picture_frame(slides.ShapeType.RECTANGLE, 50, 50, image.width, image.height, image)

        # Uložte prezentaci jako PPTX.
        presentation.save("picture_frame.pptx", slides.export.SaveFormat.PPTX)

Vytvoření obrázkových rámců s relativním měřítkem

Tato sekce demonstruje umístění obrázku s pevnou velikostí a následné použití škálování založeného na procentech nezávisle na jeho šířce a výšce. Protože procenta se mohou lišit, může se změnit poměr stran. Škálování se provádí relativně k původním rozměrům obrázku.

  1. Vytvořte instanci třídy Presentation.
  2. Získejte snímek podle jeho indexu.
  3. Vytvořte PPImage přidáním obrázku do ImageCollection.
  4. Přidejte [PictureFrame] na snímek.
  5. Nastavte relativní šířku a výšku obrázkového rámce.
  6. Uložte prezentaci jako soubor PPTX.

Následující kód v Pythonu ukazuje, jak vytvořit obrázkový rámec s relativním škálováním:

import aspose.slides as slides

# Vytvořte instanci třídy Presentation, která reprezentuje soubor PPTX.
with slides.Presentation() as presentation:
    # Získejte první snímek.
    slide = presentation.slides[0]

    # Přidejte obrázek do kolekce obrázků prezentace.
    with open("image.jpeg", "rb") as image_stream:
        image = presentation.images.add_image(image_stream)

        # Přidejte rámec obrázku na snímek.
        picture_frame = slide.shapes.add_picture_frame(slides.ShapeType.RECTANGLE, 50, 50, 100, 100, image)

        # Nastavte relativní měřítko šířky a výšky.
        picture_frame.relative_scale_height = 0.8
        picture_frame.relative_scale_width = 1.35

        # Uložte prezentaci.
        presentation.save("relative_scaling.pptx", slides.export.SaveFormat.PPTX)

Extrahování rastrových obrázků z obrázkových rámců

Můžete extrahovat rastrové obrázky z objektů PictureFrame a uložit je ve formátech PNG, JPG a dalších. Níže uvedený příklad kódu demonstruje, jak extrahovat obrázek z dokumentu “sample.pptx” a uložit jej ve formátu PNG.

import aspose.slides as slides

with slides.Presentation("sample.pptx") as presentation:
    first_slide = presentation.slides[0]
    first_shape = first_slide.shapes[0]

    if isinstance(first_shape, slides.PictureFrame):
        image = first_shape.picture_format.picture.image.image
        image.save("slide_1_shape_1.png", slides.ImageFormat.PNG)

Extrahování SVG obrázků z obrázkových rámců

Když prezentace obsahuje SVG grafiku umístěnou uvnitř tvarů PictureFrame, Aspose.Slides for Python prostřednictvím .NET vám umožní získat původní vektorové obrázky s plnou věrností. Procházením kolekce tvarů snímku můžete identifikovat každý PictureFrame, zkontrolovat, zda podkladový PPImage obsahuje SVG obsah, a poté uložit tento obrázek na disk nebo do streamu v jeho nativním SVG formátu.

Následující příklad kódu demonstruje, jak extrahovat SVG obrázek z obrázkového rámce:

import aspose.slides as slides

with slides.Presentation("sample.pptx") as presentation:
    slide = presentation.slides[0]
    shape = slide.shapes[0]

    if isinstance(shape, slides.PictureFrame):
        svg_image = shape.picture_format.picture.image.svg_image

        if svg_image is not None:
            with open("output.svg", "w", encoding="utf-8") as svg_stream:
                svg_stream.write(svg_image.svg_content)

Získání průhlednosti obrázku

Aspose.Slides vám umožňuje získat efekt průhlednosti aplikovaný na obrázek. Tento Python kód demonstruje operaci:

import aspose.slides as slides

with slides.Presentation("sample.pptx") as presentation:
    picture_frame = presentation.slides[0].shapes[0]
    image_transform = picture_frame.picture_format.picture.image_transform
    for effect in image_transform:
        if isinstance(effect, slides.effects.AlphaModulateFixed):
            transparency_value = 100 - effect.amount
            print("Picture transparency: " + str(transparency_value))

Získání jasu a kontrastu obrázku

Aspose.Slides vám umožňuje získat efekt jasu a kontrastu aplikovaný na obrázek. Třída Luminance představuje tento transformační efekt obrázku.

Tento Python kód demonstruje, jak získat nastavení jasu a kontrastu z obrázkového rámce:

import aspose.slides as slides

with slides.Presentation("sample.pptx") as presentation:
    slide = presentation.slides[0]
    shape = slide.shapes[0]
    picture_frame = shape

    image_transform = picture_frame.picture_format.picture.image_transform
    for effect in image_transform:
        if isinstance(effect, slides.effects.Luminance):
            luminance = effect.get_effective()
            brightness = luminance.brightness
            contrast = luminance.contrast

            print("Brightness: " + str(brightness))
            print("Contrast: " + str(contrast))

Formátování obrázkových rámců

Aspose.Slides poskytuje mnoho možností formátování, které můžete aplikovat na obrázkový rámec. S těmito možnostmi můžete upravit obrázkový rámec tak, aby splňoval konkrétní požadavky.

  1. Vytvořte instanci třídy Presentation.
  2. Získejte snímek podle jeho indexu.
  3. Vytvořte PPImage přidáním obrázku do ImageCollection prezentace. Tento obrázek bude použit k vyplnění tvaru.
  4. Zadejte šířku a výšku rámce.
  5. Vytvořte PictureFrame dané velikosti pomocí metody add_picture_frame.
  6. Nastavte barvu čáry obrázkového rámce.
  7. Nastavte šířku čáry obrázkového rámce.
  8. Otočte obrázkový rámec zadáním kladné (ve směru hodinových ručiček) nebo záporné (proti směru hodinových ručiček) hodnoty.
  9. Uložte upravenou prezentaci jako soubor PPTX.

Následující Python kód demonstruje proces formátování obrázkového rámce:

import aspose.slides as slides
import aspose.pydrawing as draw

# Vytvořte instanci třídy Presentation, která reprezentuje soubor PPTX.
with slides.Presentation() as presentation:
    # Získejte první snímek.
    slide = presentation.slides[0]

    # Přidejte obrázek do kolekce obrázků prezentace.
    with open("image.jpeg", "rb") as image_stream:
        image = presentation.images.add_image(image_stream)

        # Přidejte rámec obrázku s rozměry podle obrázku.
        picture_frame = slide.shapes.add_picture_frame(slides.ShapeType.RECTANGLE, 50, 50, image.width, image.height, image)

        # Aplikujte formátování na obrázkový rámec.
        picture_frame.line_format.fill_format.fill_type = slides.FillType.SOLID
        picture_frame.line_format.fill_format.solid_fill_color.color = draw.Color.blue
        picture_frame.line_format.width = 20
        picture_frame.rotation = 45

    # Uložte prezentaci jako PPTX.
    presentation.save("picture_formatting.pptx", slides.export.SaveFormat.PPTX)

Přidání obrázků jako odkazů

Aby byly soubory prezentací malé, můžete přidávat obrázky nebo videa prostřednictvím odkazů místo jejich vkládání přímo do prezentací. Následující Python kód ukazuje, jak vložit obrázek a video do zástupce:

import aspose.slides as slides

with slides.Presentation("input.pptx") as presentation:
    slide = presentation.slides[0]

    shapes_to_remove = []

    for shape in slide.shapes:
        if shape.placeholder is None:
            continue

        if shape.placeholder.type == slides.PlaceholderType.PICTURE:
            picture_frame = slide.shapes.add_picture_frame(
                slides.ShapeType.RECTANGLE, shape.x, shape.y, shape.width, shape.height, None)

            picture_frame.picture_format.picture.link_path_long = \
                "https://upload.wikimedia.org/wikipedia/commons/3/3a/I.M_at_Old_School_Public_Broadcasting_in_October_2016_02.jpg"

            shapes_to_remove.append(shape)

        elif shape.placeholder.type == slides.PlaceholderType.MEDIA:
            video_frame = slide.shapes.add_video_frame(shape.X, shape.Y, shape.width, shape.height, "")

            video_frame.picture_format.picture.link_path_long = \
                "https://upload.wikimedia.org/wikipedia/commons/3/3a/I.M_at_Old_School_Public_Broadcasting_in_October_2016_02.jpg"

            video_frame.link_path_long = "https://youtu.be/t_1LYZ102RA"
            shapes_to_remove.append(shape)

    for shape in shapes_to_remove:
        slide.shapes.remove(shape)

    presentation.save("output.pptx", slides.export.SaveFormat.PPTX)

Ořezávání obrázků

V této sekci se naučíte, jak oříznout viditelnou oblast obrázku v obrázkovém rámci bez změny zdrojového souboru. Také se naučíte základní metodu aplikace okrajů ořezávání pro vytvoření čisté, zaměřené kompozice přímo na snímku.

Následující Python kód ukazuje, jak oříznout obrázek na snímku:

import aspose.slides as slides

with slides.Presentation() as presentation:
    slide = presentation.slides[0]

    # Přidejte obrázek do kolekce obrázků prezentace.
    with slides.Images.from_file("image.png") as source_image:
        image = presentation.images.add_image(source_image)

    # Přidejte rámec obrázku na snímek.
    picture_frame = slide.shapes.add_picture_frame(slides.ShapeType.RECTANGLE, 100, 100, 420, 250, image)

    # Ořízněte obrázek (procentuální hodnoty).
    picture_frame.picture_format.crop_left = 23.6
    picture_frame.picture_format.crop_right = 21.5
    picture_frame.picture_format.crop_top = 3
    picture_frame.picture_format.crop_bottom = 31

    # Uložte výsledek.
    presentation.save("cropped_image.pptx", slides.export.SaveFormat.PPTX)

Odstranění oříznutých oblastí obrázků

Pokud chcete odstranit oříznuté oblasti obrázku v rámci, použijte metodu delete_picture_cropped_areas. Tato metoda vrátí oříznutý obrázek nebo původní obrázek, pokud ořezávání není potřeba.

Následující Python kód demonstruje operaci:

import aspose.slides as slides

with slides.Presentation("sample.pptx") as presentation:
    slide = presentation.slides[0]

    # Získat PictureFrame z prvního snímku.
    picture_frame = slides.shape[0]

    # Získat PictureFrame z prvního snímku.
    cropped_image = picture_frame.picture_format.delete_picture_cropped_areas()

    # Uložit výsledek.
    presentation.save("deleted_cropped_areas.pptx", slides.export.SaveFormat.PPTX)

Komprese obrázků

Můžete komprimovat obrázek v prezentaci pomocí metody PictureFillFormat.compress_image. Tato metoda komprimuje obrázek snížením jeho velikosti na základě velikosti tvaru a zadaného rozlišení, s možností odstranění oříznutých oblastí.

Upravuje velikost a rozlišení obrázku podobně jako funkce PowerPointu Picture Format -> Compress Pictures -> Resolution.

Následující Python příklady demonstrují, jak komprimovat obrázek v prezentaci zadáním cílového rozlišení a volitelně odstraněním oříznutých oblastí:

import aspose.slides as slides

with slides.Presentation("demo.pptx") as presentation:
    slide = presentation.slides[0]
    picture_frame = slide.shapes[0]

    # Komprimujte obrázek s cílovým rozlišením 150 DPI (webové rozlišení) a odstraňte oříznuté oblasti.
    result = picture_frame.picture_format.compress_image(True, slides.export.PicturesCompression.DPI150)

    # Zkontrolujte výsledek komprimace.
    if result:
        print("Image successfully compressed.")
    else:
        print("Image compression failed or no changes were necessary.")

    presentation.save("compressed_image.pptx", slides.export.SaveFormat.PPTX)

Nebo přímo použitím vlastního DPI hodnoty:

import aspose.slides as slides

with slides.Presentation("demo.pptx") as presentation:
    slide = presentation.slides[0]
    picture_frame = slide.shapes[0]

    # Komprimujte obrázek na 150 DPI (webové rozlišení) a odstraňte oříznuté oblasti.
    picture_frame.picture_format.compress_image(True, 150)

    presentation.save("compressed_image.pptx", slides.export.SaveFormat.PPTX)

Uzamčení poměru stran

Pokud chcete, aby tvar obsahující obrázek zachoval svůj poměr stran po změně rozměrů obrázku, nastavte vlastnost aspect_ratio_locked na True.

Následující Python kód ukazuje, jak uzamknout poměr stran tvaru:

import aspose.slides as slides

with slides.Presentation("sample.pptx") as presentation:
    layout = presentation.layout_slides.get_by_type(slides.SlideLayoutType.CUSTOM)
    empty_slide = presentation.slides.add_empty_slide(layout)

    with slides.Images.from_file("image.png") as source_image:
        image = presentation.images.add_image(source_image)

    picture_frame = empty_slide.shapes.add_picture_frame(slides.ShapeType.RECTANGLE, 50, 50, image.width, image.height, image)

    # Zamknout poměr stran při změně velikosti.
    picture_frame.picture_frame_lock.aspect_ratio_locked = True

    presentation.save("aspect_ratio_locked.pptx", slides.export.SaveFormat.PPTX)

Použití vlastností Stretch Offset

Pomocí vlastností stretch_offset_left, stretch_offset_top, stretch_offset_right a stretch_offset_bottom třídy PictureFillFormat můžete definovat obdélník výplně.

Když je pro obrázek zadáno natažení, zdrojový obdélník je škálován tak, aby se vešel do obdélníku výplně. Každá hrana obdélníku výplně je definována procentuálním posunem od odpovídající hrany ohraničujícího rámečku tvaru. Kladné procento určuje vnitřní odsazení, záporné procento vnější odsazení.

  1. Vytvořte instanci třídy Presentation.
  2. Získejte referenci na snímek podle jeho indexu.
  3. Přidejte obdélníkový AutoShape.
  4. Nastavte typ výplně tvaru.
  5. Nastavte režim výplně obrázkem tvaru.
  6. Načtěte obrázek.
  7. Přiřaďte obrázek k výplni tvaru.
  8. Zadejte posuny obrázku od odpovídajících hran ohraničujícího rámečku tvaru.
  9. Uložte prezentaci jako soubor PPTX.

Následující Python kód demonstruje, jak použít vlastnosti Stretch Offset:

import aspose.slides as slides

# Vytvořte instanci třídy Presentation, která reprezentuje soubor PPTX.
with slides.Presentation() as presentation:
    # Získejte první snímek.
    slide = presentation.slides[0]

    # Přidejte obdélníkový AutoShape.
    shape = slide.shapes.add_auto_shape(slides.ShapeType.RECTANGLE, 20, 20, 300, 300)

    # Nastavte typ výplně tvaru.
    shape.fill_format.fill_type = slides.FillType.PICTURE

    # Nastavte režim výplně obrázkem tvaru.
    shape.fill_format.picture_fill_format.picture_fill_mode = slides.PictureFillMode.STRETCH

    # Načtěte obrázek a přidejte jej do prezentace.
    with open("image.jpeg", "rb") as image_stream:
        image = presentation.images.add_image(image_stream)

    # Přiřaďte obrázek k výplni tvaru.
    shape.fill_format.picture_fill_format.picture.image = image

    # Určete posuny obrázku od odpovídajících hran ohraničujícího rámečku tvaru.
    shape.fill_format.picture_fill_format.stretch_offset_left = 25
    shape.fill_format.picture_fill_format.stretch_offset_right = 25
    shape.fill_format.picture_fill_format.stretch_offset_top = -20
    shape.fill_format.picture_fill_format.stretch_offset_bottom = -10

    # Uložte soubor PPTX na disk.
    presentation.save("stretch_offset.pptx", slides.export.SaveFormat.PPTX)

FAQ

Jak zjistit, které formáty obrázků jsou podporovány pro PictureFrame?

Aspose.Slides podporuje jak rastrové obrázky (PNG, JPEG, BMP, GIF atd.), tak vektorové obrázky (například SVG) prostřednictvím objektu obrázku, který je přiřazen k PictureFrame. Seznam podporovaných formátů obecně překrývá možnosti enginu pro snímky a konverzi obrázků.

Jaký bude dopad přidání desítek velkých obrázků na velikost a výkon PPTX?

Vložení velkých obrázků zvyšuje velikost souboru a využití paměti; propojování obrázků pomáhá udržet velikost prezentace nízkou, ale vyžaduje, aby externí soubory zůstaly dostupné. Aspose.Slides nabízí možnost přidávat obrázky jako odkazy pro snížení velikosti souboru.

Jak mohu uzamknout objekt obrázku před nechtěným přesouváním/změnou velikosti?

Použijte shape locks pro PictureFrame (například zakázat přesouvání nebo změnu velikosti). Mechanismus zamykání je popsán pro tvary v samostatném protection article a je podporován pro různé typy tvarů, včetně PictureFrame.

Je zachována věrnost vektorového SVG při exportu prezentace do PDF/obrázků?

Aspose.Slides umožňuje extrahovat SVG z PictureFrame jako originální vektor. Při exportu do PDF nebo rastrých formátů může být výsledek rastrován v závislosti na nastavení exportu; fakt, že originální SVG je uložen jako vektor, je potvrzen chováním extrakce.