Избегайте деградации производительности при отрисовке поверх сжатых изображений
Избегайте деградации производительности при отрисовке поверх сжатых изображений
Бывают моменты, когда вам нужно выполнять крайне объемные графические операции на сжатом изображении. Когда Aspose.PSD должен сжимать и разжимать изображения на лету, это может привести к снижению производительности. Отрисовка поверх сжатых изображений также может нести штраф к производительности.
Решение
Для избежания деградации производительности рекомендуем конвертировать изображение в несжатый или сырой формат перед выполнением графических операций.
Использование пути к файлу
В следующем примере изображение PSD преобразуется в несжатый формат (без сжатия) и сохраняется на диск. Затем несжатое изображение загружается обратно перед выполнением графических операций. Та же техника применяется для файлов BMP и GIF.
// For complete examples and data files, please go to https://github.com/aspose-psd/Aspose.PSD-for-.NET | |
// Load a PSD file as an image and cast it into PsdImage | |
using (PsdImage psdImage = (PsdImage)Image.Load(dataDir + "layers.psd")) | |
{ | |
PsdOptions saveOptions = new PsdOptions(); | |
saveOptions.CompressionMethod = CompressionMethod.Raw; | |
psdImage.Save(dataDir + "uncompressed_out.psd", saveOptions); | |
} | |
// Now reopen the newly created image. | |
using (PsdImage psdImage = (PsdImage)Image.Load(dataDir + "uncompressed_out.psd")) | |
{ | |
Graphics graphics = new Graphics(psdImage); | |
// Perform graphics operations. | |
} |
Использование объекта потока
Следующий фрагмент кода показывает, как изображение PSD преобразуется в несжатый формат (без сжатия) и сохраняется на диск с использованием MemoryStream.
// For complete examples and data files, please go to https://github.com/aspose-psd/Aspose.PSD-for-.NET | |
{ | |
// Load a PSD file as an image and cast it into PsdImage | |
using (PsdImage psdImage = (PsdImage)Image.Load(dataDir + "layers.psd")) | |
{ | |
PsdOptions saveOptions = new PsdOptions(); | |
saveOptions.CompressionMethod = CompressionMethod.Raw; | |
psdImage.Save(stream, saveOptions); | |
} | |
// Now reopen the newly created image. But first seek to the beginning of stream since after saving seek is at the end now. | |
stream.Seek(0, System.IO.SeekOrigin.Begin); | |
using (PsdImage psdImage = (PsdImage)Image.Load(stream)) | |
{ | |
Graphics graphics = new Graphics(psdImage); | |
// Perform graphics operations. | |
} | |
} |