在 .NET 中優化簡報的圖像管理
簡介
圖像使簡報更具吸引力和趣味性。在 Microsoft PowerPoint 中,您可以從檔案、網際網路或其他位置將圖片插入投影片。類似地,Aspose.Slides 允許您通過不同的方式將圖像添加到簡報的投影片中。
Info
如果您想將圖像作為框架物件添加——尤其是計畫使用標準格式化選項變更其大小、添加效果等——請參閱 圖片框架。Note
您可以操作涉及圖像和 PowerPoint 簡報的輸入/輸出,以將圖像從一種格式轉換為另一種格式。請參閱以下頁面:轉換 圖像至 JPG; 轉換 JPG 至圖像; 轉換 JPG 至 PNG, 轉換 PNG 至 JPG; 轉換 PNG 至 SVG, 轉換 SVG 至 PNG.Aspose.Slides 支援這些常見格式的圖像操作:JPEG、PNG、BMP、GIF 等。
將本機儲存的圖像添加至投影片
您可以將電腦上的一張或多張圖像添加到簡報的投影片中。以下 C# 範例程式碼示範如何將圖像添加至投影片:
using (Presentation pres = new Presentation())
{
ISlide slide = pres.Slides[0];
IPPImage image = pres.Images.AddImage(File.ReadAllBytes("image.png"));
slide.Shapes.AddPictureFrame(ShapeType.Rectangle, 10, 10, 100, 100, image);
pres.Save("pres.pptx", SaveFormat.Pptx);
}
從網路將圖像添加至投影片
如果您想要添加至投影片的圖像在電腦上不存在,您可以直接從網路添加圖像。 以下範例程式碼示範如何在 C# 中從網路將圖像添加至投影片:
using (Presentation pres = new Presentation())
{
ISlide slide = pres.Slides[0];
byte[] imageData;
using (WebClient webClient = new WebClient())
{
imageData = webClient.DownloadData(new Uri("[REPLACE WITH URL]"));
}
IPPImage image = pres.Images.AddImage(imageData);
slide.Shapes.AddPictureFrame(ShapeType.Rectangle, 10, 10, 100, 100, image);
pres.Save("pres.pptx", SaveFormat.Pptx);
}
將圖像添加至投影片主版
投影片主版是位於最上層的投影片,用於儲存與控制其下所有投影片的資訊(主題、版面配置等)。因此,當您將圖像添加至投影片主版時,該圖像會出現在該主版下的所有投影片上。 以下 C# 範例程式碼示範如何將圖像添加至投影片主版:
using (Presentation pres = new Presentation())
{
ISlide slide = pres.Slides[0];
IMasterSlide masterSlide = slide.LayoutSlide.MasterSlide;
IPPImage image = pres.Images.AddImage(File.ReadAllBytes("image.png"));
masterSlide.Shapes.AddPictureFrame(ShapeType.Rectangle, 10, 10, 100, 100, image);
pres.Save("pres.pptx", SaveFormat.Pptx);
}
將圖像設為投影片背景
您可能會決定將圖片用作特定投影片或多張投影片的背景。在此情況下,請參閱 將圖像設為投影片背景。
將 SVG 添加至簡報
您可以使用屬於 IShapeCollection 介面的 AddPictureFrame 方法,將任意圖像添加或插入至簡報中。 若要根據 SVG 圖像建立圖像物件,您可以這樣做:
- 建立 SvgImage 物件以插入至 ImageShapeCollection
- 從 ISvgImage 建立 PPImage 物件
- 使用 IPPImage 介面建立 PictureFrame 物件 以下範例程式碼示範如何實作上述步驟,將 SVG 圖像添加至簡報中:
// 文件目錄的路徑
string dataDir = @"D:\Documents\";
// 原始 SVG 檔案名稱
string svgFileName = dataDir + "sample.svg";
// 輸出簡報檔案名稱
string outPptxPath = dataDir + "presentation.pptx";
// 建立新簡報
using (var p = new Presentation())
{
// 讀取 SVG 檔案內容
string svgContent = File.ReadAllText(svgFileName);
// 建立 SvgImage 物件
ISvgImage svgImage = new SvgImage(svgContent);
// 建立 PPImage 物件
IPPImage ppImage = p.Images.AddImage(svgImage);
// 建立新的圖片框架
p.Slides[0].Shapes.AddPictureFrame(ShapeType.Rectangle, 200, 100, ppImage.Width, ppImage.Height, ppImage);
// 以 PPTX 格式儲存簡報
p.Save(outPptxPath, SaveFormat.Pptx);
}
將 SVG 轉換為形狀集合
Aspose.Slides 將 SVG 轉換為形狀集合的功能類似於 PowerPoint 用於處理 SVG 圖像的功能:

此功能由 IShapeCollection 介面的 AddGroupShape 方法的其中一個重載提供,該重載以 ISvgImage 物件作為第一個參數。 以下範例程式碼示範如何使用上述方法將 SVG 檔案轉換為形狀集合:
// 文件目錄的路徑
string dataDir = @"D:\Documents\";
// 原始 SVG 檔案名稱
string svgFileName = dataDir + "sample.svg";
// 輸出簡報檔案名稱
string outPptxPath = dataDir + "presentation.pptx";
// 建立新簡報
using (IPresentation presentation = new Presentation())
{
// 讀取 SVG 檔案內容
string svgContent = File.ReadAllText(svgFileName);
// 建立 SvgImage 物件
ISvgImage svgImage = new SvgImage(svgContent);
// 取得投影片大小
SizeF slideSize = presentation.SlideSize.Size;
// 將 SVG 圖片轉換為形狀群組,並按投影片大小縮放
presentation.Slides[0].Shapes.AddGroupShape(svgImage, 0f, 0f, slideSize.Width, slideSize.Height);
// 以 PPTX 格式儲存簡報
presentation.Save(outPptxPath, SaveFormat.Pptx);
}
將圖像作為 EMF 添加至投影片
Aspose.Slides for .NET 允許您從 Excel 工作表生成 EMF 圖像,並使用 Aspose.Cells 將這些圖像作為 EMF 添加至投影片中。 以下範例程式碼示範如何執行上述任務:
using (Workbook book = new Workbook(dataDir + "chart.xlsx"))
{
Worksheet sheet = book.Worksheets[0];
ImageOrPrintOptions options = new ImageOrPrintOptions();
options.HorizontalResolution = 200;
options.VerticalResolution = 200;
options.ImageFormat = System.Drawing.Imaging.ImageFormat.Emf;
//將工作簿儲存至串流
SheetRender sr = new SheetRender(sheet, options);
using (Presentation pres = new Presentation())
{
pres.Slides.RemoveAt(0);
String EmfSheetName = "";
for (int j = 0; j < sr.PageCount; j++)
{
EmfSheetName = dataDir + "test" + sheet.Name + " Page" + (j + 1) + ".out.emf";
sr.ToImage(j, EmfSheetName);
var bytes = File.ReadAllBytes(EmfSheetName);
var emfImage = pres.Images.AddImage(bytes);
ISlide slide = pres.Slides.AddEmptySlide(pres.LayoutSlides.GetByType(SlideLayoutType.Blank));
slide.Shapes.AddPictureFrame(ShapeType.Rectangle, 0, 0, pres.SlideSize.Size.Width, pres.SlideSize.Size.Height, emfImage);
}
pres.Save(dataDir + "Saved.pptx", Aspose.Slides.Export.SaveFormat.Pptx);
}
}
取代圖像集合中的圖像
Aspose.Slides 允許您取代儲存在簡報圖像集合中的圖像(包括投影片形狀使用的圖像)。本節展示了更新集合中圖像的多種方法。API 提供直接的方式,可使用原始位元組資料、IImage 實例,或集合中已存在的其他圖像來取代圖像。 請依照以下步驟:
- 使用 Presentation 類別載入包含圖像的簡報檔案。
- 從檔案載入新圖像至位元組陣列。
- 使用位元組陣列將目標圖像取代為新圖像。
- 在第二種方法中,將圖像載入 IImage 物件,並使用該物件取代目標圖像。
- 在第三種方法中,使用簡報圖像集合中已存在的圖像取代目標圖像。
- 將修改後的簡報寫入為 PPTX 檔案。
// 實例化代表簡報檔案的 Presentation 類別。
using Presentation presentation = new Presentation("sample.pptx");
// 第一種方法。
byte[] imageData = File.ReadAllBytes("image0.jpeg");
IPPImage oldImage = presentation.Images[0];
oldImage.ReplaceImage(imageData);
// 第二種方法。
using IImage newImage = Images.FromFile("image1.png");
oldImage = presentation.Images[1];
oldImage.ReplaceImage(newImage);
// 第三種方法。
oldImage = presentation.Images[2];
oldImage.ReplaceImage(presentation.Images[3]);
// 將簡報儲存為檔案。
presentation.Save("output.pptx", SaveFormat.Pptx);
Info
使用 Aspose 免費的 Text to GIF 轉換器,您可以輕鬆地對文字進行動畫化、從文字建立 GIF 等。常見問題
插入後原始圖像解析度是否保持完整?
是。保留原始像素,但最終顯示效果取決於投影片上 picture 的縮放方式以及儲存時所套用的壓縮。
一次取代數十張投影片中的相同標誌的最佳方法是什麼?
將標誌放置於主投影片或版面配置上,並在簡報的圖像集合中取代它——更新將會傳播到所有使用該資源的元素。
插入的 SVG 可以轉換為可編輯的形狀嗎?
可以。您可以將 SVG 轉換為形狀群組,之後各個部件即可使用標準形狀屬性進行編輯。
如何一次為多張投影片設定圖片背景?
在主投影片或相關版面配置上 Assign the image as the background,使用該主版/版面的投影片皆會繼承此背景。
如何防止因大量圖片導致簡報檔案尺寸急遽增大?
重複使用單一圖像資源而非多次複製,選擇合理的解析度,儲存時套用壓縮,並在適當情況下將重複圖形放置於主投影片上。