Otimizar o Gerenciamento de Imagens em Apresentações Usando C++
Introdução
Imagens tornam as apresentações mais envolventes e interessantes. No Microsoft PowerPoint, você pode inserir imagens de um arquivo, da internet ou de outros locais nos slides. De forma semelhante, o Aspose.Slides permite que você adicione imagens aos slides em suas apresentações por meio de diferentes procedimentos.
Tip
A Aspose fornece conversores gratuitos—JPEG para PowerPoint e PNG para PowerPoint—que permitem que as pessoas criem apresentações rapidamente a partir de imagens.Info
Se você quiser adicionar uma imagem como objeto de moldura — especialmente se pretende usar opções de formatação padrão nela para alterar seu tamanho, adicionar efeitos etc. — veja Moldura de Imagem.Note
Você pode manipular operações de entrada/saída envolvendo imagens e apresentações PowerPoint para converter uma imagem de um formato para outro. Veja estas páginas: converter imagem para JPG; converter JPG para imagem; converter JPG para PNG, converter PNG para JPG; converter PNG para SVG, converter SVG para PNG.O Aspose.Slides suporta operações com imagens nesses formatos populares: JPEG, PNG, GIF e outros.
Adicionar Imagens Armazenadas Localmente aos Slides
Você pode adicionar uma ou várias imagens do seu computador a um slide em uma apresentação. Este código de exemplo em C++ mostra como adicionar uma imagem a um slide:
auto pres = System::MakeObject<Presentation>();
auto slide = pres->get_Slides()->idx_get(0);
auto image = pres->get_Images()->AddImage(File::ReadAllBytes(u"image.png"));
slide->get_Shapes()->AddPictureFrame(ShapeType::Rectangle, 10.0f, 10.0f, 100.0f, 100.0f, image);
pres->Save(u"pres.pptx", SaveFormat::Pptx);
Adicionar Imagens da Web aos Slides
Se a imagem que você deseja adicionar a um slide não estiver disponível no seu computador, você pode adicioná‑la diretamente da web.
Este código de exemplo mostra como adicionar uma imagem da web a um slide em C++:
auto pres = System::MakeObject<Presentation>();
auto slide = pres->get_Slides()->idx_get(0);
auto webClient = System::MakeObject<WebClient>();
auto imageData = webClient->DownloadData(System::MakeObject<Uri>(u"[REPLACE WITH URL]"));
auto image = pres->get_Images()->AddImage(imageData);
slide->get_Shapes()->AddPictureFrame(ShapeType::Rectangle, 10.0f, 10.0f, 100.0f, 100.0f, image);
pres->Save(u"pres.pptx", SaveFormat::Pptx);
Adicionar Imagens aos Mestres de Slides
Um mestre de slides é o slide principal que armazena e controla informações (tema, layout etc.) sobre todos os slides abaixo dele. Assim, quando você adiciona uma imagem a um mestre de slides, essa imagem aparece em todos os slides sob esse mestre.
Este código de exemplo em C++ mostra como adicionar uma imagem a um mestre de slides:
auto pres = System::MakeObject<Presentation>();
auto slide = pres->get_Slides()->idx_get(0);
auto masterSlide = slide->get_LayoutSlide()->get_MasterSlide();
auto image = pres->get_Images()->AddImage(File::ReadAllBytes(u"image.png"));
masterSlide->get_Shapes()->AddPictureFrame(ShapeType::Rectangle, 10.0f, 10.0f, 100.0f, 100.0f, image);
pres->Save(u"pres.pptx", SaveFormat::Pptx);
Adicionar Imagens como Fundo de Slides
Você pode decidir usar uma imagem como fundo para um slide específico ou vários slides. Nesse caso, você deve ver Definindo Imagens como Fundos para Slides.
Adicionar SVG a Apresentações
Você pode adicionar ou inserir qualquer imagem em uma apresentação usando o método AddPictureFrame que pertence à interface IShapeCollection.
Para criar um objeto de imagem baseado em uma imagem SVG, você pode fazer da seguinte maneira:
- Criar objeto SvgImage para inseri‑lo na ImageShapeCollection
- Criar objeto PPImage a partir de ISvgImage
- Criar objeto PictureFrame usando a interface IPPImage
Este código de exemplo mostra como implementar as etapas acima para adicionar uma imagem SVG em uma apresentação:
// O caminho para o diretório de documentos
System::String dataDir = u"D:\\Documents\\";
// Nome do arquivo SVG de origem
System::String svgFileName = dataDir + u"sample.svg";
// Nome do arquivo de saída da apresentação
System::String outPptxPath = dataDir + u"presentation.pptx";
// Criar nova apresentação
auto p = System::MakeObject<Presentation>();
// Ler o conteúdo do arquivo SVG
System::String svgContent = File::ReadAllText(svgFileName);
// Criar objeto SvgImage
System::SharedPtr<ISvgImage> svgImage = System::MakeObject<SvgImage>(svgContent);
// Criar objeto PPImage
System::SharedPtr<IPPImage> ppImage = p->get_Images()->AddImage(svgImage);
// Cria um novo PictureFrame
p->get_Slides()->idx_get(0)->get_Shapes()->AddPictureFrame(ShapeType::Rectangle, 200.0f, 100.0f, static_cast<float>(ppImage->get_Width()), static_cast<float>(ppImage->get_Height()), ppImage);
// Salvar apresentação no formato PPTX
p->Save(outPptxPath, SaveFormat::Pptx);
Converter SVG para um Conjunto de Formas
A conversão de SVG para um conjunto de formas do Aspose.Slides é semelhante à funcionalidade do PowerPoint usada para trabalhar com imagens SVG:

A funcionalidade é fornecida por uma das sobrecargas do método AddGroupShape da interface IShapeCollection que aceita um objeto ISvgImage como primeiro argumento.
Este código de exemplo mostra como usar o método descrito para converter um arquivo SVG em um conjunto de formas:
// O caminho para o diretório de documentos
System::String dataDir = u"D:\\Documents\\";
// Nome do arquivo SVG de origem
System::String svgFileName = dataDir + u"sample.svg";
// Nome do arquivo de saída da apresentação
System::String outPptxPath = dataDir + u"presentation.pptx";
// Criar nova apresentação
System::SharedPtr<IPresentation> presentation = System::MakeObject<Presentation>();
// Ler o conteúdo do arquivo SVG
System::String svgContent = File::ReadAllText(svgFileName);
// Criar objeto SvgImage
System::SharedPtr<ISvgImage> svgImage = System::MakeObject<SvgImage>(svgContent);
// Obter tamanho do slide
System::Drawing::SizeF slideSize = presentation->get_SlideSize()->get_Size();
// Converter a imagem SVG em um grupo de formas dimensionando-a ao tamanho do slide
presentation->get_Slides()->idx_get(0)->get_Shapes()->AddGroupShape(svgImage, 0.f, 0.f, slideSize.get_Width(), slideSize.get_Height());
// Salvar a apresentação no formato PPTX
presentation->Save(outPptxPath, SaveFormat::Pptx);
Adicionar Imagens como EMF aos Slides
O Aspose.Slides for C++ permite gerar imagens EMF a partir de planilhas Excel e adicionar as imagens como EMF em slides com o Aspose.Cells.
Este código de exemplo mostra como executar a tarefa descrita:
System::String dataDir = u"D:\\Documents\\";
StringPtr cellsXls = new String(dataDir.ToWCS().c_str());
cellsXls->Append(L"chart.xls");
intrusive_ptr<Aspose::Cells::IWorkbook> book = Aspose::Cells::Factory::CreateIWorkbook(cellsXls);
intrusive_ptr<Aspose::Cells::IWorksheet> sheet = book->GetIWorksheets()->GetObjectByIndex(0);
intrusive_ptr<Aspose::Cells::Rendering::IImageOrPrintOptions> options = Aspose::Cells::Factory::CreateIImageOrPrintOptions();
options->SetHorizontalResolution(200);
options->SetVerticalResolution(200);
options->SetImageFormat(Aspose::Cells::Systems::Drawing::Imaging::ImageFormat::GetEmf());
// Save the workbook to stream
intrusive_ptr<Aspose::Cells::Rendering::ISheetRender> sr = Aspose::Cells::Factory::CreateISheetRender(sheet, options);
System::SharedPtr<Presentation> pres = System::MakeObject<Presentation>();
pres->get_Slides()->RemoveAt(0);
System::String EmfSheetName;
for (int32_t j = 0; j < sr->GetPageCount(); j++)
{
EmfSheetName = dataDir + u"test" + System::String::FromWCS(sheet->GetName()->value()) + u" Page" + (j + 1) + u".out.emf";
sr->ToImage(j, new String(EmfSheetName.ToWCS().c_str()));
auto bytes = System::IO::File::ReadAllBytes(EmfSheetName);
auto emfImage = pres->get_Images()->AddImage(bytes);
System::SharedPtr<ISlide> slide = pres->get_Slides()->AddEmptySlide(pres->get_LayoutSlides()->GetByType(SlideLayoutType::Blank));
auto slideSize = pres->get_SlideSize()->get_Size();
slide->get_Shapes()->AddPictureFrame(ShapeType::Rectangle, 0.0f, 0.0f, slideSize.get_Width(), slideSize.get_Height(), emfImage);
}
pres->Save(dataDir + u"Saved.pptx", SaveFormat::Pptx);
Substituir Imagens na Coleção de Imagens
O Aspose.Slides permite substituir imagens armazenadas na coleção de imagens de uma apresentação (incluindo as usadas por formas de slide). Esta seção mostra várias abordagens para atualizar imagens na coleção. A API fornece métodos simples para substituir uma imagem usando dados brutos em bytes, uma instância de IImage, ou outra imagem que já exista na coleção.
Siga as etapas abaixo:
- Carregue o arquivo de apresentação que contém imagens usando a classe Presentation.
- Carregue uma nova imagem de um arquivo em um array de bytes.
- Substitua a imagem alvo pela nova imagem usando o array de bytes.
- Na segunda abordagem, carregue a imagem em um objeto IImage e substitua a imagem alvo por esse objeto.
- Na terceira abordagem, substitua a imagem alvo por uma imagem que já exista na coleção de imagens da apresentação.
- Grave a apresentação modificada como um arquivo PPTX.
// Instanciar a classe Presentation que representa um arquivo de apresentação.
auto presentation = MakeObject<Presentation>(u"sample.pptx");
// A primeira maneira.
auto imageData = File::ReadAllBytes(u"image0.jpeg");
auto oldImage = presentation->get_Image(0);
oldImage->ReplaceImage(imageData);
// A segunda maneira.
auto newImage = Images::FromFile(u"image1.png");
oldImage = presentation->get_Image(1);
oldImage->ReplaceImage(newImage);
newImage->Dispose();
// A terceira maneira.
oldImage = presentation->get_Image(2);
oldImage->ReplaceImage(presentation->get_Image(3));
// Salvar a apresentação em um arquivo.
presentation->Save(u"output.pptx", SaveFormat::Pptx);
presentation->Dispose();
Info
Usando o conversor GRATUITO Aspose Text to GIF, você pode animar textos facilmente, criar GIFs a partir de textos, etc.FAQ
A resolução original da imagem permanece intacta após a inserção?
Sim. Os pixels originais são preservados, mas a aparência final depende de como a picture é dimensionada no slide e de qualquer compressão aplicada ao salvar.
Qual a melhor forma de substituir o mesmo logotipo em dezenas de slides de uma só vez?
Coloque o logotipo no mestre de slides ou em um layout e substitua‑lo na coleção de imagens da apresentação — as atualizações se propagarão para todos os elementos que utilizam esse recurso.
Um SVG inserido pode ser convertido em formas editáveis?
Sim. Você pode converter um SVG em um grupo de formas, após o que as partes individuais tornam‑se editáveis com as propriedades padrão de forma.
Como posso definir uma imagem como fundo para vários slides de uma só vez?
Atribua a imagem como fundo no mestre de slides ou no layout relevante — todos os slides que utilizarem esse mestre/layout herdarão o fundo.
Como impedir que a apresentação “infle” de tamanho por causa de muitas imagens?
Reutilize um único recurso de imagem em vez de duplicatas, escolha resoluções adequadas, aplique compressão ao salvar e mantenha os gráficos repetidos no mestre quando apropriado.