Marco de Imagen
Un marco de imagen es una forma que contiene una imagen; es como una imagen en un marco.
Puedes agregar una imagen a una diapositiva a través de un marco de imagen. De esta manera, puedes dar formato a la imagen formateando el marco de imagen.
Consejo
Aspose proporciona convertidores gratuitos—JPEG a PowerPoint y PNG a PowerPoint—que permiten a las personas crear presentaciones rápidamente a partir de imágenes.Crear Marco de Imagen
- Crea una instancia de la clase Presentation.
- Obtén la referencia de una diapositiva a través de su índice.
- Crea un objeto IPPImage agregando una imagen a la IImagescollection asociada con el objeto presentación que se utilizará para llenar la forma.
- Especifica el ancho y alto de la imagen.
- Crea un PictureFrame basado en el ancho y alto de la imagen a través del método
AddPictureFrame
expuesto por el objeto de forma asociado con la diapositiva referenciada. - Agrega un marco de imagen (conteniendo la imagen) a la diapositiva.
- Escribe la presentación modificada como un archivo PPTX.
Este código C++ muestra cómo crear un marco de imagen:
// La ruta al directorio de documentos.
const String outPath = u"../out/PictureFrameFormatting_out.pptx";
const String filePath = u"../templates/Tulips.jpg";
// Carga la presentación deseada
SharedPtr<Presentation> pres = MakeObject<Presentation>();
// Accede a la primera diapositiva
SharedPtr<ISlide> slide = pres->get_Slide(0);
// Carga la imagen que se añadirá en la colección de imágenes de la presentación
// Obtiene la imagen
auto image = Images::FromFile(filePath);
// Agrega una imagen a la colección de imágenes de la presentación
SharedPtr<IPPImage> imgx = pres->get_Images()->AddImage(image);
// Agrega un marco de imagen a la diapositiva
SharedPtr<IPictureFrame> pf = slide->get_Shapes()->AddPictureFrame(ShapeType::Rectangle, 50, 50, 100, 100, imgx);
// Establece la escala relativa de ancho y altura
pf->set_RelativeScaleHeight(0.8);
pf->set_RelativeScaleWidth(1.35);
// Aplica algún formato al PictureFrame
pf->get_LineFormat()->get_FillFormat()->set_FillType(FillType::Solid);
pf->get_LineFormat()->get_FillFormat()->get_SolidFillColor()->set_Color(Color::get_Blue());
pf->get_LineFormat()->set_Width ( 20);
pf->set_Rotation( 45);
// Escribe el archivo PPTX en el disco
pres->Save(outPath, Aspose::Slides::Export::SaveFormat::Pptx);
Crear Marco de Imagen con Escala Relativa
Al alterar la escala relativa de una imagen, puedes crear un marco de imagen más complicado.
- Crea una instancia de la clase Presentation.
- Obtén la referencia de una diapositiva a través de su índice.
- Agrega una imagen a la colección de imágenes de la presentación.
- Crea un objeto IPPImage agregando una imagen a la IImagescollection asociada con el objeto presentación que se utilizará para llenar la forma.
- Especifica el ancho y la altura relativa de la imagen en el marco de imagen.
- Escribe la presentación modificada como un archivo PPTX.
Este código C++ muestra cómo crear un marco de imagen con escala relativa:
// La ruta al directorio de documentos.
const String outPath = u"../out/AddRelativeScaleHeightPictureFrame_out.pptx";
const String filePath = u"../templates/Tulips.jpg";
// Carga la presentación deseada
SharedPtr<Presentation> pres = MakeObject<Presentation>();
// Accede a la primera diapositiva
SharedPtr<ISlide> slide = pres->get_Slide(0);
// Carga la imagen que se añadirá en la colección de imágenes de la presentación
// Obtiene la imagen
auto image = Images::FromFile(filePath);
// Agrega una imagen a la colección de imágenes de la presentación
SharedPtr<IPPImage> imgx = pres->get_Images()->AddImage(image);
// Agrega un marco de imagen a la diapositiva
SharedPtr<IPictureFrame> pf = slide->get_Shapes()->AddPictureFrame(ShapeType::Rectangle, 50, 50, 100, 100, imgx);
// Establece la escala relativa de ancho y altura
pf->set_RelativeScaleHeight (0.8);
pf->set_RelativeScaleWidth(1.35);
// Escribe el archivo PPTX en el disco
pres->Save(outPath, Aspose::Slides::Export::SaveFormat::Pptx);
Extraer Imagen del Marco de Imagen
Puedes extraer imágenes de objetos PictureFrame y guardarlas en formatos PNG, JPG y otros. El ejemplo de código a continuación demuestra cómo extraer una imagen del documento “sample.pptx” y guardarla en formato PNG.
auto presentation = MakeObject<Presentation>(u"sample.pptx");
auto firstSlide = presentation->get_Slide(0);
auto firstShape = firstSlide->get_Shape(0);
if (ObjectExt::Is<IPictureFrame>(firstShape))
{
auto pictureFrame = ExplicitCast<IPictureFrame>(firstShape);
auto image = pictureFrame->get_PictureFormat()->get_Picture()->get_Image()->get_SystemImage();
image->Save(u"slide_1_shape_1.png", ImageFormat::get_Png());
}
presentation->Dispose();
Obtener Transparencia de Imagen
Aspose.Slides te permite obtener la transparencia de una imagen. Este código C++ demuestra la operación:
auto presentation = System::MakeObject<Presentation>(u"Test.pptx");
auto pictureFrame = System::ExplicitCast<IPictureFrame>(presentation->get_Slide(0)->get_Shape(0));
auto imageTransform = pictureFrame->get_PictureFormat()->get_Picture()->get_ImageTransform();
for (auto&& effect : imageTransform)
{
if (System::ObjectExt::Is<IAlphaModulateFixed>(effect))
{
float transparencyValue = 100.0f - (System::ExplicitCast<IAlphaModulateFixed>(effect))->get_Amount();
System::Console::WriteLine(System::String(u"Transparencia de la imagen: ") + transparencyValue);
}
}
Formato de Marco de Imagen
Aspose.Slides proporciona muchas opciones de formato que se pueden aplicar a un marco de imagen. Usando esas opciones, puedes alterar un marco de imagen para hacerlo coincidir con requisitos específicos.
- Crea una instancia de la clase Presentation.
- Obtén la referencia de una diapositiva a través de su índice.
- Crea un objeto IPPImage agregando una imagen a la IImagescollection asociada con el objeto presentación que se utilizará para llenar la forma.
- Especifica el ancho y alto de la imagen.
- Crea un
PictureFrame
basado en el ancho y alto de la imagen a través del AddPictureFrame expuesto por el objeto IShapes asociado con la diapositiva referenciada. - Agrega el marco de imagen (conteniendo la imagen) a la diapositiva.
- Establece el color de línea del marco de imagen.
- Establece el ancho de línea del marco de imagen.
- Rota el marco de imagen dándole un valor positivo o negativo.
- Un valor positivo rota la imagen en sentido horario.
- Un valor negativo rota la imagen en sentido antihorario.
- Agrega el marco de imagen (conteniendo la imagen) a la diapositiva.
- Escribe la presentación modificada como un archivo PPTX.
Este código C++ demuestra el proceso de formateo de un marco de imagen:
// La ruta al directorio de documentos.
const String outPath = u"../out/AddRelativeScaleHeightPictureFrame_out.pptx";
const String filePath = u"../templates/Tulips.jpg";
// Carga la presentación deseada
SharedPtr<Presentation> pres = MakeObject<Presentation>();
// Accede a la primera diapositiva
SharedPtr<ISlide> slide = pres->get_Slides()->idx_get(0);
// Carga la imagen que se añadirá en la colección de imágenes de la presentación
// Obtiene la imagen
auto image = Images::FromFile(filePath);
// Agrega una imagen a la colección de imágenes de la presentación
SharedPtr<IPPImage> imgx = pres->get_Images()->AddImage(image);
// Agrega un marco de imagen a la diapositiva
SharedPtr<IPictureFrame> pf = slide->get_Shapes()->AddPictureFrame(ShapeType::Rectangle, 50, 50, 100, 100, imgx);
// Establece la escala relativa de ancho y altura
pf->set_RelativeScaleHeight (0.8);
pf->set_RelativeScaleWidth(1.35);
// Escribe el archivo PPTX en el disco
pres->Save(outPath, Aspose::Slides::Export::SaveFormat::Pptx);
Consejo
Aspose desarrolló recientemente un creador de collages gratuito. Si alguna vez necesitas fusionar JPG/JPEG o imágenes PNG, crear cuadrículas a partir de fotos, puedes usar este servicio.Agregar Imagen como Enlace
Para evitar tamaños de presentación grandes, puedes agregar imágenes (o videos) a través de enlaces en lugar de incrustar los archivos directamente en las presentaciones. Este código C++ muestra cómo agregar una imagen y un video en un marcador de posición:
auto presentation = System::MakeObject<Presentation>(u"input.pptx");
auto shapesToRemove = System::MakeObject<System::Collections::Generic::List<System::SharedPtr<IShape>>>();
auto shapes = presentation->get_Slides()->idx_get(0)->get_Shapes();
for (auto& autoShape : shapes)
{
if (autoShape->get_Placeholder() == nullptr)
continue;
switch (autoShape->get_Placeholder()->get_Type())
{
case Aspose::Slides::PlaceholderType::Picture:
{
auto pictureFrame = shapes->AddPictureFrame(Aspose::Slides::ShapeType::Rectangle, autoShape->get_X(), autoShape->get_Y(), autoShape->get_Width(), autoShape->get_Height(), nullptr);
pictureFrame->get_PictureFormat()->get_Picture()->set_LinkPathLong(u"https://upload.wikimedia.org/wikipedia/commons/3/3a/I.M_at_Old_School_Public_Broadcasting_in_October_2016_02.jpg");
shapesToRemove->Add(autoShape);
break;
}
case Aspose::Slides::PlaceholderType::Media:
{
auto videoFrame = shapes->AddVideoFrame(autoShape->get_X(), autoShape->get_Y(), autoShape->get_Width(), autoShape->get_Height(), u"");
videoFrame->get_PictureFormat()->get_Picture()->set_LinkPathLong(u"https://upload.wikimedia.org/wikipedia/commons/3/3a/I.M_at_Old_School_Public_Broadcasting_in_October_2016_02.jpg");
videoFrame->set_LinkPathLong(u"https://youtu.be/t_1LYZ102RA");
shapesToRemove->Add(autoShape);
break;
}
}
}
for (auto& shape : shapesToRemove)
{
shapes->Remove(shape);
}
presentation->Save(u"output.pptx", Aspose::Slides::Export::SaveFormat::Pptx);
Recortar Imagen
Este código C++ muestra cómo recortar una imagen existente en una diapositiva:
using namespace Aspose::Slides;
using namespace Aspose::Slides::Export;
using namespace System::Drawing;
auto presentation = System::MakeObject<Presentation>();
// Crea un nuevo objeto de imagen
auto newImage = presentation->get_Images()->AddImage(Images::FromFile(imagePath));
// Agrega un PictureFrame a una Diapositiva
auto picFrame = presentation->get_Slides()->idx_get(0)->get_Shapes()->AddPictureFrame(Aspose::Slides::ShapeType::Rectangle, 100.0f, 100.0f, 420.0f, 250.0f, newImage);
// Recorta la imagen (valores en porcentaje)
picFrame->get_PictureFormat()->set_CropLeft(23.6f);
picFrame->get_PictureFormat()->set_CropRight(21.5f);
picFrame->get_PictureFormat()->set_CropTop(3.0f);
picFrame->get_PictureFormat()->set_CropBottom(31.0f);
// Guarda el resultado
presentation->Save(outPptxFile, Aspose::Slides::Export::SaveFormat::Pptx);
Eliminar Áreas Recortadas de la Imagen
Si deseas eliminar las áreas recortadas de una imagen contenida en un marco, puedes usar el método IPictureFillFormat::DeletePictureCroppedAreas(). Este método devuelve la imagen recortada o la imagen original si el recorte no es necesario.
Este código C++ demuestra la operación:
System::SharedPtr<Presentation> presentation = System::MakeObject<Presentation>(u"PictureFrameCrop.pptx");
System::SharedPtr<ISlide> slide = presentation->get_Slide(0);
// Obtiene el PictureFrame de la primera diapositiva
System::SharedPtr<IPictureFrame> picFrame = System::AsCast<IPictureFrame>(slide->get_Shape(0));
// Elimina las áreas recortadas de la imagen del PictureFrame y devuelve la imagen recortada
System::SharedPtr<IPPImage> croppedImage = picFrame->get_PictureFormat()->DeletePictureCroppedAreas();
// Guarda el resultado
presentation->Save(u"PictureFrameDeleteCroppedAreas.pptx", SaveFormat::Pptx);
NOTA
El método IPictureFillFormat::DeletePictureCroppedAreas() agrega la imagen recortada a la colección de imágenes de la presentación. Si la imagen solo se usa en el PictureFrame procesado, esta configuración puede reducir el tamaño de la presentación. De lo contrario, el número de imágenes en la presentación resultante aumentará.
Este método convierte archivos WMF/EMF a imágenes PNG rasterizadas en la operación de recorte.
Bloquear la Relación de Aspecto
Si deseas que una forma que contenga una imagen mantenga su relación de aspecto incluso después de cambiar las dimensiones de la imagen, puedes usar el método set_AspectRatioLocked() para establecer la configuración Bloquear Relación de Aspecto.
Este código C++ muestra cómo bloquear la relación de aspecto de una forma:
System::SharedPtr<Presentation> pres = System::MakeObject<Presentation>(u"pres.pptx");
System::SharedPtr<ILayoutSlide> layout = pres->get_LayoutSlides()->GetByType(SlideLayoutType::Custom);
System::SharedPtr<ISlide> emptySlide = pres->get_Slides()->AddEmptySlide(layout);
System::SharedPtr<IImage> image = Images::FromFile(u"image.png");
System::SharedPtr<IPPImage> presImage = pres->get_Images()->AddImage(image);
System::SharedPtr<IPictureFrame> pictureFrame = emptySlide->get_Shapes()->AddPictureFrame(ShapeType::Rectangle, 50.0f, 150.0f, static_cast<float>(presImage->get_Width()), static_cast<float>(presImage->get_Height()), presImage);
// establece la forma para preservar la relación de aspecto al cambiar el tamaño
pictureFrame->get_PictureFrameLock()->set_AspectRatioLocked(true);
NOTA
Esta configuración Bloquear Relación de Aspecto solo preserva la relación de aspecto de la forma y no de la imagen que contiene.Usar Propiedad StretchOff
Utilizando las propiedades StretchOffsetLeft, StretchOffsetTop, StretchOffsetRight y StretchOffsetBottom de la interfaz IPictureFillFormat y la clase PictureFillFormat, puedes especificar un rectángulo de relleno.
Cuando se especifica el estiramiento de una imagen, un rectángulo fuente se escala para ajustarse al rectángulo de relleno especificado. Cada lado del rectángulo de relleno se define por un desplazamiento porcentual desde el lado correspondiente del cuadro delimitador de la forma. Un porcentaje positivo especifica un inseto. Un porcentaje negativo especifica un outset.
- Crea una instancia de la clase Presentation.
- Obtén la referencia de una diapositiva a través de su índice.
- Agrega un rectángulo
AutoShape
. - Crea una imagen.
- Establece el tipo de relleno de la forma.
- Establece el modo de relleno de imagen de la forma.
- Agrega una imagen establecida para llenar la forma.
- Especifica los desplazamientos de la imagen desde el borde correspondiente del cuadro delimitador de la forma.
- Escribe la presentación modificada como un archivo PPTX.
Este código C++ demuestra un proceso en el que se usa una propiedad StretchOff:
auto pres = System::MakeObject<Presentation>();
auto ppImage = pres->get_Images()->AddImage(Images::FromFile(u"image.png"));
auto slide = pres->get_Slide(0);
auto pictureFrame = slide->get_Shapes()->AddPictureFrame(ShapeType::Rectangle, 10.0f, 10.0f, 400.0f, 400.0f, ppImage);
// Establece la imagen estirada desde cada lado en el cuerpo de la forma
auto pictureFormat = pictureFrame->get_PictureFormat();
pictureFormat->set_PictureFillMode(PictureFillMode::Stretch);
pictureFormat->set_StretchOffsetLeft(24.0f);
pictureFormat->set_StretchOffsetRight(24.0f);
pictureFormat->set_StretchOffsetTop(24.0f);
pictureFormat->set_StretchOffsetBottom(24.0f);
pres->Save(u"imageStretch.pptx", SaveFormat::Pptx);