Evitar la Degradación del Rendimiento al Dibujar sobre Imágenes Comprimidas
Evitar la Degradación del Rendimiento al Dibujar sobre Imágenes Comprimidas
Hay momentos en los que se desea realizar operaciones gráficas extremadamente extensas en una imagen comprimida. Cuando Aspose.PSD tiene que comprimir y descomprimir imágenes sobre la marcha, puede haber una degradación del rendimiento. Dibujar sobre imágenes comprimidas también puede implicar una penalización en el rendimiento.
Solución
Para evitar la degradación del rendimiento, recomendamos que convierta la imagen a un formato no comprimido, o en bruto, antes de realizar operaciones gráficas.
Usando la Ruta del Archivo
En el siguiente ejemplo, se convierte una imagen PSD al formato en bruto (sin compresión) y se guarda en disco. La imagen sin comprimir se vuelve a cargar antes de realizar operaciones gráficas en ella. La misma técnica se aplica para archivos BMP y 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. | |
} |
Usando un Objeto de Flujo
El siguiente fragmento de código le muestra cómo convertir una imagen PSD al formato en bruto (sin compresión) y guardarla en disco usando un flujo.
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. | |
} |