จัดการกรอบรูปภาพในงานนำเสนอบน Android
ภาพรวม
กรอบรูปภาพคือรูปทรงสไลด์ที่แสดงภาพ ใน Aspose.Slides, แหล่งข้อมูลภาพและรูปทรงที่แสดงภาพนั้นเป็นอ็อบเจกต์แยกกัน: Presentation เป็นเจ้าของแหล่งข้อมูลภาพฝังผ่าน IImageCollection, ในขณะที่ IPictureFrame ควบคุมตำแหน่ง ขนาด การจัดรูปแบบเส้น การหมุน การครอป เอฟเฟกต์ภาพ และการตั้งค่าอื่น ๆ ระดับกรอบ
การแยกนี้มีประโยชน์เมื่อภาพเดียวกันถูกแสดงหลายครั้ง เพิ่มภาพลงในงานนำเสนอเพียงครั้งเดียว เก็บ IPPImage ที่ส่งกลับมาไว้ แล้วใช้แหล่งข้อมูลภาพนั้นเมื่อสร้างกรอบรูปภาพ
กรอบรูปภาพสามารถบรรจุภาพเรสเตอร์เช่น PNG หรือ JPEG และภาพเวกเตอร์ SVG ได้ นอกจากนี้ยังสามารถอ้างอิงภาพที่ลิงก์แทนการจัดเก็บไบต์ของภาพไว้ในงานนำเสนอ ตัวเลือกนี้ส่งผลต่อการพกพา ขนาดไฟล์ การสกัดและพฤติกรรมการส่งออก ดังนั้นควรตัดสินใจว่าเก็บภาพอย่างไรก่อนทำการจัดรูปแบบหรือเพิ่มประสิทธิภาพ
เพิ่มและจัดรูปแบบภาพฝัง
สำหรับภาพฝัง ให้เพิ่มข้อมูลภาพลงในงานนำเสนอและสร้างกรอบรูปภาพด้วย IShapeCollection.addPictureFrame ภาพจะกลายเป็นส่วนหนึ่งของแพ็กเกจงานนำเสนอ ดังนั้นงานนำเสนอจะคงเป็นอิสระเมื่อนำไปย้ายไปยังคอมพิวเตอร์เครื่องอื่น
ตัวอย่างต่อไปนี้เพิ่มภาพ JPEG สร้างกรอบที่มีขนาดตามมิติดั้งเดิมของภาพ และใช้การจัดรูปแบบเส้นและการหมุน:
import com.aspose.slides.*;
import android.graphics.Color;
Presentation presentation = new Presentation();
try {
ISlide slide = presentation.getSlides().get_Item(0);
IPPImage image;
IImage sourceImage = Images.fromFile("photo.jpg");
try {
image = presentation.getImages().addImage(sourceImage);
} finally {
sourceImage.dispose();
}
IPictureFrame pictureFrame = slide.getShapes().addPictureFrame(ShapeType.Rectangle, 50, 100, image.getWidth(), image.getHeight(), image);
pictureFrame.getLineFormat().getFillFormat().setFillType(FillType.Solid);
pictureFrame.getLineFormat().getFillFormat().getSolidFillColor().setColor(Color.BLUE);
pictureFrame.getLineFormat().setWidth(3);
pictureFrame.setRotation(15);
presentation.save("picture-frame.pptx", SaveFormat.Pptx);
} finally {
presentation.dispose();
}
กรอบรูปภาพควบคุมรูปทรงที่แสดง; การเปลี่ยนขนาดกรอบไม่ทำให้มิตพิกเซลดั้งเดิมที่เก็บในแหล่งข้อมูลภาพฝังเปลี่ยนแปลง ความแตกต่างนี้สำคัญเมื่อทำการครอปหรือบีบอัดภาพในภายหลัง
ใช้สเกลสัมพัทธ์
IPictureFrame เปิดเผยการสเกลความกว้างและความสูงสัมพัทธ์ของกรอบผ่าน setRelativeScaleWidth และ setRelativeScaleHeight ค่าที่เป็น 1.0 แทน 100% ของขนาดภาพต้นฉบับ สเกลสัมพัทธ์มีประโยชน์เมื่อกระบวนการทำงานต้องการรักษาความสัมพันธ์กับขนาดภาพต้นฉบับแทนการคำนวณมิติสุดท้ายด้วยตนเอง
import com.aspose.slides.*;
Presentation presentation = new Presentation();
try {
ISlide slide = presentation.getSlides().get_Item(0);
IPPImage image;
IImage sourceImage = Images.fromFile("photo.jpg");
try {
image = presentation.getImages().addImage(sourceImage);
} finally {
sourceImage.dispose();
}
IPictureFrame pictureFrame = slide.getShapes().addPictureFrame(ShapeType.Rectangle, 50, 50, 100, 100, image);
pictureFrame.setRelativeScaleWidth(1.35f);
pictureFrame.setRelativeScaleHeight(0.8f);
presentation.save("relative-scale.pptx", SaveFormat.Pptx);
} finally {
presentation.dispose();
}
สเกลสัมพัทธ์เปลี่ยนการตั้งค่าขนาดของกรอบ; ไม่ทำการรีแซมเปิลหรือบีบอัดภาพฝัง
ภาพฝังและภาพที่ลิงก์
ภาพฝังเก็บข้อมูลภาพภายในงานนำเสนอและจึงเป็นตัวเลือกที่ปลอดภัยที่สุดสำหรับการพกพาและการเรนเดอร์ที่คาดเดาได้ ภาพที่ลิงก์เก็บตำแหน่งภายนอกผ่านวิธีการ ISlidesPicture.setLinkPathLong แทนการฝังข้อมูลภาพในลักษณะเดียวกัน
ภาพที่ลิงก์สามารถลดปริมาณข้อมูลภาพที่เก็บใน PPTX ได้ แต่จะสร้างการพึ่งพาไฟล์ภายนอก ไฟล์ที่ลิงก์ต้องสามารถเข้าถึงได้โดยแอปพลิเคชันที่เปิดหรือเรนเดอร์งานนำเสนอ หากเส้นทางเปลี่ยน ไฟล์ถูกย้าย หรือแหล่งข้อมูลไม่พร้อมใช้งาน ภาพที่ลิงก์อาจไม่แสดงตามที่คาดหวัง สำหรับงานนำเสนอที่ต้องส่งอีเมล เก็บถาวร หรือเรนเดอร์ในสภาพแวดล้อมแยกกัน ภาพฝังคือทางเลือกที่เชื่อถือได้มากกว่า
เพิ่มภาพที่ลิงก์
ตัวอย่างต่อไปนี้สร้างกรอบรูปภาพและชี้ไปยังไฟล์ภาพในเครื่องเท่านั้น มุ่งเน้นที่การลิงก์ภาพ; การลิงก์วิดีโอเป็นกระบวนการสื่อแบบแยกต่างหากและไม่ได้ผสมเข้ากับตัวอย่างนี้โดยเจตนา
import com.aspose.slides.*;
import java.io.File;
Presentation presentation = new Presentation();
try {
ISlide slide = presentation.getSlides().get_Item(0);
IPictureFrame pictureFrame = slide.getShapes().addPictureFrame(ShapeType.Rectangle, 50, 50, 320, 180, null);
File linkedImageFile = new File("linked-image.jpg");
String linkPath = linkedImageFile.getAbsolutePath();
pictureFrame.getPictureFormat().getPicture().setLinkPathLong(linkPath);
presentation.save("linked-image.pptx", SaveFormat.Pptx);
} finally {
presentation.dispose();
}
ใช้ลิงก์เมื่อการจัดการไฟล์ภายนอกเป็นเจตนาที่ตั้งใจ อย่าใช้เป็นการแทนที่การบีบอัด: PPTX ขนาดเล็กที่มีการพึ่งพาภาพเสียหายมักจะใช้งานได้น้อยกว่าการนำเสนอที่มีขนาดใหญ่และเป็นอิสระ
สกัดภาพจากกรอบรูปภาพ
ก่อนที่จะสกัดภาพจากงานนำเสนอที่มีอยู่ ตรวจสอบว่ารูปทรงเป็น IPictureFrame จริง ๆ และว่ามีภาพฝังอยู่หรือไม่ กรอบรูปภาพที่ลิงก์อาจไม่มีไบต์ภาพที่สามารถสกัดได้ในลักษณะเดียวกัน
สกัดภาพเรสเตอร์
API ภาพสมัยใหม่ใช้ IImage โดยตรงและไม่จำเป็นต้องใช้ wrapper ของ Java รุ่นเก่า ตัวอย่างต่อไปนี้ค้นหาภาพเรสเตอร์ฝังตัวแรกบนสไลด์และบันทึกเป็น PNG:
import com.aspose.slides.*;
Presentation presentation = new Presentation("sample.pptx");
try {
ISlide slide = presentation.getSlides().get_Item(0);
for (IShape shape : slide.getShapes()) {
if (!(shape instanceof IPictureFrame)) {
continue;
}
IPictureFrame pictureFrame = (IPictureFrame) shape;
IPPImage embeddedImage = pictureFrame.getPictureFormat().getPicture().getImage();
if (embeddedImage == null || embeddedImage.getSvgImage() != null) {
continue;
}
IImage rasterImage = embeddedImage.getImage();
try {
rasterImage.save("extracted-image.png", ImageFormat.Png);
} finally {
rasterImage.dispose();
}
break;
}
} finally {
presentation.dispose();
}
การบันทึกผ่าน IImage.save จะแปลงภาพที่สกัดเป็นรูปแบบผลลัพธ์ที่ร้องขอ หากต้องการไบต์ที่เข้ารหัสเก็บไว้ในงานนำเสนอแทนไฟล์เรสเตอร์ที่แปลงแล้ว ให้ใช้ข้อมูลไบนารีของแหล่งภาพแทน
สกัดภาพ SVG
สำหรับภาพ SVG, IPPImage เปิดเผยอ็อบเจกต์ ISvgImage ซึ่งทำให้คุณดึงข้อมูล SVG ได้โดยตรงแทนการเรสเตอร์ไอคอนก่อน
import com.aspose.slides.*;
import java.io.FileOutputStream;
import java.io.IOException;
Presentation presentation = new Presentation("sample.pptx");
try {
ISlide slide = presentation.getSlides().get_Item(0);
for (IShape shape : slide.getShapes()) {
if (!(shape instanceof IPictureFrame)) {
continue;
}
IPictureFrame pictureFrame = (IPictureFrame) shape;
IPPImage embeddedImage = pictureFrame.getPictureFormat().getPicture().getImage();
ISvgImage svgImage = embeddedImage != null ? embeddedImage.getSvgImage() : null;
if (svgImage == null) {
continue;
}
byte[] svgData = svgImage.getSvgData();
FileOutputStream outputStream = new FileOutputStream("extracted-image.svg");
try {
outputStream.write(svgData);
} finally {
outputStream.close();
}
break;
}
} finally {
presentation.dispose();
}
การเก็บเนื้อหา SVG เป็น SVG จะคงแหล่งเวกเตอร์ภายในงานนำเสนอ การส่งออกเรสเตอร์เช่น PNG หรือ JPEG จำเป็นต้องเรนเดอร์เวกเตอร์นั้นเป็นพิกเซล การส่งออกสไลด์เป็น PDF หรือ SVG ก็เป็นการเรนเดอร์เช่นกัน ดังนั้นกราฟิกที่ส่งออกไม่ควรถูกมองว่าเป็นสำเนาไบต์ต่อไบต์ของ SVG ฝังต้นฉบับ; ให้ใช้ข้อมูลจาก ISvgImage.getSvgData เมื่อต้องการแหล่งเวกเตอร์เดิม
ครอปภาพ
การครอปเปลี่ยนส่วนของภาพที่มองเห็นได้ภายในกรอบ ค่าแบบครอปบน IPictureFillFormat เป็นเปอร์เซ็นต์ของมิตภาพต้นฉบับ การครอปไม่ลบพิกเซลที่ซ่อนอยู่จากภาพฝัง; เพียงเปลี่ยนพื้นที่ที่มองเห็นเท่านั้น
ตัวอย่างต่อไปนี้ค้นหากรอบรูปภาพอย่างปลอดภัยและใช้ค่าแบบครอป:
import com.aspose.slides.*;
Presentation presentation = new Presentation("sample.pptx");
try {
ISlide slide = presentation.getSlides().get_Item(0);
IPictureFrame pictureFrame = null;
for (IShape shape : slide.getShapes()) {
if (shape instanceof IPictureFrame) {
pictureFrame = (IPictureFrame) shape;
break;
}
}
if (pictureFrame != null) {
pictureFrame.getPictureFormat().setCropLeft(23.6f);
pictureFrame.getPictureFormat().setCropRight(21.5f);
pictureFrame.getPictureFormat().setCropTop(3f);
pictureFrame.getPictureFormat().setCropBottom(31f);
presentation.save("cropped-image.pptx", SaveFormat.Pptx);
}
} finally {
presentation.dispose();
}
เนื่องจากข้อมูลภาพที่ซ่อนอยู่ยังคงอยู่ การครอปสามารถแก้ไขได้ในภายหลังโดยไม่สูญเสียพิกเซลต้นฉบับ หากขนาดไฟล์มีความสำคัญมากกว่าการย้อนกลับ พื้นที่ครอปสามารถลบออกได้ตามที่อธิบายในส่วนต่อไป
ลบข้อมูลภาพที่ถูกครอป
IPictureFillFormat.deletePictureCroppedAreas จะลบข้อมูลภาพที่อยู่นอกสี่เหลี่ยมครอปปัจจุบันและคืนค่าแหล่งภาพที่เหลือ วิธีนี้สามารถลดขนาดไฟล์ได้ แต่เป็นการเพิ่มประสิทธิภาพที่ทำลาย: หลังจากบันทึกงานนำเสนอแล้ว พิกเซลที่ถูกลบจะไม่มีอยู่เพื่อทำการยกเลิกครอปในภายหลัง
import com.aspose.slides.*;
Presentation presentation = new Presentation("cropped-image.pptx");
try {
ISlide slide = presentation.getSlides().get_Item(0);
IPictureFrame pictureFrame = null;
for (IShape shape : slide.getShapes()) {
if (shape instanceof IPictureFrame) {
pictureFrame = (IPictureFrame) shape;
break;
}
}
if (pictureFrame != null) {
IPPImage croppedImage = pictureFrame.getPictureFormat().deletePictureCroppedAreas();
if (croppedImage != null) {
presentation.save("cropped-data-removed.pptx", SaveFormat.Pptx);
}
}
} finally {
presentation.dispose();
}
เมธอดนี้อาจเพิ่มแหล่งภาพใหม่เข้าไปในงานนำเสนอ หากภาพต้นฉบับถูกใช้โดยกรอบรูปภาพอื่น ๆ กรอบเหล่านั้นยังต้องการแหล่งเดิมอยู่ ดังนั้นการลบพื้นที่ที่ครอปไม่จำเป็นต้องลดจำนวนภาพทั้งหมด การครอปเนื้อหา WMF หรือ EMF ด้วยวิธีนี้จะทำให้ผลลัพธ์ที่ครอปถูกเรสเตอร์เป็น PNG
บีบอัดภาพเรสเตอร์
IPictureFillFormat.compressImage ลดความละเอียดของภาพเรสเตอร์สัมพันธ์กับขนาดที่ภาพแสดง มันยังสามารถลบพื้นที่ที่ครอปในขั้นตอนเดียวได้ เมธอดจะคืนค่า true เมื่อภาพถูกปรับขนาดหรือครอป และ false เมื่อไม่จำเป็นต้องเปลี่ยนแปลง
ใช้ค่าที่กำหนดไว้ล่วงหน้าใน PicturesCompression เมื่อความละเอียดเป้าหมายมาตรฐานเพียงพอ:
import com.aspose.slides.*;
Presentation presentation = new Presentation("sample.pptx");
try {
ISlide slide = presentation.getSlides().get_Item(0);
IPictureFrame pictureFrame = null;
for (IShape shape : slide.getShapes()) {
if (shape instanceof IPictureFrame) {
pictureFrame = (IPictureFrame) shape;
break;
}
}
if (pictureFrame != null) {
boolean compressed = pictureFrame.getPictureFormat().compressImage(true, PicturesCompression.Dpi150);
System.out.println(compressed ? "The image was compressed." : "No compression was necessary.");
presentation.save("compressed-image.pptx", SaveFormat.Pptx);
}
} finally {
presentation.dispose();
}
สามารถส่งค่าความละเอียด DPI บวกแบบกำหนดเองแทนค่าที่กำหนดไว้ล่วงหน้าเมื่อจำเป็นต้องมีเป้าหมายเฉพาะ
การบีบอัดมุ่งเน้นที่ภาพเรสเตอร์; เนื้อหา SVG และเมตาไฟล์จะไม่ถูกลดลงด้วยกระบวนการบีบอัดนี้ อีกทั้งจำไว้ว่า ความละเอียดที่ต่ำลงและการลบพื้นที่ที่ครอปไม่สามารถกู้คืนจากงานนำเสนอที่เพิ่มประสิทธิภาพได้ เลือกความละเอียดเป้าหมายตามขนาดสูงสุดที่ภาพจะถูกดูหรือส่งออกจริง ไม่ใช่การใช้ DPI ต่ำสุดทั่วถึง
จัดการเอฟเฟกต์การแปลงภาพ
สำหรับกระบวนการทำงานที่ครอบคลุมความสว่าง ความคอนทราสต์ การแปลงสี เบลอ เอฟเฟกต์แอลฟา เชนที่จัดลำดับ การตรวจสอบ การลบ และการตรวจสอบรอบเดียว ดูที่ Image Transform Effects
ล็อกเรขาคณิตของกรอบรูปภาพ
การตั้งค่าใน IPictureFrameLock ควบคุมว่าการดำเนินการแก้ไขใดถูกปิดการใช้งานสำหรับกรอบรูปภาพ ตัวอย่างเช่น setAspectRatioLocked จะคงอัตราส่วนของรูปทรงขณะเปลี่ยนขนาด
import com.aspose.slides.*;
Presentation presentation = new Presentation();
try {
ISlide slide = presentation.getSlides().get_Item(0);
IPPImage image;
IImage sourceImage = Images.fromFile("photo.jpg");
try {
image = presentation.getImages().addImage(sourceImage);
} finally {
sourceImage.dispose();
}
IPictureFrame pictureFrame = slide.getShapes().addPictureFrame(ShapeType.Rectangle, 50, 100, image.getWidth(), image.getHeight(), image);
pictureFrame.getPictureFrameLock().setAspectRatioLocked(true);
presentation.save("locked-picture-frame.pptx", SaveFormat.Pptx);
} finally {
presentation.dispose();
}
การล็อกนี้มีผลต่อรูปทรงกรอบรูปภาพ ไม่ได้บังคับให้ภาพต้นฉบับถูกรีแซมเปิลหรือเปลี่ยนอัตราส่วนถาวร
ปรับค่า StretchOffset
เมื่อโหมดการเติมรูปภาพเป็น stretch, ค่าตำแหน่ง stretch‑offset บน IPictureFillFormat จะกำหนดสี่เหลี่ยมเติมสัมพันธ์กับกล่องขอบของกรอบรูปภาพ เปอร์เซ็นต์บวกจะสร้างการเว้นจากขอบ, ส่วนเปอร์เซ็นต์ลบจะสร้างการขยายออก
นี่ต่างจากการครอป ค่าแบบครอปเลือกส่วนของภาพต้นฉบับที่มองเห็น; stretch‑offset เปลี่ยนสี่เหลี่ยมที่ภาพเติมจะถูกยืดขยายไป
import com.aspose.slides.*;
Presentation presentation = new Presentation();
try {
ISlide slide = presentation.getSlides().get_Item(0);
IPPImage image;
IImage sourceImage = Images.fromFile("photo.png");
try {
image = presentation.getImages().addImage(sourceImage);
} finally {
sourceImage.dispose();
}
IPictureFrame pictureFrame = slide.getShapes().addPictureFrame(ShapeType.Rectangle, 10, 10, 400, 300, image);
pictureFrame.getPictureFormat().setPictureFillMode(PictureFillMode.Stretch);
pictureFrame.getPictureFormat().setStretchOffsetLeft(12f);
pictureFrame.getPictureFormat().setStretchOffsetRight(12f);
pictureFrame.getPictureFormat().setStretchOffsetTop(8f);
pictureFrame.getPictureFormat().setStretchOffsetBottom(8f);
presentation.save("stretch-offsets.pptx", SaveFormat.Pptx);
} finally {
presentation.dispose();
}
ใช้ stretch‑offset สำหรับการวางตำแหน่งการเติม ใช้คุณสมบัติการครอปเมื่อเป้าหมายคือการซ่อนขอบของภาพต้นฉบับ
การจัดเก็บ, ขนาดไฟล์, และข้อพิจารณาการส่งออก
การแลกเปลี่ยนหลักจัดการได้ง่ายเมื่อการจัดเก็บภาพและการจัดรูปแบบกรอบรูปภาพถูกแยกออกจากกัน:
- ภาพฝัง ทำให้งานนำเสนอเป็นอิสระและเป็นทางเลือกที่เชื่อถือได้ที่สุดสำหรับการแชร์และการเรนเดอร์บนเซิร์ฟเวอร์ แต่ภาพเรสเตอร์ขนาดใหญ่จะเพิ่มขนาด PPTX และการใช้หน่วยความจำ
- ภาพที่ลิงก์ สามารถทำให้แพ็คเกจมีขนาดเล็กลง, แต่การนำเสนอขึ้นกับไฟล์ภายนอกที่ต้องคงอยู่ที่เส้นทางหรือสถานที่ที่จัดเก็บไว้
- การครอป เริ่มต้นเป็นแบบไม่ทำลาย; พิกเซลที่ซ่อนยังคงฝังอยู่จนกว่าจะลบพื้นที่ที่ครอปโดยเจตนาหรือระหว่างการบีบอัด
- การบีบอัด สามารถลดขนาดไฟล์ได้อย่างมากสำหรับภาพเรสเตอร์ที่ใหญ่เกินไป, แต่จะเสียความละเอียดของแหล่งต้นฉบับ ควรทำหลังจากทราบขนาดที่จะแสดงบนสไลด์แล้ว
- ภาพ SVG ควรคงเป็น SVG เมื่อการรักษาเวกเตอร์สำคัญ; สกัด SVG ฝังโดยตรงเมื่อต้องการแหล่งเวกเตอร์เอง การส่งออกสไลด์เป็นเรสเตอร์จะเปลี่ยนสไลด์ที่เรนเดอร์เป็นพิกเซลเสมอ
- ภาพที่ใชซ้ำ ควรใช้แหล่ง IPPImage ที่มีอยู่แล้วเมื่อเป็นไปได้ แทนการโหลดไฟล์เดียวกันหลายครั้งในกระบวนการทำงานของงานนำเสนอ
สำหรับงานนำเสนอขนาดใหญ่ การเพิ่มประสิทธิภาพภาพมักจะมีประสิทธิผลมากที่สุดเมื่อทำแบบเลือกเฉพาะ: เก็บโลโก้และแผนภาพเป็นเนื้อหาเวกเตอร์, บีบอัดภาพถ่ายตามขนาดการแสดงจริง, ลบพิกเซลที่ครอปเฉพาะเมื่อไม่ต้องการการแก้ไขต่อภายหลัง, และหลีกเลี่ยงลิงก์ภายนอกเว้นแต่การจัดการการพึ่งพาจะเป็นส่วนหนึ่งของการออกแบบการปรับใช้
FAQ
ความแตกต่างระหว่างกรอบรูปภาพและแหล่งข้อมูลภาพคืออะไร?
IPPImage แสดงถึงแหล่งข้อมูลภาพที่เชื่อมโยงกับงานนำเสนอ ส่วน IPictureFrame เป็นรูปทรงบนสไลด์ที่แสดงภาพและเก็บเรขาคณิตและการจัดรูปแบบระดับกรอบ เช่น ขนาด, การหมุน, ค่าแบบครอป, เอฟเฟกต์และการล็อก
ควรฝังหรือเชื่อมโยงภาพ?
ฝังภาพเมื่อการนำเสนอจำเป็นต้องพกพา, เก็บถาวร หรือเรนเดอร์โดยไม่ต้องอ้างอิงแหล่งภายนอก เชื่อมโยงภาพเฉพาะเมื่อต้องการเก็บไฟล์ภาพออกจาก PPTX อย่างตั้งใจและตำแหน่งภายนอกสามารถดูแลได้อย่างน่าเชื่อถือ
การครอปลดขนาดไฟล์ PPTX หรือไม่?
ไม่โดยตรง การตั้งค่าครอปปกติจะซ่อนส่วนของภาพต้นฉบับแต่ยังคงเก็บพิกเซลไว้ ใช้ IPictureFillFormat.deletePictureCroppedAreas หรือบีบอัดภาพพร้อมการลบพื้นที่ที่ครอปเมื่อพิกเซลเหล่านั้นสามารถละทิ้งได้อย่างถาวร
สามารถคืนคุณภาพของภาพหลังบีบอัดได้หรือไม่?
ไม่ การบีบอัดอาจลดความละเอียดเรสเตอร์ที่เก็บไว้และการลบพื้นที่ที่ครอปจะทำให้ข้อมูลภาพหายไป หากอาจต้องการการแก้ไขความละเอียดสูงในภายหลัง ควรเก็บภาพต้นฉบับแยกนอกงานนำเสนอ
ควรจัดการกับภาพ SVG อย่างไร?
เก็บเนื้อหา SVG เป็น SVG เมื่อความแม่นยำของเวกเตอร์สำคัญ ISvgImage ที่ฝังสามารถสกัดได้โดยตรง การเรนเดอร์สไลด์เป็นรูปแบบเรสเตอร์เช่น PNG หรือ JPEG จะทำให้ SVG เป็นพิกเซล การส่งออกสไลด์เป็น PDF หรือ SVG ก็เป็นการเรนเดอร์เช่นกัน
จะหลีกเลี่ยงการแคสต์ที่ไม่ปลอดภัยเมื่ออ่านสไลด์ที่มีอยู่ได้อย่างไร?
ตรวจสอบประเภทของรูปทรงก่อนใช้สมาชิกเฉพาะกรอบรูปภาพ การตรวจสอบ instanceof กับ IPictureFrame จะหลีกเลี่ยงการแคสต์ที่ไม่ถูกต้องและให้โค้ดจัดการกับสไลด์ที่ไม่มีกรอบรูปภาพได้อย่างเหมาะสม.