จัดการ Picture Frame ในงานนำเสนอโดยใช้ JavaScript

ภาพรวม

PictureFrame คือรูปทรงสไลด์ที่แสดงภาพ ใน Aspose.Slides, แหล่งข้อมูลภาพและรูปทรงที่แสดงภาพเป็นอ็อบเจกต์แยกกัน: a Presentation มีแหล่งข้อมูลภาพฝังอยู่ผ่าน ImageCollection, ในขณะที่ PictureFrame ควบคุมตำแหน่งของภาพ, ขนาด, การจัดรูปแบบเส้น, การหมุน, การครอป, เอฟเฟกต์ภาพ, และการตั้งค่าระดับเฟรมอื่น ๆ

การแยกนี้มีประโยชน์เมื่อภาพเดียวกันต้องแสดงหลายครั้ง เพิ่มภาพลงในงานนำเสนอเพียงครั้งเดียว, เก็บ PPImage ที่คืนค่า, แล้วใช้แหล่งข้อมูลภาพนั้นเมื่อต้องสร้าง PictureFrame

PictureFrame สามารถบรรจุภาพแรสเตอร์เช่น PNG หรือ JPEG และภาพเวกเตอร์ SVG ได้ ทั้งนี้ยังสามารถอ้างอิงภาพที่เชื่อมโยง (linked) แทนการเก็บไบต์ของภาพไว้ในงานนำเสนอ ตัวเลือกนี้ส่งผลต่อความพกพา, ขนาดไฟล์, การสกัดข้อมูล, และพฤติกรรมการส่งออก ดังนั้นควรตัดสินใจว่าภาพจะถูกเก็บอย่างไรก่อนทำการจัดรูปแบบหรือปรับแต่ง

เพิ่มและจัดรูปแบบภาพฝัง

สำหรับภาพฝัง, ให้เพิ่มข้อมูลภาพลงในงานนำเสนอและสร้าง PictureFrame ด้วย ShapeCollection.addPictureFrame ภาพจะกลายเป็นส่วนหนึ่งของแพ็กเกจงานนำเสนอ ทำให้งานนำเสนอยังคงเป็นไฟล์เดียวเมื่อย้ายไปยังคอมพิวเตอร์เครื่องอื่น

ตัวอย่างต่อไปนี้เพิ่มภาพ PNG, สร้างเฟรมที่มีขนาดตามมิติเดิมของภาพ, และใช้การจัดรูปแบบเส้นและการหมุน:

var aspose = aspose || {};
aspose.slides = require("aspose.slides.via.java");
const java = require("java");

const presentation = new aspose.slides.Presentation();
try {
    const slide = presentation.getSlides().get_Item(0);

    let image;
    const sourceImage = aspose.slides.Images.fromFile("image.png");
    try {
        image = presentation.getImages().addImage(sourceImage);
    } finally {
        sourceImage.dispose();
    }

    const pictureFrame = slide.getShapes().addPictureFrame(aspose.slides.ShapeType.Rectangle, 50, 100, image.getWidth(), image.getHeight(), image);
    pictureFrame.getLineFormat().getFillFormat().setFillType(java.newByte(aspose.slides.FillType.Solid));
    pictureFrame.getLineFormat().getFillFormat().getSolidFillColor().setColor(java.getStaticFieldValue("java.awt.Color", "BLUE"));
    pictureFrame.getLineFormat().setWidth(3);
    pictureFrame.setRotation(15);

    presentation.save("picture-frame.pptx", aspose.slides.SaveFormat.Pptx);
} finally {
    presentation.dispose();
}

PictureFrame ควบคุมเรขาคณิตที่แสดง; การเปลี่ยนขนาดเฟรมไม่ได้เปลี่ยนมิติกระทุกรูปพิกเซลที่เก็บในแหล่งข้อมูลภาพฝัง ความแตกต่างนี้สำคัญเมื่อทำการครอปหรือบีบอัดภาพในภายหลัง

ใช้สเกลสัมพัทธ์

PictureFrame เปิดเผยการสเกลความกว้างและความสูงแบบสัมพัทธ์สำหรับเฟรมผ่าน setRelativeScaleWidth และ setRelativeScaleHeight ค่าที่ 1.0 หมายถึง 100% ของขนาดภาพเดิม สเกลสัมพัทธ์มีประโยชน์เมื่อเวิร์กโฟลว์ต้องคงอัตราส่วนต่อขนาดภาพต้นทางแทนการคำนวณขนาดสุดท้ายด้วยตนเอง

var aspose = aspose || {};
aspose.slides = require("aspose.slides.via.java");
const java = require("java");

const presentation = new aspose.slides.Presentation();
try {
    const slide = presentation.getSlides().get_Item(0);

    let image;
    const sourceImage = aspose.slides.Images.fromFile("image.png");
    try {
        image = presentation.getImages().addImage(sourceImage);
    } finally {
        sourceImage.dispose();
    }

    const pictureFrame = slide.getShapes().addPictureFrame(aspose.slides.ShapeType.Rectangle, 50, 50, 100, 100, image);
    pictureFrame.setRelativeScaleWidth(java.newFloat(1.35));
    pictureFrame.setRelativeScaleHeight(java.newFloat(0.8));

    presentation.save("relative-scale.pptx", aspose.slides.SaveFormat.Pptx);
} finally {
    presentation.dispose();
}

สเกลสัมพัทธ์เปลี่ยนการตั้งค่าสเกลของเฟรม; มันไม่ทำการรีแซมพลิงหรือบีบอัดภาพฝัง

ภาพฝังและภาพเชื่อมโยง

ภาพฝังจะเก็บข้อมูลภาพไว้ภายในงานนำเสนอ จึงเป็นตัวเลือกที่ปลอดภัยที่สุดสำหรับความพกพาและการเรนเดอร์ที่คาดเดาได้ ภาพเชื่อมโยงจะเก็บตำแหน่งภายนอกผ่านเมธอด Picture.setLinkPathLong แทนการฝังข้อมูลภาพในลักษณะเดียวกัน

ภาพเชื่อมโยงสามารถลดปริมาณข้อมูลภาพที่เก็บใน PPTX ได้ แต่ก็เพิ่มการพึ่งพิงภายนอก ไฟล์ที่เชื่อมโยงต้องยังคงเข้าถึงได้สำหรับแอปพลิเคชันที่เปิดหรือเรนเดอร์งานนำเสนอ หากเส้นทางเปลี่ยน, ไฟล์ถูกย้าย, หรือแหล่งข้อมูลไม่พร้อมใช้งาน, ภาพเชื่อมโยงอาจไม่แสดงตามคาด สำหรับงานนำเสนอที่ต้องส่งอีเมล, เก็บเป็นที่เก็บถาวร, หรือเรนเดอร์ในสภาพแวดล้อมแยก, ภาพฝังมักจะเชื่อถือได้มากกว่า

เพิ่มภาพเชื่อมโยง

ตัวอย่างต่อไปนี้สร้าง PictureFrame และชี้ไปที่ไฟล์ภาพในเครื่อง มุ่งเน้นที่การเชื่อมโยงภาพเท่านั้น; การเชื่อมโยงวิดีโอเป็นเวิร์กโฟลว์สื่อแยกต่างหากและไม่ได้ผสมเข้ากับตัวอย่างนี้

var aspose = aspose || {};
aspose.slides = require("aspose.slides.via.java");
const path = require("path");

const presentation = new aspose.slides.Presentation();
try {
    const slide = presentation.getSlides().get_Item(0);

    const pictureFrame = slide.getShapes().addPictureFrame(aspose.slides.ShapeType.Rectangle, 50, 50, 320, 180, null);
    const linkPath = path.resolve("image.png");
    pictureFrame.getPictureFormat().getPicture().setLinkPathLong(linkPath);

    presentation.save("linked-image.pptx", aspose.slides.SaveFormat.Pptx);
} finally {
    presentation.dispose();
}

ใช้การเชื่อมโยงเมื่อการจัดการไฟล์ภายนอกเป็นเจตนา อย่าใช้เป็นตัวแทนการบีบอัด: PPTX เล็กที่มีการเชื่อมโยงภาพเสียหายมักจะใช้งานได้น้อยกว่า งานนำเสนอขนาดใหญ่ที่เป็นไฟล์เดียว

สกัดภาพจาก PictureFrame

ก่อนสกัดภาพจากงานนำเสนอที่มีอยู่, ตรวจสอบให้แน่ใจว่า Shape นั้นเป็น PictureFrame จริงและมีภาพฝังอยู่ PictureFrame ที่เชื่อมโยงอาจไม่มีไบต์ภาพที่สกัดได้แบบเดียวกัน

สกัดภาพแรสเตอร์

API ภาพสมัยใหม่ใช้ IImage โดยตรง ตัวอย่างต่อไปนี้ค้นหาภาพแรสเตอร์ฝังตัวแรกบนสไลด์และบันทึกเป็น PNG:

var aspose = aspose || {};
aspose.slides = require("aspose.slides.via.java");
const java = require("java");

const presentation = new aspose.slides.Presentation("input.pptx");
try {
    const slide = presentation.getSlides().get_Item(0);

    for (let i = 0; i < slide.getShapes().size(); i++) {
        const shape = slide.getShapes().get_Item(i);
        if (!java.instanceOf(shape, "com.aspose.slides.IPictureFrame")) {
            continue;
        }

        const embeddedImage = shape.getPictureFormat().getPicture().getImage();
        if (embeddedImage == null || embeddedImage.getSvgImage() != null) {
            continue;
        }

        const rasterImage = embeddedImage.getImage();
        try {
            rasterImage.save("extracted-image.png", aspose.slides.ImageFormat.Png);
        } finally {
            rasterImage.dispose();
        }
        break;
    }
} finally {
    presentation.dispose();
}

การบันทึกผ่าน IImage.save จะแปลงภาพที่สกัดเป็นรูปแบบเอาต์พุตที่ร้องขอ หากต้องการไบต์ที่เข้ารหัสเก็บไว้ในงานนำเสนอแทนไฟล์แรสเตอร์ที่แปลงแล้ว, ให้ใช้ข้อมูลไบต์ของแหล่งภาพโดยตรง

สกัดภาพ SVG

สำหรับภาพ SVG, PPImage เปิดเผยอ็อบเจกต์ SvgImage ทำให้คุณสามารถดึงข้อมูล SVG โดยตรงแทนการเรซอลูชั่นภาพก่อน

var aspose = aspose || {};
aspose.slides = require("aspose.slides.via.java");
const fs = require("fs");
const java = require("java");

const presentation = new aspose.slides.Presentation("input.pptx");
try {
    const slide = presentation.getSlides().get_Item(0);

    for (let i = 0; i < slide.getShapes().size(); i++) {
        const shape = slide.getShapes().get_Item(i);
        if (!java.instanceOf(shape, "com.aspose.slides.IPictureFrame")) {
            continue;
        }

        const embeddedImage = shape.getPictureFormat().getPicture().getImage();
        const svgImage = embeddedImage != null ? embeddedImage.getSvgImage() : null;
        if (svgImage == null) {
            continue;
        }

        fs.writeFileSync("extracted-image.svg", svgImage.getSvgData());
        break;
    }
} finally {
    presentation.dispose();
}

การเก็บเนื้อหา SVG เป็น SVG จะคงแหล่งเวกเตอร์ไว้ในงานนำเสนอ การส่งออกเป็นแรสเตอร์เช่น PNG หรือ JPEG จะต้องเรนเดอร์เวกเตอร์เป็นพิกเซล การส่งออกสไลด์เป็น PDF หรือ SVG ก็เป็นการเรนเดอร์เช่นกัน ดังนั้นกราฟิกที่ส่งออกไม่ควรถูกมองว่าเป็นสำเนาไบต์ต่อไบต์ของ SVG ฝังเดิม; ใช้ข้อมูลจาก SvgImage.getSvgData เมื่อต้องการแหล่งเวกเตอร์ต้นฉบับ

ครอบภาพ

การครอบเปลี่ยนส่วนที่มองเห็นของภาพภายในเฟรม ค่าการครอบบน PictureFillFormat เป็นเปอร์เซ็นต์ของมิติภาพต้นทาง การครอบไม่ลบพิกเซลที่ซ่อนอยู่จากภาพฝัง; เพียงเปลี่ยนพื้นที่ที่มองเห็น

ตัวอย่างต่อไปนี้ค้นหา PictureFrame อย่างปลอดภัยและใช้ค่าการครอบ:

var aspose = aspose || {};
aspose.slides = require("aspose.slides.via.java");
const java = require("java");

const presentation = new aspose.slides.Presentation("input.pptx");
try {
    const slide = presentation.getSlides().get_Item(0);
    let pictureFrame = null;

    for (let i = 0; i < slide.getShapes().size(); i++) {
        const shape = slide.getShapes().get_Item(i);
        if (java.instanceOf(shape, "com.aspose.slides.IPictureFrame")) {
            pictureFrame = shape;
            break;
        }
    }

    if (pictureFrame != null) {
        pictureFrame.getPictureFormat().setCropLeft(java.newFloat(23.6));
        pictureFrame.getPictureFormat().setCropRight(java.newFloat(21.5));
        pictureFrame.getPictureFormat().setCropTop(java.newFloat(3));
        pictureFrame.getPictureFormat().setCropBottom(java.newFloat(31));
        presentation.save("cropped-image.pptx", aspose.slides.SaveFormat.Pptx);
    }
} finally {
    presentation.dispose();
}

เนื่องจากข้อมูลภาพที่ซ่อนอยู่นายยังคงอยู่ การครอบสามารถเปลี่ยนแปลงได้ภายหลังโดยไม่สูญเสียพิกเซลต้นฉบับ หากขนาดไฟล์เป็นข้อพิจารณามากกว่าความสามารถในการย้อนกลับ, พื้นที่ที่ครอบสามารถลบออกได้ตามที่อธิบายในส่วนต่อไป

ลบข้อมูลภาพที่ครอบไว้

PictureFillFormat.deletePictureCroppedAreas จะลบข้อมูลภาพที่อยู่นอกสี่เหลี่ยมการครอบปัจจุบันและคืนแหล่งภาพที่ได้ ผลลัพธ์นี้สามารถลดขนาดไฟล์ได้ แต่เป็นการปรับแต่งทำลาย: หลังจากบันทึกงานนำเสนอ พิกเซลที่ลบจะไม่สามารถกู้คืนเพื่อทำการ Uncrop ได้อีก

var aspose = aspose || {};
aspose.slides = require("aspose.slides.via.java");
const java = require("java");

const presentation = new aspose.slides.Presentation("input.pptx");
try {
    const slide = presentation.getSlides().get_Item(0);
    let pictureFrame = null;

    for (let i = 0; i < slide.getShapes().size(); i++) {
        const shape = slide.getShapes().get_Item(i);
        if (java.instanceOf(shape, "com.aspose.slides.IPictureFrame")) {
            pictureFrame = shape;
            break;
        }
    }

    if (pictureFrame != null) {
        const croppedImage = pictureFrame.getPictureFormat().deletePictureCroppedAreas();
        if (croppedImage != null) {
            presentation.save("cropped-data-removed.pptx", aspose.slides.SaveFormat.Pptx);
        }
    }
} finally {
    presentation.dispose();
}

เมธอดอาจเพิ่มแหล่งภาพใหม่เข้าไปในงานนำเสนอ หากภาพต้นฉบับยังถูกใช้โดย PictureFrame อื่น ๆ, เฟรมเหล่านั้นยังต้องการแหล่งเดิม ดังนั้นการลบพื้นที่ที่ครอบไว้ไม่ได้จำเป็นต้องลดจำนวนภาพทั้งหมด การครอบ WMF หรือ EMF ด้วยเมธอดนี้จะทำให้ผลลัพธ์ที่ครอบเป็น PNG

บีบอัดภาพแรสเตอร์

PictureFillFormat.compressImage ลดความละเอียดของภาพแรสเตอร์สัมพันธ์กับขนาดที่ภาพแสดง นอกจากนี้ยังสามารถลบพื้นที่ที่ครอบไว้ในขั้นตอนเดียว เมธอดคืนค่า true เมื่อภาพถูกปรับขนาดหรือครอบ และ false เมื่อไม่มีการเปลี่ยนแปลงใด ๆ

ใช้ค่าที่กำหนดไว้ล่วงหน้าใน PicturesCompression เมื่อความละเอียดเป้าหมายมาตรฐานเพียงพอ:

var aspose = aspose || {};
aspose.slides = require("aspose.slides.via.java");
const java = require("java");

const presentation = new aspose.slides.Presentation("input.pptx");
try {
    const slide = presentation.getSlides().get_Item(0);
    let pictureFrame = null;

    for (let i = 0; i < slide.getShapes().size(); i++) {
        const shape = slide.getShapes().get_Item(i);
        if (java.instanceOf(shape, "com.aspose.slides.IPictureFrame")) {
            pictureFrame = shape;
            break;
        }
    }

    if (pictureFrame != null) {
        const compressed = pictureFrame.getPictureFormat().compressImage(true, aspose.slides.PicturesCompression.Dpi150);
        console.log(compressed ? "The image was compressed." : "No compression was necessary.");
        presentation.save("compressed-image.pptx", aspose.slides.SaveFormat.Pptx);
    }
} finally {
    presentation.dispose();
}

สามารถส่งค่าความละเอียด DPI บวกแบบกำหนดเองแทนค่าที่กำหนดไว้เมื่อจำเป็นต้องมีเป้าหมายเฉพาะ

การบีบอัดนี้มุ่งเน้นที่ภาพแรสเตอร์ ไม่ได้ลดขนาด SVG หรือเมทาฟายล์ การลดความละเอียดและการลบพื้นที่ที่ครอบไว้ไม่สามารถกู้คืนจากงานนำเสนอที่ปรับแล้วได้ เลือกความละเอียดเป้าหมายโดยอิงจากขนาดสูงสุดที่ภาพจะถูกมองหรือส่งออกจริง แทนการใช้ DPI ต่ำที่สุดทั่วทั้งไฟล์

จัดการเอฟเฟกต์การแปลงภาพ

สำหรับเวิร์กโฟลว์ครบถ้วนที่ครอบคลุมความสว่าง, คอนทราสต์, การแปลงสี, เบลอ, เอฟเฟกต์อัลฟา, เชนสั่ง, การตรวจสอบ, การลบ, และการตรวจสอบรอบเดียว, ดูที่ Image Transform Effects

ล็อกเรขาคณิตของ PictureFrame

การตั้งค่า PictureFrameLock ควบคุมว่าการดำเนินการแก้ไขใดบ้างที่ถูกปิดใช้งานสำหรับ PictureFrame ตัวอย่างเช่น setAspectRatioLocked จะรักษาสัดส่วนของรูปทรงขณะปรับขนาด

var aspose = aspose || {};
aspose.slides = require("aspose.slides.via.java");

const presentation = new aspose.slides.Presentation();
try {
    const slide = presentation.getSlides().get_Item(0);

    let image;
    const sourceImage = aspose.slides.Images.fromFile("image.png");
    try {
        image = presentation.getImages().addImage(sourceImage);
    } finally {
        sourceImage.dispose();
    }

    const pictureFrame = slide.getShapes().addPictureFrame(aspose.slides.ShapeType.Rectangle, 50, 100, image.getWidth(), image.getHeight(), image);
    pictureFrame.getPictureFrameLock().setAspectRatioLocked(true);

    presentation.save("locked-picture-frame.pptx", aspose.slides.SaveFormat.Pptx);
} finally {
    presentation.dispose();
}

การล็อกนี้ใช้กับรูปทรง PictureFrame ไม่ได้บังคับให้ภาพต้นฉบับต้องรีแซมพลิงหรือเปลี่ยนสัดส่วนอย่างถาวร

ปรับค่า StretchOffset

เมื่อโหมดการเติมภาพเป็น stretch, ค่าการ offset การยืดบน PictureFillFormat จะกำหนดสี่เหลี่ยมเติมสัมพันธ์กับกล่องขอบของ PictureFrame ค่าเปอร์เซ็นต์บวกสร้างการ inset จากขอบ, ส่วนค่าเปอร์เซ็นต์ลบสร้างการ outset

สิ่งนี้แตกต่างจากการครอป ค่าการครอปเลือกส่วนของภาพต้นทางที่จะแสดง; ส่วน stretch offset เปลี่ยนสี่เหลี่ยมที่ภาพเติมที่มองเห็นถูกยืดออก

var aspose = aspose || {};
aspose.slides = require("aspose.slides.via.java");
const java = require("java");

const presentation = new aspose.slides.Presentation();
try {
    const slide = presentation.getSlides().get_Item(0);

    let image;
    const sourceImage = aspose.slides.Images.fromFile("image.png");
    try {
        image = presentation.getImages().addImage(sourceImage);
    } finally {
        sourceImage.dispose();
    }

    const pictureFrame = slide.getShapes().addPictureFrame(aspose.slides.ShapeType.Rectangle, 10, 10, 400, 300, image);
    pictureFrame.getPictureFormat().setPictureFillMode(java.newByte(aspose.slides.PictureFillMode.Stretch));
    pictureFrame.getPictureFormat().setStretchOffsetLeft(java.newFloat(12));
    pictureFrame.getPictureFormat().setStretchOffsetRight(java.newFloat(12));
    pictureFrame.getPictureFormat().setStretchOffsetTop(java.newFloat(8));
    pictureFrame.getPictureFormat().setStretchOffsetBottom(java.newFloat(8));

    presentation.save("stretch-offsets.pptx", aspose.slides.SaveFormat.Pptx);
} finally {
    presentation.dispose();
}

ใช้ stretch offset สำหรับการวางตำแหน่งการเติม ใช้ค่าการครอปเมื่อเป้าหมายคือซ่อนขอบของภาพต้นทาง

ข้อพิจารณาด้านการจัดเก็บ, ขนาดไฟล์, และการส่งออก

การตัดสินใจหลักจะจัดการได้ง่ายขึ้นเมื่อการจัดเก็บภาพและการจัดรูปแบบ PictureFrame แยกกัน:

  • Embedded images ทำให้งานนำเสนอเป็นไฟล์เดียวและเป็นตัวเลือกที่เชื่อถือได้ที่สุดสำหรับการแชร์และการเรนเดอร์บนเซิร์ฟเวอร์ แต่ภาพแรสเตอร์ขนาดใหญ่ทำให้ PPTX พื้นที่เก็บและการใช้หน่วยความจำเพิ่มขึ้น
  • Linked images ช่วยให้แพ็กเกจเล็กลง, แต่งานนำเสนอพึ่งพาไฟล์ภายนอกที่ต้องยังคงเข้าถึงได้ตามเส้นทางหรือที่ตั้งที่บันทึกไว้
  • Cropping เริ่มต้นเป็นแบบไม่ทำลาย; พิกเซลที่ซ่อนอยู่ยังคงฝังอยู่จนกว่าจะลบพื้นที่ที่ครอบโดยชัดเจนหรือระหว่างการบีบอัด
  • Compression สามารถลดขนาดไฟล์ได้อย่างมีนัยสำคัญสำหรับภาพแรสเตอร์ขนาดเกิน, แต่จะสูญเสียความละเอียดต้นทาง ควรทำหลังจากที่รู้ขนาดบนสไลด์ที่ต้องการแล้ว
  • SVG images ควรคงเป็น SVG เมื่อสำคัญต่อการรักษาเวกเตอร์ สกัด SVG ฝังโดยตรงเมื่อต้องการแหล่งเวกเตอร์เอง การส่งออกสไลด์เป็นแรสเตอร์จะเปลี่ยนสไลด์ที่เรนเดอร์เป็นพิกเซลเสมอ
  • Repeated images ควรใช้แหล่ง PPImage ที่มีอยู่แล้วเมื่อเป็นไปได้ แทนการโหลดไฟล์เดียวกันหลายครั้งในเวิร์กโฟลว์งานนำเสนอ

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

FAQ

ความแตกต่างระหว่าง PictureFrame กับแหล่งข้อมูลภาพคืออะไร?

PPImage แทนแหล่งข้อมูลภาพที่เชื่อมโยงกับงานนำเสนอ ส่วน PictureFrame เป็นรูปทรงบนสไลด์ที่แสดงภาพและเก็บเรขาคณิตระดับเฟรมรวมถึงการจัดรูปแบบเช่น ขนาด, การหมุน, ค่าครอป, เอฟเฟกต์, และการล็อก

ควรฝังหรือเชื่อมโยงภาพ?

ฝังภาพเมื่อจำเป็นต้องให้งานนำเสนอสามารถพกพา, เก็บเป็นที่เก็บถาวร, หรือเรนเดอร์โดยไม่ต้องอ้างอิงแหล่งภายนอก เชื่อมโยงภาพเฉพาะเมื่อต้องการเก็บไฟล์ภาพอยู่นอก PPTX อย่างตั้งใจและสามารถรักษาตำแหน่งภายนอกได้อย่างเชื่อถือได้

การครอปทำให้ขนาดไฟล์ PPTX ลดลงหรือไม่?

ไม่โดยตรง การตั้งค่าครอปธรรมดาจะซ่อนส่วนของภาพต้นทางแต่ยังคงเก็บพิกเซลอยู่ ใช้ PictureFillFormat.deletePictureCroppedAreas หรือบีบอัดภาพพร้อมการลบพื้นที่ที่ครอบเมื่อพิกเซลเหล่านั้นสามารถทิ้งได้อย่างถาวร

สามารถคืนคุณภาพภาพหลังบีบอัดได้หรือไม่?

ไม่ได้ การบีบอัดอาจลดความละเอียดแรสเตอร์ที่เก็บไว้, และการลบพื้นที่ที่ครอบจะทำให้ข้อมูลภาพหายไป หากอาจต้องแก้ไขภาพด้วยความละเอียดสูงในภายหลัง, ควรเก็บภาพต้นฉบับอยู่นอกงานนำเสนอ

ควรจัดการกับภาพ SVG อย่างไร?

เก็บเนื้อหา SVG เป็น SVG เมื่อความถูกต้องของเวกเตอร์สำคัญ สามารถสกัด SvgImage ฝังได้โดยตรง การเรนเดอร์สไลด์เป็นรูปแรสเตอร์เช่น PNG หรือ JPEG จะทำให้ SVG ถูก rasterize เป็นพิกเซล

ทำอย่างไรจึงจะหลีกเลี่ยงการแคสต์ที่ไม่ปลอดภัยเมื่ออ่านสไลด์ที่มีอยู่?

ตรวจสอบประเภทของ Shape ก่อนใช้สมาชิกเฉพาะ PictureFrame การตรวจสอบ java.instanceOf กับ PictureFrame จะช่วยหลีกเลี่ยงการแคสต์ที่ไม่ถูกต้องและทำให้โค้ดจัดการสไลด์ที่ไม่มี PictureFrame ได้อย่างเหมาะสม