Vermeiden Sie Leistungsverschlechterung beim Zeichnen über komprimierten Bildern
Vermeiden Sie Leistungsverschlechterung beim Zeichnen über komprimierten Bildern
Es gibt Zeiten, in denen Sie extrem umfangreiche Grafikoperationen auf einem komprimierten Bild durchführen möchten. Wenn Aspose.PSD Bilder on-the-fly komprimieren und dekomprimieren muss, kann es zu Leistungsverschlechterung kommen. Das Zeichnen über komprimierten Bildern kann ebenfalls eine Leistungsstrafe nach sich ziehen.
Lösung
Um Leistungsverschlechterung zu vermeiden, empfehlen wir, das Bild in ein nicht komprimiertes oder Rohformat zu konvertieren, bevor Grafikoperationen durchgeführt werden.
Verwendung eines Dateipfads
Im folgenden Beispiel wird ein PSD-Bild in ein Rohformat (ohne Kompression) umgewandelt und auf der Festplatte gespeichert. Das unkomprimierte Bild wird dann geladen, bevor Grafikoperationen durchgeführt werden. Die gleiche Technik gilt für BMP- und GIF-Dateien.
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. | |
} |
Verwendung eines Stream-Objekts
Der folgende Codeausschnitt zeigt Ihnen, wie ein PSD-Bild in ein Rohformat (ohne Kompression) umgewandelt und mit einem Stream auf der Festplatte gespeichert wird.
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. | |
} |