Избягване на деградация на производителността при рисуване върху компресирани изображения
Избягване на деградация на производителността при рисуване върху компресирани изображения
Има времена, когато искате да извършите изключително обширни графични операции върху компресирано изображение. Когато 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 изображението се конвертира в суров формат (без компресия) и се запазва на диск чрез 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. | |
} |