جلوگیری از کاهش عملکرد هنگام رسم روی تصاویر فشرده
جلوگیری از کاهش عملکرد هنگام رسم روی تصاویر فشرده
بعضی اوقات ممکن است بخواهید عملیات گرافیکی بسیار گستردهای را روی یک تصویر فشرده انجام دهید. وقتی Aspose.PSD بخواهد تصاویر را در حالت فشرده و غیر فشرده کند، ممکن است کاهش عملکرد رخ دهد. رسم روی تصاویر فشرده همچنین ممکن است باعث جریمه در عملکرد شود.
راه حل
برای جلوگیری از کاهش عملکرد، توصیه میکنیم تصویر را به یک فرمت غیر فشرده یا raw تبدیل کنید قبل از انجام عملیات گرافیکی.
استفاده از مسیر فایل
در مثال زیر، یک تصویر PSD به فرمت raw (بدون فشرده سازی) تبدیل شده و بر روی دیسک ذخیره میشود. سپس تصویر غیر فشرده قبل از انجام عملیات گرافیکی روی آن بارگذاری میشود. این تکنیک همچنین برای فایلهای 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 به فرمت raw (بدون فشرده سازی) و ذخیره آن بر روی دیسک با استفاده از جریان را نشان میدهد.
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. | |
} |