เพิ่มประสิทธิภาพการจัดการภาพในงานนำเสนอด้วย .NET

บทนำ

ภาพทำให้การนำเสนอมีความน่าสนใจและดึงดูดมากขึ้น ใน Microsoft PowerPoint คุณสามารถแทรกรูปภาพจากไฟล์ อินเทอร์เน็ต หรือแหล่งอื่น ๆ ลงในสไลด์ได้เช่นกัน อย่างเดียวกัน Aspose.Slides ก็อนุญาตให้คุณเพิ่มภาพลงในสไลด์ของการนำเสนอผ่านขั้นตอนต่าง ๆ

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

เพิ่มภาพลงใน Slide Master

Slide Master คือสไลด์ระดับบนสุดที่เก็บและควบคุมข้อมูล (ธีม, เค้าโครง ฯลฯ) ของสไลด์ทั้งหมดใต้มัน ดังนั้นเมื่อคุณเพิ่มภาพลงใน Slide Master ภาพนั้นจะปรากฏบนทุกสไลด์ที่ใช้ Slide Master นั้น

โค้ดตัวอย่าง C# นี้แสดงวิธีการเพิ่มภาพลงใน Slide Master:

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

เพิ่มภาพเป็นพื้นหลังของสไลด์

คุณอาจต้องการใช้รูปภาพเป็นพื้นหลังสำหรับสไลด์เดียวหรือหลายสไลด์ ในกรณีนั้นคุณต้องดู Setting Images as Backgrounds for Slides

เพิ่ม SVG ลงในงานนำเสนอ

คุณสามารถเพิ่มหรือแทรกรูปภาพใด ๆ ลงในงานนำเสนอโดยใช้เมธอด AddPictureFrame ที่เป็นส่วนหนึ่งของอินเทอร์เฟซ IShapeCollection

เพื่อสร้างออบเจกต์ภาพจาก SVG ให้ทำตามขั้นตอนต่อไปนี้:

  1. สร้างออบเจกต์ SvgImage เพื่อนำเข้าไปยัง ImageShapeCollection
  2. สร้างออบเจกต์ PPImage จาก ISvgImage
  3. สร้างออบเจกต์ PictureFrame ด้วยการใช้ IPPImage interface

โค้ดตัวอย่างนี้แสดงวิธีการดำเนินการตามขั้นตอนข้างต้นเพื่อเพิ่มภาพ 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);

    // สร้าง PictureFrame ใหม่
    p.Slides[0].Shapes.AddPictureFrame(ShapeType.Rectangle, 200, 100, ppImage.Width, ppImage.Height, ppImage);

    // บันทึกงานนำเสนอในรูปแบบ PPTX
    p.Save(outPptxPath, SaveFormat.Pptx);
}

แปลง SVG เป็นชุดของรูปทรง

การแปลง SVG เป็นชุดของรูปทรงของ Aspose.Slides มีลักษณะคล้ายกับฟังก์ชันของ PowerPoint ที่ใช้ทำงานกับภาพ SVG:

PowerPoint Popup Menu

ฟังก์ชันนี้ให้บริการโดยหนึ่งใน overload ของเมธอด AddGroupShape ของอินเทอร์เฟซ IShapeCollection ที่รับออบเจกต์ 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 อนุญาตให้คุณสร้างภาพ EMF จากแผ่นงาน Excel และเพิ่มภาพเหล่านั้นเป็น EMF ลงในสไลด์โดยใช้ Aspose.Cells

โค้ดตัวอย่างนี้แสดงวิธีทำตามขั้นตอนที่อธิบายไว้:

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

แทนที่ภาพใน Image Collection

Aspose.Slides ให้คุณแทนที่ภาพที่จัดเก็บใน Image Collection ของงานนำเสนอ (รวมถึงภาพที่ใช้โดยรูปทรงสไลด์) ส่วนนี้แสดงวิธีการอัปเดตภาพในคอลเลกชันหลายวิธี API มีเมธอดที่ใช้งานง่ายเพื่อแทนที่ภาพโดยใช้ข้อมูลไบต์ดิบ, อินสแตนซ์ IImage หรือภาพอื่นที่มีอยู่แล้วในคอลเลกชัน

ทำตามขั้นตอนต่อไปนี้:

  1. โหลดไฟล์งานนำเสนอที่มีภาพโดยใช้คลาส Presentation
  2. โหลดภาพใหม่จากไฟล์เข้าสู่ byte array
  3. แทนที่ภาพเป้าหมายด้วยภาพใหม่โดยใช้ byte array
  4. แนวทางที่สอง โหลดภาพเข้าสู่อ็อบเจกต์ IImage แล้วแทนที่ภาพเป้าหมายด้วยอ็อบเจกต์นั้น
  5. แนวทางที่สาม แทนที่ภาพเป้าหมายด้วยภาพที่มีอยู่แล้วใน Image Collection ของงานนำเสนอ
  6. บันทึกงานนำเสนอที่แก้ไขเป็นไฟล์ 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);

คำถามที่พบบ่อย

ความละเอียดของภาพต้นฉบับจะคงเดิมหลังจากแทรกหรือไม่?
ใช่ พิกเซลต้นฉบับจะถูกเก็บไว้ แต่การแสดงผลสุดท้ายขึ้นอยู่กับว่าภาพ picture ถูกสเกลบนสไลด์อย่างไรและการบีบอัดใด ๆ ที่ใช้เมื่อบันทึก

วิธีที่ดีที่สุดในการแทนที่โลโกเดียวกันในหลายสิบสไลด์พร้อมกันคืออะไร?
วางโลโกบน master slide หรือ layout แล้วแทนที่ใน Image Collection ของงานนำเสนอ—การเปลี่ยนแปลงจะกระจายไปยังทุกองค์ประกอบที่ใช้ทรัพยากรนั้น

SVG ที่แทรกเข้ามาสามารถแปลงเป็นรูปทรงที่แก้ไขได้หรือไม่?
ได้ คุณสามารถแปลง SVG เป็นกลุ่มรูปทรงได้ หลังจากนั้นแต่ละส่วนจะสามารถแก้ไขได้ด้วยคุณสมบัติมาตรฐานของรูปทรง

จะตั้งค่าภาพเป็นพื้นหลังของหลายสไลด์พร้อมกันอย่างไร?
Assign the image as the background บน master slide หรือ layout ที่เกี่ยวข้อง—สไลด์ใด ๆ ที่ใช้ master/layout นั้นจะสืบทอดพื้นหลังโดยอัตโนมัติ

ทำอย่างไรเพื่อป้องกันไม่ให้ไฟล์งานนำเสนอขยายขนาดมากเกินไปจากภาพจำนวนมาก?
ใช้ภาพเดียวซ้ำแทนการทำสำเนา, เลือกความละเอียดที่เหมาะสม, บีบอัดเมื่อบันทึก, และเก็บกราฟิกที่ซ้ำกันไว้บน master slide เมื่อเป็นไปได้