Sıkıştırılmış Görüntüler Üzerine Çizim Yaparken Performans Bozulmasını Önleme

Sıkıştırılmış Görüntüler Üzerine Çizim Yaparken Performans Bozulmasını Önleme

Zaman zaman sıkıştırılmış bir görüntü üzerinde son derece yoğun grafik işlemleri gerçekleştirmek isteyebilirsiniz. Aspose.PSD’nin görüntüleri canlı olarak sıkıştırmasını ve açmasını gerektiren durumlarda performans bozulması yaşanabilir. Sıkıştırılmış görüntüler üzerine çizim yapmak da performans cezası getirebilir.

Çözüm

Performans bozulmasını önlemek için grafik işlemleri gerçekleştirmek öncesinde görüntüyü sıkıştırılmamış veya ham bir formata dönüştürmenizi öneririz.

Dosya Yolu Kullanma

Aşağıdaki örnekte, bir PSD görüntüsü ham formata (sıkıştırma olmadan) dönüştürülür ve diske kaydedilir. Grafik işlemleri gerçekleştirilmeden önce sıkıştırılmamış görüntü daha sonra tekrar yüklenir. Aynı teknik BMP ve GIF dosyaları için de geçerlidir.

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.
}

Akış Nesnesi Kullanma

Aşağıdaki kod parçacığı, PSD görüntüsünün ham formata (sıkıştırma olmadan) dönüştürülerek ve diskte kaydedilerek Akış kullanılarak nasıl yapıldığını göstermektedir.

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.
}