Aggiungere cornici di immagine alle presentazioni con Python
Introduzione
Le cornici di immagine in Aspose.Slides per Python consentono di posizionare e gestire immagini raster e vettoriali come forme native delle diapositive. È possibile inserire immagini da file o stream, posizionarle e ridimensionarle con coordinate precise, applicare rotazioni, impostare la trasparenza e controllare l’ordine Z insieme alle altre forme. L’API supporta anche il ritaglio, il mantenimento del rapporto d’aspetto, l’impostazione di bordi ed effetti e la sostituzione dell’immagine di base senza ricostruire il layout. Poiché le cornici di immagine si comportano come forme normali, è possibile aggiungere animazioni, collegamenti ipertestuali e testo alternativo, rendendo semplice creare presentazioni visivamente ricche e accessibili.
Creare cornici di immagine
Questa sezione mostra come inserire un’immagine in una diapositiva creando un PictureFrame con Aspose.Slides per Python. Imparerai come caricare l’immagine, posizionarla con precisione sulla diapositiva e controllarne dimensioni e formattazione.
- Crea un’istanza della classe Presentation.
- Ottieni una diapositiva per indice.
- Crea un PPImage aggiungendo l’immagine alla ImageCollection della presentazione. Questa immagine verrà usata per riempire la forma.
- Specifica la larghezza e l’altezza della cornice.
- Crea un PictureFrame di tale dimensione usando il metodo add_picture_frame.
- Salva la presentazione come file PPTX.
import aspose.slides as slides
# Istanziare la classe Presentation per rappresentare un file PPTX.
with slides.Presentation() as presentation:
# Ottieni la prima diapositiva.
slide = presentation.slides[0]
# Aggiungi l'immagine alla presentazione.
with open("image.jpeg", "rb") as image_stream:
image = presentation.images.add_image(image_stream)
# Aggiungi una cornice di immagine con le dimensioni dell'immagine.
picture_frame = slide.shapes.add_picture_frame(slides.ShapeType.RECTANGLE, 50, 50, image.width, image.height, image)
# Salva la presentazione come PPTX.
presentation.save("picture_frame.pptx", slides.export.SaveFormat.PPTX)
Creare cornici di immagine con scala relativa
Questa sezione dimostra come posizionare un’immagine a dimensione fissa, quindi applicare una scala basata su percentuale indipendentemente per larghezza e altezza. Poiché le percentuali possono differire, il rapporto d’aspetto può variare. La scala viene eseguita rispetto alle dimensioni originali dell’immagine.
- Crea un’istanza della classe Presentation.
- Ottieni una diapositiva per indice.
- Crea un PPImage aggiungendo l’immagine alla ImageCollection della presentazione.
- Aggiungi un PictureFrame alla diapositiva.
- Imposta la larghezza e l’altezza relativa della cornice di immagine.
- Salva la presentazione come file PPTX.
import aspose.slides as slides
# Istanziare la classe Presentation per rappresentare un file PPTX.
with slides.Presentation() as presentation:
# Ottieni la prima diapositiva.
slide = presentation.slides[0]
# Aggiungi l'immagine alla collezione di immagini della presentazione.
with open("image.jpeg", "rb") as image_stream:
image = presentation.images.add_image(image_stream)
# Aggiungi una cornice di immagine alla diapositiva.
picture_frame = slide.shapes.add_picture_frame(slides.ShapeType.RECTANGLE, 50, 50, 100, 100, image)
# Imposta la larghezza e l'altezza della scala relativa.
picture_frame.relative_scale_height = 0.8
picture_frame.relative_scale_width = 1.35
# Salva la presentazione.
presentation.save("relative_scaling.pptx", slides.export.SaveFormat.PPTX)
Estrarre immagini raster da cornici di immagine
Puoi estrarre immagini raster da oggetti PictureFrame e salvarle in PNG, JPG e altri formati. L’esempio di codice qui sotto dimostra come estrarre un’immagine dal documento “sample.pptx” e salvarla in formato 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)
Estrarre immagini SVG da cornici di immagine
Quando una presentazione contiene grafiche SVG posizionate all’interno di forme PictureFrame, Aspose.Slides per Python tramite .NET ti permette di recuperare le immagini vettoriali originali con piena fedeltà. Attraverso l’analisi della collezione di forme della diapositiva, puoi identificare ogni PictureFrame, verificare se la PPImage sottostante contiene contenuto SVG e quindi salvare quell’immagine su disco o su uno stream nel suo formato SVG nativo.
Il seguente esempio di codice dimostra come estrarre un’immagine SVG da una cornice di immagine:
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)
Ottenere la trasparenza dell’immagine
Aspose.Slides consente di recuperare l’effetto di trasparenza applicato a un’immagine. Questo codice Python dimostra l’operazione:
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))
Ottenere luminosità e contrasto di un’immagine
Aspose.Slides consente di recuperare l’effetto di luminosità e contrasto applicato a un’immagine. La classe Luminance rappresenta questo effetto di trasformazione dell’immagine.
Questo codice Python dimostra come ottenere le impostazioni di luminosità e contrasto da una cornice di immagine:
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))
Formattazione della cornice di immagine
Aspose.Slides fornisce molte opzioni di formattazione che puoi applicare a una cornice di immagine. Con queste opzioni, puoi regolare la cornice di immagine per soddisfare requisiti specifici.
- Crea un’istanza della classe Presentation.
- Ottieni una diapositiva per indice.
- Crea un PPImage aggiungendo l’immagine alla ImageCollection della presentazione. Questa immagine verrà usata per riempire la forma.
- Specifica la larghezza e l’altezza della cornice.
- Crea un PictureFrame di tale dimensione usando il metodo add_picture_frame della diapositiva.
- Imposta il colore della linea della cornice di immagine.
- Imposta la larghezza della linea della cornice di immagine.
- Ruota la cornice di immagine fornendo un valore positivo (in senso orario) o negativo (in senso antiorario).
- Salva la presentazione modificata come file PPTX.
import aspose.slides as slides
import aspose.pydrawing as draw
# Istanziare la classe Presentation per rappresentare un file PPTX.
with slides.Presentation() as presentation:
# Ottieni la prima diapositiva.
slide = presentation.slides[0]
# Aggiungi l'immagine alla collezione di immagini della presentazione.
with open("image.jpeg", "rb") as image_stream:
image = presentation.images.add_image(image_stream)
# Aggiungi una cornice di immagine con le dimensioni dell'immagine.
picture_frame = slide.shapes.add_picture_frame(slides.ShapeType.RECTANGLE, 50, 50, image.width, image.height, image)
# Applica la formattazione alla cornice di immagine.
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
# Salva la presentazione come PPTX.
presentation.save("picture_formatting.pptx", slides.export.SaveFormat.PPTX)
Tip
Aspose ha sviluppato un Collage Maker gratuito. Se hai bisogno di unire JPG/JPEG o immagini PNG, o di creare griglie fotografiche, puoi usare questo servizio.Aggiungere immagini come collegamenti
Per mantenere i file delle presentazioni di piccole dimensioni, puoi aggiungere immagini o video tramite collegamenti anziché incorporare i file direttamente nelle presentazioni. Il seguente codice Python mostra come inserire un’immagine e un video in un segnaposto:
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)
Ritagliare le immagini
In questa sezione imparerai a ritagliare l’area visibile di un’immagine all’interno di una cornice di immagine senza alterare il file sorgente. Imparerai anche il metodo base per applicare margini di ritaglio per creare una composizione pulita e focalizzata direttamente sulla diapositiva.
Il seguente codice Python mostra come ritagliare un’immagine su una diapositiva:
import aspose.slides as slides
with slides.Presentation() as presentation:
slide = presentation.slides[0]
# Aggiungi l'immagine alla collezione di immagini della presentazione.
with slides.Images.from_file("image.png") as source_image:
image = presentation.images.add_image(source_image)
# Aggiungi una cornice di immagine alla diapositiva.
picture_frame = slide.shapes.add_picture_frame(slides.ShapeType.RECTANGLE, 100, 100, 420, 250, image)
# Ritaglia l'immagine (valori percentuali).
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
# Salva il risultato.
presentation.save("cropped_image.pptx", slides.export.SaveFormat.PPTX)
Eliminare le aree ritagliate delle immagini
Se desideri eliminare le aree ritagliate di un’immagine in una cornice, usa il metodo delete_picture_cropped_areas. Questo metodo restituisce l’immagine ritagliata, o l’immagine originale se non è necessario alcun ritaglio.
Il seguente codice Python dimostra l’operazione:
import aspose.slides as slides
with slides.Presentation("sample.pptx") as presentation:
slide = presentation.slides[0]
# Ottieni la PictureFrame dalla prima diapositiva.
picture_frame = slides.shape[0]
# Ottieni la PictureFrame dalla prima diapositiva.
cropped_image = picture_frame.picture_format.delete_picture_cropped_areas()
# Salva il risultato.
presentation.save("deleted_cropped_areas.pptx", slides.export.SaveFormat.PPTX)
NOTE
Il metodo delete_picture_cropped_areas aggiunge l’immagine ritagliata alla collezione di immagini della presentazione. Se l’immagine è usata solo nella PictureFrame elaborata, ciò può ridurre le dimensioni della presentazione; altrimenti, il numero di immagini nella presentazione risultante può aumentare.
Durante il ritaglio, questo metodo converte i metafili WMF/EMF in un’immagine PNG raster.
Comprimere le immagini
Puoi comprimere un’immagine in una presentazione usando il metodo PictureFillFormat.compress_image. Questo metodo comprime un’immagine riducendone le dimensioni in base alla dimensione della forma e alla risoluzione specificata, con l’opzione di eliminare le aree ritagliate.
Regola la dimensione e la risoluzione dell’immagine in modo analogo alla funzionalità Formato immagine → Comprimi immagini → Risoluzione di PowerPoint.
I seguenti esempi Python mostrano come comprimere un’immagine in una presentazione specificando una risoluzione target e, facoltativamente, rimuovendo le aree ritagliate:
import aspose.slides as slides
with slides.Presentation("demo.pptx") as presentation:
slide = presentation.slides[0]
picture_frame = slide.shapes[0]
# Comprimi l'immagine con una risoluzione target di 150 DPI (risoluzione Web) e rimuovi le aree ritagliate.
result = picture_frame.picture_format.compress_image(True, slides.export.PicturesCompression.DPI150)
# Verifica il risultato della compressione.
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)
Oppure usando direttamente un valore DPI personalizzato:
import aspose.slides as slides
with slides.Presentation("demo.pptx") as presentation:
slide = presentation.slides[0]
picture_frame = slide.shapes[0]
# Comprimi l'immagine a 150 DPI (risoluzione web), rimuovendo le aree ritagliate.
picture_frame.picture_format.compress_image(True, 150)
presentation.save("compressed_image.pptx", slides.export.SaveFormat.PPTX)
NOTE
Il metodo converte l’immagine a una risoluzione inferiore basandosi sulle dimensioni della forma e sul DPI fornito. Le regioni ritagliate possono anche essere eliminate per ottimizzare le dimensioni del file. Se l’immagine è un metafile (WMF/EMF) o SVG, la compressione non verrà applicata. Inoltre, la qualità JPEG è preservata o leggermente ridotta in base alla risoluzione, similmente a quanto fa PowerPoint con JPEG ad alta risoluzione.Bloccare il rapporto d’aspetto
Se desideri che una forma contenente un’immagine mantenga il suo rapporto d’aspetto dopo aver modificato le dimensioni dell’immagine, imposta la proprietà aspect_ratio_locked su True.
Il seguente codice Python mostra come bloccare il rapporto d’aspetto di una forma:
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)
# Blocca il rapporto d'aspetto durante il ridimensionamento.
picture_frame.picture_frame_lock.aspect_ratio_locked = True
presentation.save("aspect_ratio_locked.pptx", slides.export.SaveFormat.PPTX)
NOTE
Questa impostazione Lock Aspect Ratio preserva solo il rapporto d’aspetto della forma, non il rapporto d’aspetto dell’immagine al suo interno.Utilizzare le proprietà Stretch Offset
Utilizzando le proprietà stretch_offset_left, stretch_offset_top, stretch_offset_right e stretch_offset_bottom della classe PictureFillFormat, è possibile definire un rettangolo di riempimento.
Quando viene specificata la tensione per un’immagine, il rettangolo sorgente viene scalato per adattarsi al rettangolo di riempimento. Ogni bordo del rettangolo di riempimento è definito da uno scostamento percentuale rispetto al bordo corrispondente della bounding box della forma. Una percentuale positiva specifica un rientro, mentre una percentuale negativa specifica un’estensione.
- Crea un’istanza della classe Presentation.
- Ottieni un riferimento a una diapositiva per indice.
- Aggiungi un AutoShape rettangolare.
- Imposta il tipo di riempimento della forma.
- Imposta la modalità di riempimento immagine della forma.
- Carica un’immagine.
- Assegna l’immagine per riempire la forma.
- Specifica gli offset dell’immagine rispetto ai bordi corrispondenti della bounding box della forma.
- Salva la presentazione come file PPTX.
import aspose.slides as slides
# Istanziare la classe Presentation che rappresenta un file PPTX.
with slides.Presentation() as presentation:
# Ottieni la prima diapositiva.
slide = presentation.slides[0]
# Aggiungi un AutoShape rettangolare.
shape = slide.shapes.add_auto_shape(slides.ShapeType.RECTANGLE, 20, 20, 300, 300)
# Imposta il tipo di riempimento della forma.
shape.fill_format.fill_type = slides.FillType.PICTURE
# Imposta la modalità di riempimento immagine della forma.
shape.fill_format.picture_fill_format.picture_fill_mode = slides.PictureFillMode.STRETCH
# Carica l'immagine e aggiungila alla presentazione.
with open("image.jpeg", "rb") as image_stream:
image = presentation.images.add_image(image_stream)
# Assegna l'immagine per riempire la forma.
shape.fill_format.picture_fill_format.picture.image = image
# Specifica gli offset dell'immagine rispetto ai bordi corrispondenti della bounding box della forma.
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
# Salva il file PPTX su disco.
presentation.save("stretch_offset.pptx", slides.export.SaveFormat.PPTX)
Tip
Aspose fornisce convertitori gratuiti—JPEG to PowerPoint e PNG to PowerPoint—che ti permettono di creare rapidamente presentazioni da immagini.FAQ
Come posso scoprire quali formati immagine sono supportati per PictureFrame?
Aspose.Slides supporta sia immagini raster (PNG, JPEG, BMP, GIF, ecc.) sia immagini vettoriali (ad esempio SVG) tramite l’oggetto immagine assegnato a una PictureFrame. L’elenco dei formati supportati si sovrappone generalmente alle capacità del motore di conversione di diapositive e immagini.
Come influisce l’aggiunta di decine di immagini grandi sulle dimensioni e sulle prestazioni del PPTX?
L’incorporamento di immagini grandi aumenta le dimensioni del file e l’uso della memoria; collegare le immagini aiuta a mantenere ridotte le dimensioni della presentazione ma richiede che i file esterni rimangano accessibili. Aspose.Slides offre la possibilità di aggiungere immagini tramite collegamento per ridurre le dimensioni del file.
Come posso bloccare un oggetto immagine per evitare spostamenti/ridimensionamenti accidentali?
Usa i shape locks per una PictureFrame (ad esempio, disabilita lo spostamento o il ridimensionamento). Il meccanismo di blocco è descritto per le forme in un articolo sulla protezione separato ed è supportato per vari tipi di forma, incluse le PictureFrame.
La fedeltà vettoriale SVG viene preservata quando si esporta una presentazione in PDF/immagini?
Aspose.Slides consente di estrarre un SVG da una PictureFrame come vettore originale. Quando si esporta in PDF o in formati raster, il risultato può essere rasterizzato a seconda delle impostazioni di esportazione; il fatto che l’SVG originale sia memorizzato come vettore è confermato dal comportamento di estrazione.