Уникайте погіршення продуктивності при малюванні на стислих зображеннях
Уникайте погіршення продуктивності при малюванні на стислих зображеннях
Є часи, коли ви хочете виконати дуже широкі графічні операції на стислому зображенні. Коли Aspose.PSD повинен стиснути та розпакувати зображення на льоту, може відбуватися погіршення продуктивності. Малювання на стислих зображеннях також може призвести до покарання за продуктивність.
Рішення
Для уникнення погіршення продуктивності ми рекомендуємо перетворити зображення на нестиснутий або сирий формат перед виконанням графічних операцій.
Використання шляху до файлу
У прикладі нижче PSD-зображення перетворюється у сирому форматі (без стиснення) і зберігається на диск. Неспресоване зображення потім завантажується перед виконанням графічних операцій на ньому. Та ж техніка застосовується для файлів BMP та 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. | |
} |
Використання об’єкта потоку
Наведений нижче уривок коду показує, як PSD-зображення перетворюється у сирому форматі (без стиснення) та зберігається на диск, використовуючи потік.
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. | |
} |