Dodaj ramki obrazu do prezentacji przy użyciu Pythona
Wprowadzenie
Ramki obrazu w Aspose.Slides for Python umożliwiają umieszczanie i zarządzanie obrazami rastrowymi i wektorowymi jako natywnymi kształtami slajdu. Możesz wstawiać obrazy z plików lub strumieni, pozycjonować i zmieniać ich rozmiar przy użyciu precyzyjnych współrzędnych, stosować obrót, ustawiać przezroczystość oraz kontrolować kolejność Z razem z innymi kształtami. API obsługuje także przycinanie, zachowanie proporcji, ustawianie krawędzi i efektów oraz wymianę podstawowego obrazu bez przebudowy układu. Ponieważ ramki obrazu zachowują się jak zwykłe kształty, możesz dodawać animacje, hiperlinki i tekst alternatywny, co umożliwia łatwe tworzenie wizualnie bogatych, dostępnych prezentacji.
Tworzenie ramek obrazu
W tej sekcji pokazano, jak wstawić obraz do slajdu, tworząc PictureFrame w Aspose.Slides for Python. Dowiesz się, jak wczytać obraz, precyzyjnie umieścić go na slajdzie oraz kontrolować jego rozmiar i formatowanie.
- Utwórz instancję klasy Presentation.
- Pobierz slajd po jego indeksie.
- Utwórz PPImage poprzez dodanie obrazu do ImageCollection prezentacji. Ten obraz będzie używany do wypełnienia kształtu.
- Określ szerokość i wysokość ramki.
- Utwórz PictureFrame o podanym rozmiarze przy użyciu metody add_picture_frame.
- Zapisz prezentację jako plik PPTX.
Poniższy kod w Pythonie pokazuje, jak utworzyć ramkę obrazu:
import aspose.slides as slides
# Utwórz instancję klasy Presentation, aby reprezentować plik PPTX.
with slides.Presentation() as presentation:
# Pobierz pierwszy slajd.
slide = presentation.slides[0]
# Dodaj obraz do prezentacji.
with open("image.jpeg", "rb") as image_stream:
image = presentation.images.add_image(image_stream)
# Dodaj ramkę obrazu o rozmiarze obrazu.
picture_frame = slide.shapes.add_picture_frame(slides.ShapeType.RECTANGLE, 50, 50, image.width, image.height, image)
# Zapisz prezentację jako PPTX.
presentation.save("picture_frame.pptx", slides.export.SaveFormat.PPTX)
Tworzenie ramek obrazu ze skalowaniem względnym
Ta sekcja demonstruje umieszczanie obrazu o stałym rozmiarze, a następnie stosowanie skalowania procentowego niezależnie dla szerokości i wysokości. Ponieważ procenty mogą się różnić, stosunek proporcji może ulec zmianie. Skalowanie odbywa się względem oryginalnych wymiarów obrazu.
- Utwórz instancję klasy Presentation.
- Pobierz slajd po jego indeksie.
- Utwórz PPImage poprzez dodanie obrazu do ImageCollection prezentacji.
- Dodaj PictureFrame do slajdu.
- Ustaw względną szerokość i wysokość ramki obrazu.
- Zapisz prezentację jako plik PPTX.
Poniższy kod w Pythonie pokazuje, jak utworzyć ramkę obrazu ze skalowaniem względnym:
import aspose.slides as slides
# Utwórz instancję klasy Presentation, aby reprezentować plik PPTX.
with slides.Presentation() as presentation:
# Pobierz pierwszy slajd.
slide = presentation.slides[0]
# Dodaj obraz do kolekcji obrazów prezentacji.
with open("image.jpeg", "rb") as image_stream:
image = presentation.images.add_image(image_stream)
# Dodaj ramkę obrazu do slajdu.
picture_frame = slide.shapes.add_picture_frame(slides.ShapeType.RECTANGLE, 50, 50, 100, 100, image)
# Ustaw względną szerokość i wysokość skali.
picture_frame.relative_scale_height = 0.8
picture_frame.relative_scale_width = 1.35
# Zapisz prezentację.
presentation.save("relative_scaling.pptx", slides.export.SaveFormat.PPTX)
Wyodrębnianie obrazów rastrowych z ramek obrazu
Możesz wyodrębnić obrazy rastrowe z obiektów PictureFrame i zapisać je w formatach PNG, JPG i innych. Poniższy przykład kodu demonstruje, jak wyodrębnić obraz z dokumentu „sample.pptx” i zapisać go w formacie 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)
Wyodrębnianie obrazów SVG z ramek obrazu
Gdy prezentacja zawiera grafikę SVG umieszczoną w kształtach PictureFrame, Aspose.Slides for Python via .NET umożliwia pobranie oryginalnych obrazów wektorowych z pełną wiernością. Przeglądając kolekcję kształtów slajdu, możesz zidentyfikować każdy PictureFrame, sprawdzić, czy powiązany PPImage zawiera treść SVG, a następnie zapisać ten obraz na dysku lub w strumieniu w jego natywnym formacie SVG.
Poniższy przykład kodu demonstruje, jak wyodrębnić obraz SVG z ramki obrazu:
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)
Uzyskiwanie przezroczystości obrazu
Aspose.Slides umożliwia pobranie efektu przezroczystości zastosowanego do obrazu. Ten kod w Pythonie demonstruje operację:
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))
Uzyskiwanie jasności i kontrastu obrazu
Aspose.Slides umożliwia pobranie efektu jasności i kontrastu zastosowanego do obrazu. Klasa Luminance reprezentuje ten efekt transformacji obrazu.
Ten kod w Pythonie demonstruje, jak pobrać ustawienia jasności i kontrastu z ramki obrazu:
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))
Formatowanie ramki obrazu
Aspose.Slides udostępnia wiele opcji formatowania, które możesz zastosować do ramki obrazu. Dzięki tym opcjom możesz dostosować ramkę obrazu do konkretnych wymagań.
- Utwórz instancję klasy Presentation.
- Pobierz slajd po jego indeksie.
- Utwórz PPImage poprzez dodanie obrazu do ImageCollection prezentacji. Ten obraz będzie używany do wypełnienia kształtu.
- Określ szerokość i wysokość ramki.
- Utwórz PictureFrame o podanym rozmiarze przy użyciu metody add_picture_frame slajdu.
- Ustaw kolor linii ramki obrazu.
- Ustaw szerokość linii ramki obrazu.
- Obróć ramkę obrazu, podając wartość dodatnią (zgodną z ruchem wskazówek zegara) lub ujemną (przeciwną do ruchu wskazówek zegara).
- Zapisz zmodyfikowaną prezentację jako plik PPTX.
Poniższy kod w Pythonie demonstruje proces formatowania ramki obrazu:
import aspose.slides as slides
import aspose.pydrawing as draw
# Utwórz instancję klasy Presentation, aby reprezentować plik PPTX.
with slides.Presentation() as presentation:
# Pobierz pierwszy slajd.
slide = presentation.slides[0]
# Dodaj obraz do kolekcji obrazów prezentacji.
with open("image.jpeg", "rb") as image_stream:
image = presentation.images.add_image(image_stream)
# Dodaj ramkę obrazu o rozmiarze obrazu.
picture_frame = slide.shapes.add_picture_frame(slides.ShapeType.RECTANGLE, 50, 50, image.width, image.height, image)
# Zastosuj formatowanie do ramki obrazu.
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
# Zapisz prezentację jako PPTX.
presentation.save("picture_formatting.pptx", slides.export.SaveFormat.PPTX)
Tip
Aspose opracowało darmowe narzędzie Collage Maker. Jeśli potrzebujesz połączyć obrazy JPG/JPEG lub PNG, albo utworzyć siatki zdjęć, możesz skorzystać z tej usługi.Dodawanie obrazów jako linki
Aby utrzymać mały rozmiar plików prezentacji, możesz dodawać obrazy lub filmy za pomocą linków zamiast osadzania ich bezpośrednio w prezentacji. Poniższy kod w Pythonie pokazuje, jak wstawić obraz i wideo do placeholdera:
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)
Przycinanie obrazów
W tej sekcji dowiesz się, jak przyciąć widoczny obszar obrazu w ramce obrazu bez zmiany pliku źródłowego. Poznasz także podstawową metodę stosowania marginesów przycinania, aby stworzyć czystą, wyśrodkowaną kompozycję bezpośrednio na slajdzie.
Poniższy kod w Pythonie pokazuje, jak przyciąć obraz na slajdzie:
import aspose.slides as slides
with slides.Presentation() as presentation:
slide = presentation.slides[0]
# Dodaj obraz do kolekcji obrazów prezentacji.
with slides.Images.from_file("image.png") as source_image:
image = presentation.images.add_image(source_image)
# Dodaj ramkę obrazu do slajdu.
picture_frame = slide.shapes.add_picture_frame(slides.ShapeType.RECTANGLE, 100, 100, 420, 250, image)
# Przytnij obraz (wartości procentowe).
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
# Zapisz wynik.
presentation.save("cropped_image.pptx", slides.export.SaveFormat.PPTX)
Usuwanie przyciętych obszarów obrazów
Jeśli chcesz usunąć przycięte obszary obrazu w ramce, użyj metody delete_picture_cropped_areas. Metoda ta zwraca przycięty obraz lub oryginalny, jeśli przycinanie nie jest wymagane.
Poniższy kod w Pythonie demonstruje tę operację:
import aspose.slides as slides
with slides.Presentation("sample.pptx") as presentation:
slide = presentation.slides[0]
# Pobierz ramkę obrazu z pierwszego slajdu.
picture_frame = slides.shape[0]
# Pobierz ramkę obrazu z pierwszego slajdu.
cropped_image = picture_frame.picture_format.delete_picture_cropped_areas()
# Zapisz wynik.
presentation.save("deleted_cropped_areas.pptx", slides.export.SaveFormat.PPTX)
NOTE
Metoda delete_picture_cropped_areas dodaje przycięty obraz do kolekcji obrazów prezentacji. Jeśli obraz jest używany wyłącznie w przetwarzanym PictureFrame, może to zmniejszyć rozmiar prezentacji; w przeciwnym razie liczba obrazów w wynikowej prezentacji może wzrosnąć.
Podczas przycinania metoda konwertuje pliki metafile WMF/EMF na rastrowy obraz PNG.
Kompresowanie obrazów
Możesz skompresować obraz w prezentacji, używając metody PictureFillFormat.compress_image. Metoda ta zmniejsza rozmiar obrazu na podstawie rozmiaru kształtu i określonej rozdzielczości, z opcją usunięcia przyciętych obszarów.
Działa analogicznie do funkcji PowerPoint Picture Format → Compress Pictures → Resolution.
Poniższe przykłady w Pythonie demonstrują, jak skompresować obraz w prezentacji, określając docelową rozdzielczość i opcjonalnie usuwając przycięte obszary:
import aspose.slides as slides
with slides.Presentation("demo.pptx") as presentation:
slide = presentation.slides[0]
picture_frame = slide.shapes[0]
# Skompresuj obraz do docelowej rozdzielczości 150 DPI (rozdzielczość internetowa) i usuń przycięte obszary.
result = picture_frame.picture_format.compress_image(True, slides.export.PicturesCompression.DPI150)
# Sprawdź wynik kompresji.
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)
lub bezpośrednio przy użyciu własnej wartości DPI:
import aspose.slides as slides
with slides.Presentation("demo.pptx") as presentation:
slide = presentation.slides[0]
picture_frame = slide.shapes[0]
# Skompresuj obraz do 150 DPI (rozdzielczość internetowa), usuwając przycięte obszary.
picture_frame.picture_format.compress_image(True, 150)
presentation.save("compressed_image.pptx", slides.export.SaveFormat.PPTX)
NOTE
Metoda konwertuje obraz do niższej rozdzielczości w oparciu o rozmiar kształtu i podane DPI. Przycięte fragmenty mogą być także usunięte w celu optymalizacji rozmiaru pliku. Jeśli obraz jest metafilem (WMF/EMF) lub SVG, kompresja nie zostanie zastosowana. Jakość JPEG jest zachowywana lub nieznacznie obniżana w zależności od rozdzielczości, podobnie jak w PowerPoint.Blokowanie proporcji
Jeśli chcesz, aby kształt zawierający obraz zachował proporcje po zmianie wymiarów obrazu, ustaw właściwość aspect_ratio_locked na True.
Poniższy kod w Pythonie pokazuje, jak zablokować proporcje kształtu:
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)
# Zablokuj proporcje przy zmianie rozmiaru.
picture_frame.picture_frame_lock.aspect_ratio_locked = True
presentation.save("aspect_ratio_locked.pptx", slides.export.SaveFormat.PPTX)
NOTE
Ustawienie Lock Aspect Ratio zachowuje tylko proporcje samego kształtu, a nie proporcje obrazu w nim umieszczonego.Użycie właściwości offsetu rozciągania
Korzystając z właściwości stretch_offset_left, stretch_offset_top, stretch_offset_right i stretch_offset_bottom klasy PictureFillFormat, możesz zdefiniować prostokąt wypełnienia.
Gdy określone jest rozciąganie obrazu, prostokąt źródłowy jest skalowany, aby pasował do prostokąta wypełnienia. Każda krawędź prostokąta wypełnienia jest określana przez procentowy offset od odpowiadającej krawędzi ramki kształtu. Dodatni procent oznacza wcięcie, ujemny – wystawienie.
- Utwórz instancję klasy Presentation.
- Pobierz referencję do slajdu po jego indeksie.
- Dodaj prostokątny AutoShape.
- Ustaw typ wypełnienia kształtu.
- Ustaw tryb wypełnienia obrazem kształtu.
- Wczytaj obraz.
- Przypisz obraz jako wypełnienie kształtu.
- Określ offsety obrazu względem odpowiednich krawędzi ramki kształtu.
- Zapisz prezentację jako plik PPTX.
Poniższy kod w Pythonie demonstruje użycie właściwości Stretch Offset:
import aspose.slides as slides
# Utwórz instancję klasy Presentation reprezentującą plik PPTX.
with slides.Presentation() as presentation:
# Pobierz pierwszy slajd.
slide = presentation.slides[0]
# Dodaj prostokątną AutoShape.
shape = slide.shapes.add_auto_shape(slides.ShapeType.RECTANGLE, 20, 20, 300, 300)
# Ustaw typ wypełnienia kształtu.
shape.fill_format.fill_type = slides.FillType.PICTURE
# Ustaw tryb wypełnienia obrazu kształtu.
shape.fill_format.picture_fill_format.picture_fill_mode = slides.PictureFillMode.STRETCH
# Wczytaj obraz i dodaj go do prezentacji.
with open("image.jpeg", "rb") as image_stream:
image = presentation.images.add_image(image_stream)
# Przypisz obraz jako wypełnienie kształtu.
shape.fill_format.picture_fill_format.picture.image = image
# Określ offsety obrazu względem odpowiednich krawędzi ramki ograniczającej kształt.
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
# Zapisz plik PPTX na dysku.
presentation.save("stretch_offset.pptx", slides.export.SaveFormat.PPTX)
Tip
Aspose udostępnia darmowe konwertery — JPEG to PowerPoint i PNG to PowerPoint — które pozwalają szybko tworzyć prezentacje z obrazów.FAQ
Jak mogę sprawdzić, które formaty obrazów są obsługiwane przez PictureFrame?
Aspose.Slides obsługuje zarówno obrazy rastrowe (PNG, JPEG, BMP, GIF itd.), jak i wektorowe (np. SVG) poprzez obiekt obrazu przypisany do PictureFrame. Lista obsługiwanych formatów zazwyczaj pokrywa się z możliwościami silnika konwersji slajdów i obrazów.
Jak dodanie dziesiątek dużych obrazów wpłynie na rozmiar i wydajność pliku PPTX?
Osadzanie dużych obrazów zwiększa rozmiar pliku i zużycie pamięci; linkowanie obrazów pomaga utrzymać niewielki rozmiar prezentacji, ale wymaga, aby pliki zewnętrzne pozostawały dostępne. Aspose.Slides umożliwia dodawanie obrazów jako linków w celu redukcji rozmiaru pliku.
Jak mogę zablokować obiekt obrazu przed przypadkowym przesunięciem/zmianą rozmiaru?
Użyj shape locks dla PictureFrame (np. wyłącz przesuwanie lub zmianę rozmiaru). Mechanizm blokady opisano w osobnym artykule o ochronie i jest wspierany dla różnych typów kształtów, w tym PictureFrame.
Czy wierność wektorowa SVG jest zachowana przy eksportowaniu prezentacji do PDF/obrazów?
Aspose.Slides umożliwia wyodrębnienie SVG z PictureFrame jako oryginalnego wektora. Przy eksporcie do PDF lub formatów rastrowych rezultat może zostać rasteryzowany w zależności od ustawień eksportu; fakt, że oryginalny SVG jest przechowywany jako wektor, potwierdzany jest zachowaniem przy wyodrębnianiu.