Menghindari Penurunan Kinerja saat Menggambar di atas Gambar yang Tersampel

Menghindari Penurunan Kinerja saat Menggambar di atas Gambar yang Tersampel

Ada saat-saat ketika Anda ingin melakukan operasi grafis yang sangat ekstensif pada gambar yang tersampel. Saat Aspose.PSD harus menyampel dan mengompresi gambar secara langsung, penurunan kinerja dapat terjadi. Menggambar di atas gambar yang tersampel juga dapat membawa hukuman kinerja.

Solusi

Untuk menghindari penurunan kinerja, kami merekomendasikan agar Anda mengonversikan gambar ke format tidak terkompresi, atau raw, sebelum melakukan operasi grafis.

Menggunakan Path Berkas

Pada contoh berikut, gambar PSD dikonversikan ke format raw (tanpa kompresi) dan disimpan ke disk. Gambar tidak terkompresi kemudian dimuat kembali sebelum operasi grafis dilakukan padanya. Teknik yang sama berlaku untuk berkas BMP dan 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.
}

Menggunakan Objek Aliran (Stream)

Potongan kode berikut menunjukkan bagaimana gambar PSD dikonversikan ke format raw (tanpa kompresi) dan disimpan ke disk menggunakan 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.
}