Evite a Degradação de Desempenho ao Desenhar sobre Imagens Comprimidas
Evite a Degradação de Desempenho ao Desenhar sobre Imagens Comprimidas
Há momentos em que você deseja realizar operações gráficas extremamente extensas em uma imagem comprimida. Quando o Aspose.PSD precisa comprimir e descomprimir imagens dinamicamente, a degradação de desempenho pode ocorrer. Desenhar sobre imagens comprimidas também pode acarretar uma penalidade de desempenho.
Solução
Para evitar a degradação de desempenho, recomendamos que você converta a imagem para um formato não comprimido, ou RAW, antes de realizar operações gráficas.
Usando o Caminho do Arquivo
No exemplo a seguir, uma imagem PSD é convertida para o formato RAW (sem compressão) e salva no disco. A imagem não comprimida é então carregada de volta antes que as operações gráficas sejam realizadas nela. A mesma técnica se aplica a arquivos BMP e 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 um Objeto Stream
O trecho de código a seguir mostra como a imagem PSD é convertida para o formato RAW (sem compressão) e salva no disco usando 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. | |
} |