Quản lý các hiệu ứng biến đổi ảnh trong bản trình chiếu với JavaScript
Tổng quan
Aspose.Slides biểu diễn việc điều chỉnh hình ảnh dưới dạng một bộ sưu tập có thứ tự của các thao tác biến đổi ảnh. Đối với một khung hình ảnh, bắt đầu từ Picture của khung và truy cập Picture.getImageTransform. Bộ ImageTransformOperationCollection trả về cho phép bạn thêm, liệt kê, kiểm tra, xóa và xóa toàn bộ các hiệu ứng mà không cần ghi lại lại dữ liệu ảnh gốc.
Bài viết này trình bày một quy trình hoàn chỉnh cho độ sáng và độ tương phản, biến đổi màu, làm mờ, độ trong suốt, chuỗi hiệu ứng có thứ tự, giá trị hiệu quả, việc xóa, và kiểm tra vòng quay PPTX.
Hiểu Quyền Sở Hữu Hiệu Ứng và Tái Sử Dụng Ảnh
Một tài nguyên ảnh và hình ảnh hiển thị nó là các đối tượng khác nhau:
- PPImage lưu trữ hoặc tham chiếu dữ liệu ảnh nguồn thuộc bản trình chiếu.
- Picture thuộc về một phần tô hình và tham chiếu tới tài nguyên ảnh trong khi lưu trữ bộ sưu tập biến đổi ảnh.
- PictureFrame là hình dạng trên slide sở hữu phần tô hình, hình học, cài đặt cắt và các định dạng mức khung khác.
Do đó, các thao tác biến đổi ảnh không thay đổi byte trong PPImage. Khi cùng một PPImage được truyền cho ShapeCollection.addPictureFrame hơn một lần, mỗi khung hình mới sẽ nhận được Picture và bộ sưu tập biến đổi của riêng mình. Áp dụng hiệu ứng xám cho một khung không làm cho các khung khác cũng xám, mặc dù tất cả chúng cùng tái sử dụng cùng một tài nguyên ảnh nhúng.
Mô hình Picture.getImageTransform cũng được sử dụng cho các phần tô hình khác, chẳng hạn như hình dạng hoặc nền slide. Các ví dụ dưới đây tập trung vào khung hình ảnh.
Sử Dụng Dải Thông Số Hợp Lệ và Đơn Vị
Các phương pháp được minh họa sử dụng các dải và đơn vị ngữ nghĩa sau. Giữ các giá trị trong các dải này ngay cả khi một phiên bản thư viện cụ thể không từ chối ngay mọi giá trị ngoài phạm vi; định dạng bản trình chiếu mục tiêu có thể chuẩn hoá, bỏ qua, hoặc từ chối dữ liệu không hợp lệ khi lưu hoặc khi PowerPoint mở tập tin.
| Thao tác | Tham số | Dải hợp lệ và đơn vị |
|---|---|---|
| addBrightnessContrastEffect | brightness, contrast |
-100 tới 100, phần trăm; 0 giữ thành phần không thay đổi. |
| addGrayScaleEffect | Không có | Không có tham số số. Alpha không thay đổi. |
| addDuotoneEffect | color1, color2 |
Hai màu cho pixel tối và sáng. Các kênh RGB và alpha trong java.awt.Color dùng giá trị từ 0 tới 255. |
| addTintEffect | hue, amount |
Hue từ 0 (bao gồm) tới 360 (không bao gồm), tính bằng độ; amount từ -100 tới 100, phần trăm. |
| addHSLEffect | hue, saturation, luminance |
Hue từ 0 (bao gồm) tới 360 (không bao gồm), tính bằng độ; saturation và luminance từ -100 tới 100, phần trăm. |
| addColorReplaceEffect | color |
Màu thay thế sử dụng các giá trị kênh từ 0 tới 255. Giá trị alpha hiện có không thay đổi. |
| addBlurEffect | radius, grow |
Bán kính không âm và đo bằng points; grow là Boolean kiểm soát việc nội dung mờ có thể mở rộng ra ngoài giới hạn ban đầu hay không. |
| addAlphaModulateFixedEffect | amount |
Phần trăm không âm. Dùng 0 tới 100 cho việc điều chỉnh độ mờ thông thường: 0 là hoàn toàn trong suốt và 100 giữ nguyên alpha hiện có. |
| addAlphaReplaceEffect | alpha |
0 tới 100, phần trăm độ mờ. |
| addAlphaBiLevelEffect | threshold |
0 tới 100, phần trăm ngưỡng alpha. Giá trị dưới ngưỡng trở thành trong suốt; giá trị bằng hoặc trên ngưỡng trở thành mờ. |
Đối với điều chỉnh alpha cố định, độ trong suốt và độ mờ là các khái niệm bổ sung nhau. Ví dụ, độ trong suốt 35% tương đương với mức độ điều chế alpha 65%.
Áp Dụng Độ Sáng và Độ Tương Phản
ImageTransformOperationCollection.addBrightnessContrastEffect trả về một thao tác BrightnessContrast. Các cài đặt vô hướng được cung cấp khi tạo thao tác. BrightnessContrast.getEffective trả về các giá trị chỉ đọc đã tính toán mà có thể kiểm tra hoặc ghi lại.
Ví dụ sau tăng độ sáng lên 15% và độ tương phản lên 20%, sau đó tạo bản xem trước mà không thay đổi ảnh nhúng:
const 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("photo.png");
try {
image = presentation.getImages().addImage(sourceImage);
} finally {
sourceImage.dispose();
}
const pictureFrame = slide.getShapes().addPictureFrame(aspose.slides.ShapeType.Rectangle, 50, 50, 400, 260, image);
const imageTransform = pictureFrame.getPictureFormat().getPicture().getImageTransform();
const brightnessContrast = imageTransform.addBrightnessContrastEffect(15, 20);
const effectiveValues = brightnessContrast.getEffective();
console.log("Brightness: " + effectiveValues.getBrightness() + "%");
console.log("Contrast: " + effectiveValues.getContrast() + "%");
const preview = slide.getImage();
try {
preview.save("brightness-contrast-preview.png", aspose.slides.ImageFormat.Png);
} finally {
preview.dispose();
}
} finally {
presentation.dispose();
}
BrightnessContrast là một phần mở rộng hiệu ứng ảnh Office 2010 và ít di động hơn so với hiệu ứng luminance chuẩn DrawingML. Khi độ sáng và độ tương phản phải vẫn có thể chỉnh sửa sau vòng quay PPTX, hãy sử dụng ImageTransformOperationCollection.addLuminanceEffect và xác minh kết quả sau khi mở lại tệp. Phần giới hạn định dạng giải thích chi tiết hơn về sự khác biệt này.
Áp Dụng Biến Đổi Màu Sắc
Các hiệu ứng màu có thể được áp dụng độc lập cho các khung hình ảnh khác nhau mà cùng tái sử dụng một tài nguyên ảnh. Ví dụ sau tạo năm khung và áp dụng các hiệu ứng xám, duotone, tint, điều chỉnh HSL và thay thế màu.
Duotone chứa hai tham số màu có thể chỉnh sửa độc lập: color1 ánh xạ cho pixel tối, trong khi color2 ánh xạ cho pixel sáng. Điều này làm cho nó trở thành một ví dụ hữu ích cho hiệu ứng có cài đặt phức tạp hơn một giá trị vô hướng duy nhất.
const 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("photo.png");
try {
image = presentation.getImages().addImage(sourceImage);
} finally {
sourceImage.dispose();
}
const grayFrame = slide.getShapes().addPictureFrame(aspose.slides.ShapeType.Rectangle, 20, 20, 180, 120, image);
grayFrame.getPictureFormat().getPicture().getImageTransform().addGrayScaleEffect();
const duotoneFrame = slide.getShapes().addPictureFrame(aspose.slides.ShapeType.Rectangle, 220, 20, 180, 120, image);
const duotone = duotoneFrame.getPictureFormat().getPicture().getImageTransform().addDuotoneEffect();
duotone.getColor1().setColor(java.newInstanceSync("java.awt.Color", 0, 0, 128));
duotone.getColor2().setColor(java.newInstanceSync("java.awt.Color", 255, 215, 0));
const tintFrame = slide.getShapes().addPictureFrame(aspose.slides.ShapeType.Rectangle, 420, 20, 180, 120, image);
tintFrame.getPictureFormat().getPicture().getImageTransform().addTintEffect(210, 35);
const hslFrame = slide.getShapes().addPictureFrame(aspose.slides.ShapeType.Rectangle, 120, 170, 180, 120, image);
hslFrame.getPictureFormat().getPicture().getImageTransform().addHSLEffect(30, 20, -10);
const replacementFrame = slide.getShapes().addPictureFrame(aspose.slides.ShapeType.Rectangle, 320, 170, 180, 120, image);
const colorReplacement = replacementFrame.getPictureFormat().getPicture().getImageTransform().addColorReplaceEffect();
colorReplacement.getColor().setColor(java.newInstanceSync("java.awt.Color", 100, 149, 237));
presentation.save("color-transformations.pptx", aspose.slides.SaveFormat.Pptx);
} finally {
presentation.dispose();
}
addColorReplaceEffect thay thế màu của mọi pixel bằng một màu cố định trong khi giữ nguyên alpha. Nó khác với addColorChangeEffect, cái mà ánh xạ một màu nguồn sang màu đích và cho phép cả hai định dạng màu nguồn và đích.
Thêm Hiệu Ứng Làm Mờ, Độ Trong Suốt và Alpha
addBlurEffect ảnh hưởng tới tất cả các kênh màu, bao gồm alpha. Đặt grow thành true khi cạnh mờ có thể mở rộng ra ngoài giới hạn ảnh gốc.
Đối với độ trong suốt đồng nhất, sử dụng addAlphaModulateFixedEffect. Nó nhân mỗi giá trị alpha hiện có, vì vậy các pixel bán trong suốt vẫn giữ tỷ lệ khác nhau. addAlphaReplaceEffect thay vào đó gán một giá trị alpha duy nhất cho mọi pixel. addAlphaBiLevelEffect chuyển đổi alpha thành hai mức dựa trên một ngưỡng.
const 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("photo.png");
try {
image = presentation.getImages().addImage(sourceImage);
} finally {
sourceImage.dispose();
}
const blurredFrame = slide.getShapes().addPictureFrame(aspose.slides.ShapeType.Rectangle, 20, 20, 200, 140, image);
const blur = blurredFrame.getPictureFormat().getPicture().getImageTransform().addBlurEffect(4.5, true);
blur.setRadius(5);
const transparentFrame = slide.getShapes().addPictureFrame(aspose.slides.ShapeType.Rectangle, 240, 20, 200, 140, image);
const alphaModulate = transparentFrame.getPictureFormat().getPicture().getImageTransform().addAlphaModulateFixedEffect(65);
alphaModulate.setAmount(60);
const uniformAlphaFrame = slide.getShapes().addPictureFrame(aspose.slides.ShapeType.Rectangle, 20, 180, 200, 140, image);
uniformAlphaFrame.getPictureFormat().getPicture().getImageTransform().addAlphaReplaceEffect(55);
const binaryAlphaFrame = slide.getShapes().addPictureFrame(aspose.slides.ShapeType.Rectangle, 240, 180, 200, 140, image);
const alphaBiLevel = binaryAlphaFrame.getPictureFormat().getPicture().getImageTransform().addAlphaBiLevelEffect(50);
alphaBiLevel.setThreshold(45);
binaryAlphaFrame.getPictureFormat().getPicture().getImageTransform().addAlphaInverseEffect();
presentation.save("blur-and-alpha-effects.pptx", aspose.slides.SaveFormat.Pptx);
} finally {
presentation.dispose();
}
Các thao tác alpha không có tham số khác bao gồm addAlphaCeilingEffect, khiến mọi alpha khác 0 trở thành hoàn toàn mờ; addAlphaFloorEffect, khiến mọi alpha dưới 100% trở thành hoàn toàn trong suốt; và addAlphaInverseEffect, đổi alpha thành 100% - alpha.
Xây Dựng Chuỗi Hiệu Ứng Có Thứ Tự
Mỗi phương thức add...Effect thêm một thao tác mới vào cuối bộ sưu tập. Bộ render sử dụng bộ sưu tập như một pipeline có thứ tự: đầu ra của thao tác 0 trở thành đầu vào của thao tác 1, cứ như vậy. Do đó, cùng các thao tác nhưng ở thứ tự khác có thể tạo ra ảnh khác nhau.
Ví dụ, xám rồi tint sẽ đầu tiên loại bỏ thông tin màu sắc và sau đó đổi màu kết quả luminance. Tint rồi xám lại loại bỏ tint một lần nữa. Tương tự, thay thế alpha có thể ghi đè các giá trị alpha được tính bởi các thao tác trước, trong khi điều chế alpha giữ lại sự khác biệt tương đối của chúng.
Ví dụ sau xây dựng một chuỗi bốn thao tác, lưu dưới dạng PPTX, mở lại bản trình chiếu, kiểm tra cả loại thao tác và thứ tự của chúng, và render kết quả đã mở lại:
const 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("photo.png");
try {
image = presentation.getImages().addImage(sourceImage);
} finally {
sourceImage.dispose();
}
const pictureFrame = slide.getShapes().addPictureFrame(aspose.slides.ShapeType.Rectangle, 50, 50, 400, 260, image);
const imageTransform = pictureFrame.getPictureFormat().getPicture().getImageTransform();
imageTransform.addGrayScaleEffect();
imageTransform.addTintEffect(220, 25);
imageTransform.addBlurEffect(2.5, false);
imageTransform.addAlphaModulateFixedEffect(80);
presentation.save("image-transform-chain.pptx", aspose.slides.SaveFormat.Pptx);
} finally {
presentation.dispose();
}
const reopenedPresentation = new aspose.slides.Presentation("image-transform-chain.pptx");
try {
const reopenedShape = reopenedPresentation.getSlides().get_Item(0).getShapes().get_Item(0);
if (java.instanceOf(reopenedShape, "com.aspose.slides.IPictureFrame")) {
const reopenedTransform = reopenedShape.getPictureFormat().getPicture().getImageTransform();
const orderIsPreserved = reopenedTransform.size() === 4 &&
java.instanceOf(reopenedTransform.get_Item(0), "com.aspose.slides.IGrayScale") &&
java.instanceOf(reopenedTransform.get_Item(1), "com.aspose.slides.ITint") &&
java.instanceOf(reopenedTransform.get_Item(2), "com.aspose.slides.IBlur") &&
java.instanceOf(reopenedTransform.get_Item(3), "com.aspose.slides.IAlphaModulateFixed");
console.log(orderIsPreserved ? "The effect chain was preserved." : "The effect chain changed during the round trip.");
const renderedSlide = reopenedPresentation.getSlides().get_Item(0).getImage();
try {
renderedSlide.save("reopened-effect-chain.png", aspose.slides.ImageFormat.Png);
} finally {
renderedSlide.dispose();
}
} else {
console.log("The reopened shape is not a picture frame.");
}
} finally {
reopenedPresentation.dispose();
}
Bộ sưu tập không áp đặt một ma trận tương thích hạn chế các thao tác màu, alpha và làm mờ thành các chuỗi riêng biệt. Chúng có thể được kết hợp, nhưng không phải lúc nào cũng hữu ích. Thay thế màu cố định loại bỏ biến thể RGB do các hiệu ứng màu trước tạo ra; xám sau duotone loại bỏ hai màu đã chọn; và các thao tác alpha ceiling, floor, replacement hoặc bi‑level có thể xóa chi tiết alpha được tạo ra trước. Hãy xây dựng chuỗi dựa trên trình tự xử lý pixel mong muốn thay vì coi các mục trong đó là các cờ định dạng không có thứ tự.
Kiểm Tra Giá Trị Có Thể Chỉnh Sửa và Giá Trị Hiệu Quả
Một thao tác có thể chỉnh sửa là đối tượng được lưu trong Picture.getImageTransform. Tùy vào hiệu ứng, nó có thể mở ra các thành viên có thể ghi trực tiếp. Ví dụ, Blur mở ra các giá trị radius và grow có thể ghi, AlphaModulateFixed mở ra amount có thể ghi, và AlphaBiLevel mở ra threshold có thể ghi. Các hiệu ứng màu như Duotone mở ra các đối tượng ColorFormat có thể thay đổi.
Một số thao tác, bao gồm BrightnessContrast, HSL, Tint, và AlphaReplace, không mở ra các vô hướng tạo ra dưới dạng thuộc tính có thể ghi. Để thay đổi các cài đặt này, hãy xóa thao tác và thêm một thao tác thay thế tại vị trí yêu cầu.
Dữ liệu hiệu quả trả về bởi getEffective() được tính toán và chỉ đọc. Nó hữu ích để giải quyết các màu phụ thuộc vào theme và đọc các giá trị chuẩn hoá mà bộ render sử dụng, nhưng không phải là một bề mặt chỉnh sửa khác. Ví dụ sau liệt kê chuỗi và kiểm tra các giá trị hiệu quả ở nơi API cung cấp chúng:
const aspose = {};
aspose.slides = require("aspose.slides.via.java");
const java = require("java");
const presentation = new aspose.slides.Presentation("image-transform-chain.pptx");
try {
const shapes = presentation.getSlides().get_Item(0).getShapes();
let pictureFrame = null;
for (let index = 0; index < shapes.size(); index++) {
const shape = shapes.get_Item(index);
if (java.instanceOf(shape, "com.aspose.slides.IPictureFrame")) {
pictureFrame = shape;
break;
}
}
if (pictureFrame != null) {
const imageTransform = pictureFrame.getPictureFormat().getPicture().getImageTransform();
for (let index = 0; index < imageTransform.size(); index++) {
const operation = imageTransform.get_Item(index);
console.log(index + ": " + operation.getClass().getSimpleName());
if (java.instanceOf(operation, "com.aspose.slides.IBrightnessContrast")) {
const data = operation.getEffective();
console.log(" Brightness: " + data.getBrightness());
console.log(" Contrast: " + data.getContrast());
} else if (java.instanceOf(operation, "com.aspose.slides.ILuminance")) {
const data = operation.getEffective();
console.log(" Brightness: " + data.getBrightness());
console.log(" Contrast: " + data.getContrast());
} else if (java.instanceOf(operation, "com.aspose.slides.IDuotone")) {
const data = operation.getEffective();
console.log(" Dark color: " + data.getColor1());
console.log(" Light color: " + data.getColor2());
} else if (java.instanceOf(operation, "com.aspose.slides.IColorReplace")) {
const data = operation.getEffective();
console.log(" Replacement color: " + data.getColor());
} else if (java.instanceOf(operation, "com.aspose.slides.IHSL")) {
const data = operation.getEffective();
console.log(" HSL: " + data.getHue() + ", " + data.getSaturation() + ", " + data.getLuminance());
} else if (java.instanceOf(operation, "com.aspose.slides.ITint")) {
const data = operation.getEffective();
console.log(" Tint: " + data.getHue() + ", " + data.getAmount());
} else if (java.instanceOf(operation, "com.aspose.slides.IBlur")) {
const data = operation.getEffective();
console.log(" Blur radius: " + data.getRadius() + " pt");
} else if (java.instanceOf(operation, "com.aspose.slides.IAlphaModulateFixed")) {
const data = operation.getEffective();
console.log(" Alpha amount: " + data.getAmount() + "%");
} else if (java.instanceOf(operation, "com.aspose.slides.IAlphaReplace")) {
const data = operation.getEffective();
console.log(" Replacement alpha: " + data.getAlpha() + "%");
} else if (java.instanceOf(operation, "com.aspose.slides.IAlphaBiLevel")) {
const data = operation.getEffective();
console.log(" Alpha threshold: " + data.getThreshold() + "%");
}
}
}
} finally {
presentation.dispose();
}
Các hiệu ứng không có tham số như xám, alpha ceiling và alpha inverse vẫn có một đối tượng dữ liệu hiệu quả, nhưng không có cài đặt vô hướng để in. Sự hiện diện và vị trí của chúng trong bộ sưu tập là thông tin quan trọng.
Xóa Hoặc Xóa Toàn Bộ Biến Đổi Ảnh
Sử dụng ImageTransformOperationCollection.removeAt để xóa một thao tác theo chỉ số. Vì các chỉ số sẽ thay đổi sau khi xóa, hãy tìm mục tiêu trước và xóa nó sau khi liệt kê. Sử dụng ImageTransformOperationCollection.clear để xóa toàn bộ chuỗi.
const aspose = {};
aspose.slides = require("aspose.slides.via.java");
const java = require("java");
const presentation = new aspose.slides.Presentation("image-transform-chain.pptx");
try {
const shapes = presentation.getSlides().get_Item(0).getShapes();
let pictureFrame = null;
for (let index = 0; index < shapes.size(); index++) {
const shape = shapes.get_Item(index);
if (java.instanceOf(shape, "com.aspose.slides.IPictureFrame")) {
pictureFrame = shape;
break;
}
}
if (pictureFrame != null) {
const imageTransform = pictureFrame.getPictureFormat().getPicture().getImageTransform();
let blurIndex = -1;
for (let index = 0; index < imageTransform.size(); index++) {
if (java.instanceOf(imageTransform.get_Item(index), "com.aspose.slides.IBlur")) {
blurIndex = index;
break;
}
}
if (blurIndex >= 0) {
imageTransform.removeAt(blurIndex);
console.log("The blur operation was removed.");
}
imageTransform.clear();
console.log("Remaining operations: " + imageTransform.size());
presentation.save("image-transforms-cleared.pptx", aspose.slides.SaveFormat.Pptx);
}
} finally {
presentation.dispose();
}
Xóa hoặc xóa toàn bộ biến đổi chỉ thay đổi định dạng hình ảnh. Nó không xóa, nén lại, hoặc thay đổi bất kỳ tài nguyên PPImage được tái sử dụng nào.
Xem Xét Định Dạng Bản Trình Chiếu và Đích Xuất
Biến đổi ảnh bắt nguồn từ DrawingML, do đó PPTX là định dạng chỉnh sửa ưu tiên cho các chuỗi hiệu ứng. Ngay cả với PPTX, không phải mọi thao tác đều có tính di động giống nhau:
- Các thao tác DrawingML tiêu chuẩn như luminance, grayscale, duotone, tint, HSL, blur và các thao tác alpha phổ biến có cơ hội cao nhất tồn tại qua vòng quay PPTX. Luôn mở lại tệp đã tạo và kiểm tra bộ sưu tập khi việc bảo tồn là yêu cầu.
- BrightnessContrast là một phần mở rộng Office 2010 chứ không phải thao tác luminance DrawingML tiêu chuẩn. Nó có thể dùng cho việc render bộ nhớ, nhưng không được đảm bảo vẫn còn là một thao tác BrightnessContrast có thể chỉnh sửa sau khi lưu và mở lại PPTX. Thích hợp hơn là dùng addLuminanceEffect cho các điều chỉnh độ sáng và độ tương phản bền vững.
- Định dạng PPT nhị phân xuất hiện trước mô hình hiệu ứng DrawingML đầy đủ. Lưu thành PPT có thể bỏ qua các thao tác không hỗ trợ, rút gọn chuỗi thành một tập con được hỗ trợ, hoặc xấp xỉ hình ảnh. Không sử dụng PPT làm định dạng xác minh cho một chuỗi chỉnh sửa phức tạp.
- Render thành PNG, JPEG, TIFF, PDF, SVG, HTML hoặc các đầu ra hình ảnh khác áp dụng chuỗi được hỗ trợ vào hình ảnh hiển thị. Những đầu ra này không chứa một ImageTransformOperationCollection có thể chỉnh sửa; các định dạng raster làm phẳng kết quả thành pixel, và các xuất tài liệu/vector lưu trữ đại diện render riêng của chúng.
- Hiệu ứng không làm cho một ảnh liên kết tự chứa. Render một hình ảnh liên kết vẫn phụ thuộc vào việc tài nguyên liên kết có sẵn khi bản trình chiếu được tải.
Các trình chiếu khác nhau có thể render các trường hợp biên khác nhau, đặc biệt khi nhiều thao tác alpha hoặc giảm màu được kết hợp. Đối với đầu ra quan trọng, hãy kiểm tra cả vòng quay chỉnh sửa và định dạng xuất cuối cùng bằng cùng phiên bản Aspose.Slides đã dùng trong sản xuất.
Câu Hỏi Thường Gặp
Các hiệu ứng biến đổi ảnh có thay đổi dữ liệu ảnh nhúng không?
Không. Các thao tác thuộc về Picture được sử dụng bởi phần tô hình. Các byte PPImage nền vẫn không thay đổi.
Hai khung hình ảnh tái sử dụng cùng một ảnh sẽ chia sẻ các hiệu ứng không?
Không. Tái sử dụng một PPImage tránh trùng lặp dữ liệu ảnh, nhưng mỗi khung hình thường có một Picture và bộ sưu tập biến đổi riêng.
Có thể kết hợp các hiệu ứng màu, làm mờ và alpha không?
Có. Bộ sưu tập cho phép chúng trong một chuỗi có thứ tự. Hãy cân nhắc mỗi thao tác ảnh hưởng như thế nào đến kết quả của thao tác trước vì các thao tác thay thế và ngưỡng có thể bỏ qua chi tiết màu hoặc alpha đã tạo trước.
Tại sao các giá trị hiệu quả lại chỉ đọc?
Dữ liệu hiệu quả đại diện cho các giá trị đã tính được dùng cho việc render, bao gồm các màu đã giải quyết. Hãy chỉnh sửa thao tác được lưu trong bộ sưu tập biến đổi ở nơi có thành viên có thể ghi; nếu không, hãy xóa nó và thêm một thao tác thay thế với các tham số tạo mới.
Định dạng nào nên dùng để bảo tồn một chuỗi biến đổi?
Sử dụng PPTX và xác minh tệp bằng cách mở lại. PPT cũ không thể biểu diễn toàn bộ mô hình hiệu ứng DrawingML, và các định dạng xuất hình ảnh chỉ bảo tồn ngoại hình thay vì các thao tác biến đổi có thể chỉnh sửa.