Afbeeldingen converteren
Afbeeldingen converteren naar zwart-wit en grijswaarden
Soms moet u gekleurde afbeeldingen converteren naar zwart-wit of grijswaarden voor afdruk- of archiveringsdoeleinden. Dit artikel toont het gebruik van de Aspose.PSD voor Java API om dit te bereiken met behulp van twee hieronder beschreven methoden.
- Binarisatie
- Grijswaarden
Binarisatie
Om het concept van binarisatie te begrijpen, is het belangrijk om een binaire afbeelding te definiëren; dat is een digitale afbeelding die slechts twee mogelijke waarden kan hebben voor elk pixel. Normaal gesproken worden de twee kleuren die voor een binaire afbeelding worden gebruikt zwart en wit, hoewel elke twee kleuren kunnen worden gebruikt. Binarisatie is het proces van het omzetten van een afbeelding naar bi-niveau, wat betekent dat elk pixel wordt opgeslagen als een enkel bit (0 of 1) waarbij 0 de afwezigheid van kleur aangeeft en 1 de aanwezigheid van kleur betekent. De Aspose.PSD voor Java API ondersteunt momenteel twee binarisatiemethoden.
Binarisatie met Vaste Drempelwaarde
Het volgende codefragment toont hoe binarisatie met een vaste drempelwaarde kan worden toegepast op een afbeelding.
String dataDir = Utils.getDataDir(BinarizationWithFixedThreshold.class) + "Conversion/"; | |
String sourceFile = dataDir + "sample.psd"; | |
String destName = dataDir + "BinarizationWithFixedThreshold_out.jpg"; | |
try (Image image = Image.load(sourceFile); | |
RasterCachedImage rasterCachedImage = (RasterCachedImage) image) { | |
if (!rasterCachedImage.isCached()) { | |
// Cache image if not already cached | |
rasterCachedImage.cacheData(); | |
} | |
// Binarize image with predefined fixed threshold and Save the resultant image | |
rasterCachedImage.binarizeFixed((byte) 100); | |
rasterCachedImage.save(destName, new JpegOptions()); | |
} |
Binarisatie met Otsu-drempelwaarde
Het volgende codefragment toont hoe binarisatie met Otsu-drempelwaarde kan worden toegepast op een afbeelding.
String dataDir = Utils.getDataDir(BinarizationWithOtsuThreshold.class) + "Conversion/"; | |
String sourceFile = dataDir + "sample.psd"; | |
String destName = dataDir + "BinarizationWithOtsuThreshold_out.jpg"; | |
try (Image image = Image.load(sourceFile); | |
// Cast the image to RasterCachedImage and Check if image is cached | |
RasterCachedImage rasterCachedImage = (RasterCachedImage) image) { | |
if (!rasterCachedImage.isCached()) { | |
// Cache image if not already cached | |
rasterCachedImage.cacheData(); | |
} | |
// Binarize image with Otsu Thresholding and Save the resultant image | |
rasterCachedImage.binarizeOtsu(); | |
rasterCachedImage.save(destName, new JpegOptions()); | |
} |
Grijswaarden
Grijswaarden is het proces van het omzetten van een continue-afbeelding naar een afbeelding met onderbroken grijstinten. Het volgende codefragment toont hoe u grijswaarden kunt gebruiken.
String dataDir = Utils.getDataDir(GrayScaling.class) + "Conversion/"; | |
String sourceFile = dataDir + "sample.psd"; | |
String destName = dataDir + "Grayscaling_out.jpg"; | |
try (Image image = Image.load(sourceFile)) { | |
// Cast the image to RasterCachedImage and Check if image is cached | |
RasterCachedImage rasterCachedImage = (RasterCachedImage) image; | |
if (!rasterCachedImage.isCached()) { | |
// Cache image if not already cached | |
rasterCachedImage.cacheData(); | |
} | |
// Transform image to its grayscale representation and Save the resultant image | |
rasterCachedImage.grayscale(); | |
rasterCachedImage.save(destName, new JpegOptions()); | |
} |
Converteer GIF-afbeeldingslagen naar TIFF-afbeelding
Soms is het nodig om lagen van een PSD-afbeelding te extraheren en converteren naar een ander rasterafbeeldingsformaat om aan de behoefte van een applicatie te voldoen. Aspose.PSD API ondersteunt de functie om lagen van een PSD-afbeelding te extraheren en om te zetten naar een ander rasterafbeeldingsformaat. Allereerst maken we een instantie van een afbeelding en laden we de PSD-afbeelding van de lokale schijf en daarna zullen we elke laag in de Layer-eigenschap doorlopen. Vervolgens zullen we het blok converteren naar een TIFF-afbeelding. Het onderstaande codefragment toont hoe u PSD-afbeeldingslagen naar TIFF-afbeeldingen kunt converteren.
String dataDir = Utils.getDataDir(GIFImageLayersToTIFF.class) + "Conversion/"; | |
String sourceFile = dataDir + "sample.psd"; | |
// Load a PSD image and Convert the image's layers to Tiff images. | |
try (PsdImage image = (PsdImage) Image.load(sourceFile)) { | |
// Iterate through array of PSD layers | |
for (int i = 0; i < image.getLayers().length; i++) { | |
// Get PSD layer. | |
Layer layer = image.getLayers()[i]; | |
// Create an instance of TIFF Option class and Save the PSD layer as TIFF image | |
TiffOptions objTiff = new TiffOptions(TiffExpectedFormat.TiffDeflateRgb); | |
layer.save("output" + i + "_out.tiff", objTiff); | |
} | |
} |
PSD naar CMYK TIFF converteren
Met Aspose.PSD voor Java kunnen ontwikkelaars een CMYK PSD-bestand naar CMYK-tiff-indeling converteren. Dit artikel toont hoe u een CMYK PSD-bestand naar CMYK-tiff-indeling kunt exporteren/converteren met Aspose.PSD. Met Aspose.PSD voor Java kunt u PSD-afbeeldingen laden en vervolgens verschillende eigenschappen instellen met behulp van de TiffOptions-klasse en de afbeelding opslaan of exporteren. Het volgende codefragment toont hoe u deze functie kunt gebruiken.
String dataDir = Utils.getDataDir(CMYKPSDtoCMYKTiff.class) + "Conversion/"; | |
String sourceFile = dataDir + "sample.psd"; | |
String destName = dataDir + "output.tiff"; | |
try (Image image = Image.load(sourceFile)) { | |
image.save(destName, new TiffOptions(TiffExpectedFormat.TiffLzwCmyk)); | |
} |
Afbeeldingen exporteren
Naast een uitgebreide reeks beeldverwerkingsroutines, biedt Aspose.PSD gespecialiseerde klassen om PSD-bestandsindelingen naar andere indelingen te converteren. Het omzetten van PSD-afbeeldingen is heel eenvoudig en intuïtief met behulp van deze library. Hieronder staan enkele gespecialiseerde klassen voor dit doel in de ImageOptions-namespace.
- BmpOptions
- GifOptions
- JpegOptions
- Jpeg2000Options
- TiffOptions
- PngOptions
Het is eenvoudig om PSD-afbeeldingen te exporteren met de Aspose.PSD voor Java API. Het enige wat u nodig heeft is een object van de juiste klasse uit de ImageOptions-namespace. Door deze klassen te gebruiken, kunt u gemakkelijk elke afbeelding die is gemaakt, bewerkt of eenvoudigweg geladen met de Aspose.PSD voor Java exporteren naar een ondersteund formaat.
Afbeeldingen combineren
Dit voorbeeld maakt gebruik van de Graphics-klasse en laat zien hoe u twee of meer afbeeldingen kunt combineren tot een enkele complete afbeelding. Om de bewerking te demonstreren, maakt het voorbeeld een nieuwe PsdImage en tekent afbeeldingen op het canvasscherm met behulp van de Draw Image-methode die wordt blootgesteld door de Graphics-klasse. Met de Graphics-klasse kunnen twee of meer afbeeldingen op zo’n manier worden gecombineerd dat de resulterende afbeelding eruit zal zien als een complete afbeelding zonder ruimte tussen de afbeeldingsdelen en zonder pagina’s. De canvassize moet gelijk zijn aan de grootte van de resulterende afbeelding. Hieronder volgt de code die laat zien hoe u de Draw Image-methode van de Graphics-klasse kunt gebruiken om afbeeldingen te combineren in één afbeelding.
String dataDir = Utils.getDataDir(CombiningImages.class) + "DrawingAndFormattingImages/"; | |
// Create an instance of PsdOptions and set its various properties | |
PsdOptions imageOptions = new PsdOptions(); | |
// Create an instance of FileCreateSource and assign it to Source property | |
imageOptions.setSource(new FileCreateSource(dataDir + "Two_images_result_out.psd", false)); | |
try (Image image = Image.create(imageOptions, 600, 600)) { | |
// Create and initialize an instance of Graphics, Clear the image surface with white color and Draw Image | |
Graphics graphics = new Graphics(image); | |
graphics.clear(Color.getWhite()); | |
graphics.drawImage(Image.load(dataDir + "example1.psd"), 0, 0, 300, 600); | |
graphics.drawImage(Image.load(dataDir + "example2.psd"), 300, 0, 300, 600); | |
image.save(); | |
} |
Afbeeldingen uitbreiden en bijsnijden
Aspose.PSD API stelt u in staat om een afbeelding uit te breiden of bij te snijden tijdens het conversieproces van de afbeelding. De ontwikkelaar moet een rechthoek maken met X- en Y-coördinaten en de breedte en hoogte van het rechthoekvak specificeren. De X, Y en Breedte, Hoogte van de rechthoek geven de uitbreiding of bijsnijden van de geladen afbeelding aan. Als het nodig is om de afbeelding uit te breiden of bij te snijden tijdens de conversie van de afbeelding, voer dan de volgende stappen uit:
- Maak een instantie van de klasse RasterImage en laad de bestaande afbeelding.
- Maak een instantie van de ImageOption-klasse.
- Maak een instantie van de klasse Rectangle en initialiseer de X, Y en Breedte, Hoogte van de rechthoek.
- Roep de methode Save van de klasse RasterImage aan en geef de uitvoerbestandsnaam, afbeeldingsopties en het rechthoekobject als parameters door.
String dataDir = Utils.getDataDir(ExpandAndCropImages.class) + "DrawingAndFormattingImages/"; | |
String sourceFile = dataDir + "example1.psd"; | |
String destName = dataDir + "jpeg_out.jpg"; | |
try (RasterImage rasterImage = (RasterImage) Image.load(sourceFile)) { | |
rasterImage.cacheData(); | |
// Create an instance of Rectangle class and define X,Y and Width, height of the rectangle, and Save output image | |
Rectangle destRect = new Rectangle(-200, -200, 300, 300); | |
rasterImage.save(destName, new JpegOptions(), destRect); | |
} |
XMP-gegevens lezen en schrijven naar afbeeldingen
XMP (Extensible Metadata Platform) is een ISO-standaard. XMP standaardiseert een gegevensmodel, een serialisatieformaat en kernkenmerken voor de definitie en verwerking van uitbreidbare metadata. Het biedt ook richtlijnen voor het insluiten van XMP-informatie in populaire beeldformaten zoals JPEG, zonder de leesbaarheid te schaden door toepassingen die XMP niet ondersteunen. Met de Aspose.PSD voor Java API kunnen ontwikkelaars XMP-metadata naar afbeeldingen lezen of schrijven. Dit artikel toont hoe XMP-metadata van een afbeelding kunnen worden gelezen en XMP-metadata naar afbeeldingen kunnen worden geschreven.
Maak XMP-metadata, schrijf het en lees van bestand
Met behulp van de XMP-namespace kan de ontwikkelaar een XMP-metadata-object maken en het naar een afbeelding schrijven. Het volgende codefragment toont hoe u de pakketten XmpHeaderPi, XmpTrailerPi, XmpMeta, XmpPacketWrapper, PhotoshopPackage en DublinCorePackage kunt gebruiken, die zijn opgenomen in de XMP-namespace.
String dataDir = Utils.getDataDir(CreateXMPMetadata.class) + "DrawingAndFormattingImages/"; | |
// Specify the size of image by defining a Rectangle | |
Rectangle rect = new Rectangle(0, 0, 100, 200); | |
// create the brand new image just for sample purposes | |
try (PsdImage image = new PsdImage(rect.getWidth(), rect.getHeight())) { | |
// create an instance of XMP-Header | |
XmpHeaderPi xmpHeader = new XmpHeaderPi(); | |
xmpHeader.setGuid(dataDir); | |
// create an instance of Xmp-TrailerPi | |
XmpTrailerPi xmpTrailer = new XmpTrailerPi(true); | |
// create an instance of XMPmeta class to set different attributes | |
XmpMeta xmpMeta = new XmpMeta(); | |
xmpMeta.addAttribute("Author", "Mr Smith"); | |
xmpMeta.addAttribute("Description", "The fake metadata value"); | |
// create an instance of XmpPacketWrapper that contains all metadata | |
XmpPacketWrapper xmpData = new XmpPacketWrapper(xmpHeader, xmpTrailer, xmpMeta); | |
// create an instacne of Photoshop package and set photoshop attributes | |
PhotoshopPackage photoshopPackage = new PhotoshopPackage(); | |
photoshopPackage.setCity("London"); | |
photoshopPackage.setCountry("England"); | |
photoshopPackage.setColorMode(ColorMode.Rgb); | |
// add photoshop package into XMP metadata | |
xmpData.addPackage(photoshopPackage); | |
// create an instacne of DublinCore package and set dublinCore attributes | |
DublinCorePackage dublinCorePackage = new DublinCorePackage(); | |
dublinCorePackage.setAuthor("Charles Bukowski"); | |
dublinCorePackage.setTitle("Confessions of a Man Insane Enough to Live With the Beasts"); | |
dublinCorePackage.addValue("dc:movie", "Barfly"); | |
// add dublinCore Package into XMP metadata | |
xmpData.addPackage(dublinCorePackage); | |
MemoryStream ms = new MemoryStream(); | |
// update XMP metadata into image | |
image.setXmpData(xmpData); | |
// Save image on the disk or in memory stream | |
image.save(dataDir + "create_XMP_Metadata.psd"); | |
} |
Afbeeldingen exporteren in een meerdere-gewinde omgeving
Aspose.PSD voor Java ondersteunt nu het converteren van afbeeldingen in een meerdere-gewinde omgeving. Aspose.PSD voor Java garandeert de geoptimaliseerde prestaties van operaties tijdens de uitvoering van code in een meerdere-gewinde omgeving. Alle klassen van afbeeldingsopties (bijv. BmpOptions, TiffOptions, JpegOptions, enz.) in de Aspose.PSD voor Java implementeren de IDisposable-interface. Daarom is het een must dat de ontwikkelaar het object van de afbeeldingsoptiesklasse op de juiste manier verwijdert als de Source-eigenschap is ingesteld. Het volgende codefragment toont de genoemde functionaliteit.
String dataDir = Utils.getDataDir(ExportImagesinMultiThreadEnv.class) + "Conversion/"; | |
String imageDataPath = dataDir + "sample.psd"; | |
try { | |
FileInputStream fileStream = new FileInputStream(imageDataPath); | |
PsdOptions psdOptions = new PsdOptions(); | |
// Set the source property of the imaging option class object. | |
psdOptions.setSource(new StreamSource(fileStream)); | |
// Following is the sample processing on the image. | |
RasterImage image = (RasterImage) Image.create(psdOptions, 10, 10); | |
Color[] pixels = new Color[4]; | |
for (int i = 0; i < 4; ++i) { | |
pixels[i] = Color.fromArgb(40, 30, 20, 10); | |
} | |
image.savePixels(new Rectangle(0, 0, 2, 2), pixels); | |
image.save(); | |
} finally { | |
// Delete the output file. | |
File f = new File(imageDataPath); | |
if (f.exists()) { | |
f.delete(); | |
} | |
} |
Aspose.PSD ondersteunt nu de SyncRoot-eigenschap bij het werken in een meerdere-gewinde omgeving. Een ontwikkelaar kan deze eigenschap gebruiken om toegang tot de brondatabuffer te synchroniseren. Het volgende codefragment toont hoe de SyncRoot-eigenschap kan worden gebruikt.
String dataDir = Utils.getDataDir(SyncRoot.class) + "Conversion/"; | |
// Create an instance of Stream container class and assign memory stream object. | |
StreamContainer streamContainer = new StreamContainer(new java.io.ByteArrayInputStream(new byte[0])); | |
try { | |
// check if the access to the stream source is synchronized. | |
synchronized (streamContainer.getSyncRoot()) { | |
// do work | |
// now access to streamContainer is synchronized | |
} | |
} finally { | |
streamContainer.dispose(); | |
} |