Trabajar con imágenes

Aspose.Words permite a los usuarios trabajar con imágenes de una forma muy flexible. En este artículo, puedes explorar sólo algunas de las posibilidades de trabajar con imágenes.

Insertar una imagen

DocumentBuilder proporciona varias sobrecargas del método insert_image que le permiten insertar una imagen en línea o flotante. Si la imagen es un metarchivo EMF o WMF, se insertará en el documento en formato de metarchivo. Todas las demás imágenes se almacenarán en formato PNG. El método insertar imagen puede utilizar imágenes de diferentes fuentes:

  • Desde un archivo o URL pasando un parámetro de cadena
  • Desde una secuencia pasando un parámetro Stream
  • Desde una matriz de bytes pasando un parámetro de matriz de bytes

Para cada uno de los métodos insertar imagen, existen más sobrecargas que le permiten insertar una imagen con las siguientes opciones:

  • En línea o flotante en una posición específica, por ejemplo, insertar imagen
  • Escala porcentual o tamaño personalizado; Además, el método DocumentBuilder.insert_image devuelve un objeto Shape que acaba de crearse e insertarse para que pueda modificar aún más las propiedades del Shape.

Insertar una imagen en línea

Pase una sola cadena que represente un archivo que contenga la imagen a insert_image para insertar la imagen en el documento como un gráfico en línea.

El siguiente ejemplo de código muestra cómo insertar una imagen en línea en la posición del cursor en 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")

Insertar una imagen flotante (absolutamente posicionada)

El siguiente ejemplo de código muestra cómo insertar una imagen flotante desde un archivo o URL en una posición y tamaño específicos:

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")

Cómo extraer imágenes de un documento

Todas las imágenes se almacenan dentro de nodos Shape en un Document. Para extraer todas las imágenes o imágenes que tengan un tipo específico del documento, siga estos pasos:

  • Utilice el método Document.get_child_nodes para seleccionar todos los nodos Shape.
  • Iterar a través de las colecciones de nodos resultantes.
  • Verifique la propiedad booleana Shape.has_image.
  • Extraer datos de imágenes utilizando la propiedad Shape.image_data.
  • Guardar datos de imagen en un archivo.

El siguiente ejemplo de código muestra cómo extraer imágenes de un documento y guardarlas como archivos:

Puede descargar el archivo de plantilla de este ejemplo desde aquí.

Cómo insertar un código de barras en cada página de un documento

Este ejemplo le muestra cómo agregar códigos de barras iguales o diferentes en todas o en páginas específicas de un documento de Word. No existe una forma directa de agregar códigos de barras en todas las páginas de un documento, pero puede usar los métodos move_to_section, move_to_header_footer y insert_image para moverse a cualquier sección o encabezados/pies de página e insertar las imágenes de códigos de barras como puede ver en el siguiente código.

El siguiente ejemplo de código inserta una imagen de código de barras en cada página de un documento.

Bloquear relación de aspecto de la imagen

La relación de aspecto de una forma geométrica es la relación de sus tamaños en diferentes dimensiones. Puede bloquear la relación de aspecto de la imagen usando aspect_ratio_locked. El valor predeterminado de la relación de aspecto de la forma depende del ShapeType. Es True para ShapeType.IMAGE y False para otros tipos de formas.

El siguiente ejemplo de código muestra cómo trabajar con la relación de aspecto:

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")

Cómo obtener límites reales de forma en puntos

Si desea que el cuadro delimitador real de la forma se represente en la página, puede lograrlo utilizando la propiedad bounds_in_points.

El siguiente ejemplo de código muestra cómo utilizar esta propiedad:

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}")

Recortar imágenes

El recorte de una imagen generalmente se refiere a la eliminación de las partes exteriores no deseadas de una imagen para ayudar a mejorar el encuadre. También se utiliza para eliminar algunas partes de una imagen para aumentar el enfoque en un área particular.

El siguiente ejemplo de código muestra cómo lograr esto usando 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))

Guardar imágenes como WMF

Aspose.Words proporciona funcionalidad para guardar todas las imágenes disponibles en un documento en formato WMF mientras convierte DOCX a RTF.

El siguiente ejemplo de código muestra cómo guardar imágenes como WMF con opciones de guardado RTF: