Tránh Sự Suy Giảm Hiệu Suất Khi Vẽ Trên Hình Ảnh Nén

Tránh Sự Suy Giảm Hiệu Suất Khi Vẽ Trên Hình Ảnh Nén

Có những lúc bạn muốn thực hiện các hoạt động đồ họa cực kỳ phức tạp trên một hình ảnh đã nén. Khi Aspose.PSD phải nén và giải nén hình ảnh ngay lập tức, sự suy giảm hiệu suất có thể xảy ra. Việc vẽ trên hình ảnh nén cũng có thể mang theo một khoản phạt về hiệu suất.

Giải Pháp

Để tránh sự suy giảm hiệu suất, chúng tôi khuyên bạn nên chuyển đổi hình ảnh sang định dạng không nén, hoặc định dạng nguyên thô, trước khi thực hiện các hoạt động đồ họa.

Sử Dụng Đường Dẫn Tệp

Trong ví dụ sau, một hình ảnh PSD được chuyển đổi sang định dạng nguyên thô (không nén) và lưu vào đĩa. Hình ảnh không nén được tải lại trước khi thực hiện các hoạt động đồ họa trên đó. Cùng kỹ thuật áp dụng cho các tệp BMP và GIF.

String dataDir = Utils.getDataDir(UncompressedImageUsingFile.class) + "PSD/";
// Load a PSD file as an image and cast it into PsdImage
try (PsdImage psdImage = (PsdImage) Image.load(dataDir + "layers.psd")) {
PsdOptions saveOptions = new PsdOptions();
saveOptions.setCompressionMethod(CompressionMethod.Raw);
psdImage.save(dataDir + "uncompressed_out.psd", saveOptions);
// Now reopen the newly created image.
PsdImage img = (PsdImage) Image.load(dataDir + "uncompressed_out.psd");
Graphics graphics = new Graphics(img);
// Perform graphics operations.
}

Sử Dụng Một Đối Tượng Luồng

Đoạn mã sau cho bạn thấy cách hình ảnh PSD được chuyển đổi sang định dạng nguyên thô (không nén) và lưu vào đĩa bằng Stream.

String dataDir = Utils.getDataDir(UncompressedImageStreamObject.class) + "PSD/";
ByteArrayOutputStream ms = new ByteArrayOutputStream();
// Load a PSD file as an image and cast it into PsdImage
try (PsdImage psdImage = (PsdImage) Image.load(dataDir + "layers.psd")) {
PsdOptions saveOptions = new PsdOptions();
saveOptions.setCompressionMethod(CompressionMethod.Raw);
psdImage.save(ms, saveOptions);
// Now reopen the newly created image. But first seek to the beginning of stream since after saving seek is at the end now.
ms.reset();
PsdImage img = (PsdImage) Image.load(new ByteArrayInputStream(ms.toByteArray()));
Graphics graphics = new Graphics(psdImage);
// Perform graphics operations.
}