המרת תמונות

המרת תמונות לשחור לבן וגווני אפור

לפעמים עשויים להיות נדרשים להמיר תמונות מצבעוניות לשחור לבן או גווני אפור לצורך הדפסה או ארכובת. מאמר זה מדגים את השימוש ב-Aspose.PSD עבור API Java כדי להשיג זאת באמצעות שימוש בשני שיטות כפי שמצוין להלן.

  • הבינריזציה
  • יישוא

הבינריזציה

על מנת להבין את המושג של הבינריזציה, חשוב להגדיר תמונת בינארית; תמונת דיגיטלית שיש לה שני ערכים אפשריים רק לכל פיקסל. בדרך כלל, שתי הצבעים המשמשים בתמונת בינארית הם שחור ולבן אך אפשר להשתמש בכל שתי צבעים. הבינריזציה היא תהליך של המרת תמונה לרמה אחת המשמרת שמירה אחת (0 או 1) שבה 0 מציין חיסור צבע ו-1 אומר שקיימת צבע. Aspose.PSD עבור API Java תומך כיום בשתי שיטות הבינריזציה.

הבינריזציה עם סף קבוע

הקטע קוד הבא מראה כיצד להשתמש בהבינריזציה עם סף קבוע שיכולה להיות מיושמת לתמונה.

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());
}

הבינריזציה עם סף Otsu

הקטע קוד הבא מראה כיצד ניתן ליישם הבינריזציה עם סף Otsu לתמונה.

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());
}

יבוא

הגווניות היא תהליך של המרת תמונת טונים רציפים לתמונה עם גוונים אפורים מנותקים. הקטע קוד הבא מראה כיצד להשתמש בגווניות.

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());
}

המרת שכבות תמונת GIF לתמונת TIFF

לפעמים יש צורך לחלץ ולהמיר שכבות של תמונת PSD לתוך פורמט תמונה רסטר נוסף להתאמה לצורך יישום. API של Aspose.PSD תומך ביכולת לחלץ ולהמיר שכבות של תמונת PSD לתוך פורמט תמונה רסטר אחר. לפני כן ניצור מופע של תמונה ונטען את תמונת PSD מתוך התיקייה המקומית, ואז נעבור על כל שכבה במאפיין השכבה. לאחר מכן נמיר את הבלוק לתמונת TIFF. הקטע קוד הבא מראה כיצד להמיר שכבות תמונת PSD לתמונות TIFF.

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);
}
}

המרת CMYK PSD ל- CMYK TIFF

באמצעות Aspose.PSD עבור ג’אווה, מפתחים יכולים להמיר קובץ CMYK PSD לפורמט CMYK tiff. מאמר זה מציג איך לייצא / להמיר קובץ CMYK PSD לפורמט TIFF CMYK באמצעות Aspose.PSD. באמצעות Aspose.PSD עבור ג’אווה ניתן לטעון תמונות PSD ואז ניתן להגדיר שכבות שונות באמצעות מחלקת TiffOptions ולשמור או לייצא את התמונה. הקטע קוד הבא מראה כיצד להשיג מאפיין זה.

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));
}

ייצוא תמונות

בנוסף לסט עשיר של פעולות עיבוד תמונות, Aspose.PSD מספק כיתות מיוחדות ליצירת ממשק עבור פורמטי קובץ PSD לפורמטים אחרים. בשימוש בספרייה זו, ייצוא תמונות PSD הוא פשוט ואינטואיטיבי. להלן מספר כיתות מיוחדות לצורך זה במרחב השמות ImageOptions.

  • BmpOptions
  • GifOptions
  • JpegOptions
  • Jpeg2000Options
  • TiffOptions
  • PngOptions

פשוט לייצא תמונות PSD עם Aspose.PSD עבור API Java. כל מה שנדרש הוא אובייקט של המחלקה המתאימה במרחב השמות ImageOptions. באמצעות שימוש במחלקות אלה, ניתן בקלות לייצא כל תמונה שנוצרה, נערכה או פשוט נטענה עם Aspose.PSD עבור Java לכל פורמט נתמך.

שילוב תמונות

דוגמה זו משתמשת במחלקת Graphics ומראה כיצד לשלב שתי או יותר תמונות לתוך תמונה שלמה אחת. כדי להדגיש את הפעולה, הדוגמה יוצרת PsdImage חדש ומשתמשת בשיטת Draw Image המוצגת על ידי המחלקה Graphics. באמצעות מחלקת Graphics ניתן לשלב שתי או יותר תמונות בדרך שהתמונה הנובעת תיראה כתמונה שלמה ללא רווחים בין חלקי התמונה וללא עמודות. גודל הקנבס חייב להיות שווה לגודל התמונה הנוצרת. הנה דמיון קוד המדגים איך להשתמש בשיטת Draw Image של מחלקת Graphics כדי לשלב תמונות בתמונה אחת.

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();
}

הרחבה וחיתוך תמונות

API של Aspose.PSD מאפשר להרחיב או לחתוך תמונה במהלך תהליך ההמרה של התמונה. מפתח צריכה ליצור מלבן עם צירים X ו-Y ולציין את רוחב וגובה של תיבת המלבן. הווט X,Y ו-Width, Height של המלבן יתארו את ההרחבה או החיתוך של התמונה שנטענת. אם נדרש להרחיב או לחתוך את התמונה במהלך ההמרה של התמונה, יש לבצע את השלבים הבאים:

  1. ליצור מופע של מחלקת RasterImage ולטעון את התמונה הקיימת.
  2. ליצור מופע של ImageOption class.
  3. ליצור מופע של מחלקת Rectangle ולאתחל את צירי ה-X וה-Y ואת רוחב וגובה של תיבת המלבן.
  4. לקרוא לשיטת Save של מחלקת RasterImage תוך העברת שם קובץ פלט, אפשרויות תמונה ואובייקט המלבן כפרמטרים.
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 לתמונות

XMP (מיתגר נתונים מורחב) הוא תקן של תותח ופלת נתונים מורחבים. XMP מסתקרן מודל נתונים, פורמט סידור ומאפיינים יסודיים להגדרת ועיבוד של נתוני מטא נרחבים. הוא גם נותן הנחיות להטמעת מידע XMP בתמונות פופולריות כגון JPEG, מבלי לפגוע בקריאות שלהן על ידי היישומים שאינם תומכים ב-XMP. באמצעות Aspose.PSD עבור API Java מפתחים יכולים לקרוא או לכתוב מטא נתונים XMP לתמונות. מאמר זה מדגים כיצד ניתן לקרוא מטה נתוני XMP מתוך תמונה ולכתוב מטה נתוני XMP לתמונות.

יצירת מטה נתוני XMP, כתיבתם וקריאה מתוך קובץ

עם עזרת המרחב שמות XMP, מפתח יכול ליצור אובייקט מטה נתונים XMP ולכתוב אותו לתמונה. הקטע קוד הבא מראה כיצד להשתמש בחביבי XmpHeaderPi, XmpTrailerPi, XmpMeta, XmpPacketWrapper, PhotoshopPackage ו-DublinCorePackage הכלולים במרחב שמות XMP.

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");
}