Lavorare con le immagini

Aspose.Words consente agli utenti di lavorare con le immagini in modo molto flessibile. In questo articolo puoi esplorare solo alcune delle possibilità di lavorare con le immagini.

Inserimento di un’immagine

DocumentBuilder fornisce diversi sovraccarichi del metodo insert_image che consente di inserire un’immagine in linea o mobile. Se l’immagine è un metafile EMF o WMF, verrà inserita nel documento in formato metafile. Tutte le altre immagini verranno archiviate in formato PNG. Il metodo inserisci_immagine può utilizzare immagini provenienti da diverse fonti:

  • Da un file o URL passando un parametro stringa
  • Da uno stream passando un parametro Stream
  • Da un array di byte passando un parametro di array di byte

Per ognuno dei metodi inserisci_immagine sono presenti ulteriori sovraccarichi che permettono di inserire un’immagine con le seguenti opzioni:

  • In linea o mobile in una posizione specifica, ad esempio inserisci_immagine
  • Scala percentuale o dimensione personalizzata; inoltre il metodo DocumentBuilder.insert_image restituisce un oggetto Shape appena creato e inserito per poter modificare ulteriormente le proprietà del Shape

Inserimento di un’immagine in linea

Passa una singola stringa che rappresenta un file che contiene l’immagine a insert_image per inserire l’immagine nel documento come elemento grafico in linea.

L’esempio di codice seguente mostra come inserire un’immagine in linea nella posizione del cursore in un documento:

doc = aw.Document()
builder = aw.DocumentBuilder(doc)

builder.insert_image(docs_base.images_dir + "Logo.jpg")

doc.save(docs_base.artifacts_dir+"WorkingWithImages.document_builder_insert_inline_image.doc")

Inserimento di un’immagine mobile (posizionata in modo assoluto)

L’esempio di codice seguente mostra come inserire un’immagine mobile da un file o URL in una posizione e dimensione specificate:

doc = aw.Document()
builder = aw.DocumentBuilder(doc)

builder.insert_image(docs_base.images_dir + "Logo.jpg",
    aw.drawing.RelativeHorizontalPosition.MARGIN,
    100,
    aw.drawing.RelativeVerticalPosition.MARGIN,
    100,
    200,
    100,
    aw.drawing.WrapType.SQUARE)

doc.save(docs_base.artifacts_dir+"WorkingWithImages.document_builder_insert_floating_image.doc")

Come estrarre immagini da un documento

Tutte le immagini sono archiviate all’interno dei nodi Shape in un Document. Per estrarre tutte le immagini o le immagini di tipo specifico dal documento, attenersi alla seguente procedura:

  • Utilizzare il metodo Document.get_child_nodes per selezionare tutti i nodi Shape.
  • Iterare attraverso le raccolte di nodi risultanti.
  • Controlla la proprietà booleana Shape.has_image.
  • Estrai i dati dell’immagine utilizzando la proprietà Shape.image_data.
  • Salvare i dati dell’immagine in un file.

Il seguente esempio di codice mostra come estrarre immagini da un documento e salvarle come file:

È possibile scaricare il file modello di questo esempio da Qui.

Come inserire il codice a barre su ogni pagina di un documento

Questo esempio dimostra come aggiungere codici a barre uguali o diversi su tutte o su pagine specifiche di un documento Word. Non esiste un modo diretto per aggiungere codici a barre su tutte le pagine di un documento ma puoi utilizzare i metodi move_to_section, move_to_header_footer e insert_image per spostarti in qualsiasi sezione o intestazione/piè di pagina e inserire le immagini del codice a barre come puoi vedere nel codice seguente.

L’esempio di codice seguente inserisce un’immagine del codice a barre in ogni pagina di un documento.

Blocca le proporzioni dell’immagine

Le proporzioni di una forma geometrica sono il rapporto tra le sue dimensioni in diverse dimensioni. È possibile bloccare le proporzioni dell’immagine utilizzando aspect_ratio_locked. Il valore predefinito delle proporzioni della forma dipende dal ShapeType. È True per ShapeType.IMAGE e False per altri tipi di forma.

Il seguente esempio di codice mostra come lavorare con le proporzioni:

doc = aw.Document()
builder = aw.DocumentBuilder(doc)

shape = builder.insert_image(docs_base.images_dir + "Logo.jpg")
shape.aspect_ratio_locked = False

doc.save(docs_base.artifacts_dir+"WorkingWithImages.set_aspect_ratio_locked.doc")

Come ottenere limiti effettivi di forma in punti

Se desideri che il riquadro di delimitazione effettivo della forma venga visualizzato sulla pagina, puoi ottenerlo utilizzando la proprietà bounds_in_points.

L’esempio di codice seguente mostra come utilizzare questa proprietà:

doc = aw.Document()
builder = aw.DocumentBuilder(doc)

shape = builder.insert_image(docs_base.images_dir + "Logo.jpg")
shape.aspect_ratio_locked = False

print("\nGets the actual bounds of the shape in points.")
rect = shape.get_shape_renderer().bounds_in_points
print(f"{rect.x}, {rect.y}, {rect.width}, {rect.height}")

Ritaglia immagini

Il ritaglio di un’immagine si riferisce solitamente alla rimozione delle parti esterne indesiderate di un’immagine per migliorare l’inquadratura. Viene utilizzato anche per rimuovere alcune porzioni di un’immagine per aumentare la messa a fuoco su un’area particolare.

L’esempio di codice seguente mostra come ottenere questo risultato utilizzando Aspose.Words API:

# The path to the documents directory.
inputPath = docs_base.images_dir + "Logo.jpg"
outputPath = docs_base.artifacts_dir + "cropped_logo.jpg"

self.crop_image(inputPath,outputPath, 100, 90, 200, 200)
@staticmethod
def crop_image(inPath : str, outPath : str, left : int, top : int, width : int, height : int) :
    
    doc = aw.Document();
    builder = aw.DocumentBuilder(doc)
    
    croppedImage = builder.insert_image(inPath)
    
    src_width_points = croppedImage.width
    src_height_points = croppedImage.height
    
    croppedImage.width = aw.ConvertUtil.pixel_to_point(width)
    croppedImage.height = aw.ConvertUtil.pixel_to_point(height)
    
    widthRatio = croppedImage.width / src_width_points
    heightRatio = croppedImage.height / src_height_points
    
    if (widthRatio< 1) :
        croppedImage.image_data.crop_right = 1 - widthRatio
    
    if (heightRatio< 1) :
        croppedImage.image_data.crop_bottom = 1 - heightRatio
    
    leftToWidth = aw.ConvertUtil.pixel_to_point(left) / src_width_points
    topToHeight = aw.ConvertUtil.pixel_to_point(top) / src_height_points
    
    croppedImage.image_data.crop_left = leftToWidth
    croppedImage.image_data.crop_right = croppedImage.image_data.crop_right - leftToWidth
    
    croppedImage.image_data.crop_top = topToHeight
    croppedImage.image_data.crop_bottom = croppedImage.image_data.crop_bottom - topToHeight
    
    croppedImage.get_shape_renderer().save(outPath, aw.saving.ImageSaveOptions(aw.SaveFormat.JPEG))

Salvataggio di immagini come WMF

Aspose.Words fornisce funzionalità per salvare tutte le immagini disponibili in un documento in formato WMF durante la conversione di DOCX in RTF.

Il seguente esempio di codice mostra come salvare le immagini come WMF con le opzioni di salvataggio RTF: