تعديل الصور

تقطيع الصور النقطية

التقطيع هو تقنية لإنشاء وهم ألوان وظلال جديدة عن طريق تغيير النمط من النقاط التي تخلق الصورة فعليًا. وهو الوسيلة الأكثر شيوعًا لتقليل نطاق الألوان للصور إلى 256 (أو أقل) لون. توفر Aspose.PSD دعم التقطيع لفئة RasterImage من خلال إدخال طريقة Dither التي تقبل معلمتين. الأولى من نوع DitheringMethod التي ستُطبق مع اثنتين من الخيارات الممكنة FloydSteinbergDithering وThresholdDithering. المعلمة الثانية لطريقة Dither هي BitCount بصيغة عدد صحيح. يحدد BitCount حجم العينة لنتيجة التقطيع. القيمة الافتراضية هي 1 التي تُمثل الأسود والأبيض، في حين أن القيم المسموح بها هي 1، 4، 8 لتوليد لوحات ذات 2، 4 و 256 لونًا على التوالي.

String dataDir = Utils.getDataDir(DitheringforRasterImages.class) + "DrawingAndFormattingImages/";
String sourceFile = dataDir + "sample.psd";
String destName = dataDir + "SampleImage_out.bmp";
// Load an existing image into an instance of RasterImage class
try (PsdImage image = (PsdImage) Image.load(sourceFile)) {
// Peform Floyd Steinberg dithering on the current image and Save the resultant image
image.dither(DitheringMethod.ThresholdDithering, 4);
image.save(destName, new BmpOptions());
}

ضبط السطوع، التباين والجاما

تعتبر التعديلات اللونية في الصور الرقمية واحدة من الميزات الأساسية التي تقدمها معظم مكتبات معالجة الصور. يمكن تصنيف التعديلات اللونية في الأقسام التالية.

  1. السطوع يشير إلى ضوء أو ظلام اللون. زيادة سطوع الصورة تومئ إلى إضاءة جميع الألوان بينما تقليل السطوع يظلم جميع الألوان.
  2. التباين يشير إلى جعل الكائنات أو التفاصيل داخل الصورة أكثر وضوحًا. زيادة التباين في الصورة يزيد الفارق بين المناطق الخفيفة والداكنة بحيث تصبح المناطق الخفيفة أكثر إضاءة والمناطق الداكنة تصبح أكثر ظلمة. بينما يجعل تقليل التباين المناطق الخفيفة والداكنة تظل تقريبًا نفسها ولكن الصورة العامة تصبح أكثر تجانسًا.
  3. الجاما يحسن العقد والسطوع للإضاءة الغير مباشرة التي تنير كائنًا في الصورة.

ضبط السطوع

توفر واجهة برمجة تطبيقات Aspose.PSD للغة Java الطريق AdjustBrightness لفئة RasterImage التي يمكن استخدامها لضبط سطوع الصورة من خلال تمرير قيمة صحيحة كمعلمة. تعبر قيمة المعلمة الأعلى عن صورة أكثر إشراقًا. فيما يلي الصورة الأصلية والصورة الناتجة للمقارنة.

String dataDir = Utils.getDataDir(AdjustingBrightness.class) + "DrawingAndFormattingImages/";
String sourceFile = dataDir + "sample.psd";
String destName = dataDir + "AdjustBrightness_out.tiff";
// Load an existing image into an instance of RasterImage class
try (Image image = Image.load(sourceFile);
// Cast object of Image to RasterImage
RasterImage rasterImage = (RasterImage) image) {
// Check if RasterImage is cached and Cache RasterImage for better performance
if (!rasterImage.isCached()) {
rasterImage.cacheData();
}
// Adjust the brightness
rasterImage.adjustBrightness(-50);
int[] ushort = {8, 8, 8};
// Create an instance of TiffOptions for the resultant image, Set various properties for the object of TiffOptions and Save the resultant image
TiffOptions tiffOptions = new TiffOptions(TiffExpectedFormat.Default);
tiffOptions.setBitsPerSample(ushort);
tiffOptions.setPhotometric(TiffPhotometrics.Rgb);
rasterImage.save(destName, tiffOptions);
}

ضبط التباين

يمكن استخدام طريقة AdjustContrast التي تكشف عنها فئة RasterImage لضبط التباين في الصورة عن طريق تمرير قيمة عشرية كمعلمة.

تعبر القيمة الأعلى عن تباين أعلى في الصورة المعطاة. فيما يلي الصورة الأصلية والصورة الناتجة للمقارنة.

String dataDir = Utils.getDataDir(AdjustingContrast.class) + "DrawingAndFormattingImages/";
String sourceFile = dataDir + "sample.psd";
String destName = dataDir + "AdjustContrast_out.tiff";
// Load an existing image into an instance of RasterImage class
try (Image image = Image.load(sourceFile);
// Cast object of Image to RasterImage
RasterImage rasterImage = (RasterImage) image) {
// Check if RasterImage is cached and Cache RasterImage for better performance
if (!rasterImage.isCached()) {
rasterImage.cacheData();
}
// Adjust the contrast
rasterImage.adjustContrast(50);
// Create an instance of TiffOptions for the resultant image, Set various properties for the object of TiffOptions and Save the resultant image to TIFF format
TiffOptions tiffOptions = new TiffOptions(TiffExpectedFormat.Default);
int[] ushort = {8, 8, 8};
tiffOptions.setBitsPerSample(ushort);
tiffOptions.setPhotometric(TiffPhotometrics.Rgb);
rasterImage.save(destName, tiffOptions);
}

ضبط الجاما

تكشف طريقة AdjustGamma التي تكشف عنها فئة RasterImage عن نسختين. إحدى النسخ تقبل قيمة عشرية وتُنفذ تصحيح جاما لمعاملات قناة الأحمر والأزرق والأخضر. في حين تقبل النسخة الأخرى ثلاثة قيم بصيغة عشرية تمثل كل معامل لون على حدة. يوضح الكود التالي كيفية ضبط الجاما على صورة.

String dataDir = Utils.getDataDir(AdjustingGamma.class) + "DrawingAndFormattingImages/";
String sourceFile = dataDir + "sample.psd";
String destName = dataDir + "AdjustGamma_out.tiff";
// Load an existing image into an instance of RasterImage class
try (Image image = Image.load(sourceFile);
// Cast object of Image to RasterImage
RasterImage rasterImage = (RasterImage) image) {
// Check if RasterImage is cached and Cache RasterImage for better performance
if (!rasterImage.isCached()) {
rasterImage.cacheData();
}
// Adjust the gamma
rasterImage.adjustGamma(2.2f, 2.2f, 2.2f);
// Create an instance of TiffOptions for the resultant image, Set various properties for the object of TiffOptions and Save the resultant image to TIFF format
TiffOptions tiffOptions = new TiffOptions(TiffExpectedFormat.Default);
int[] ushort = {8, 8, 8};
tiffOptions.setBitsPerSample(ushort);
tiffOptions.setPhotometric(TiffPhotometrics.Rgb);
rasterImage.save(destName, tiffOptions);
}

تشويش الصورة

توضح هذه المقالة استخدام Aspose.PSD للغة Java لتنفيذ تأثير التشويش على الصورة. لقد كشف APIs Aspose.PSD عن طرق فعالة وسهلة الاستخدام لتحقيق هذا الهدف. قد كشف Aspose.PSD للغة Java عن فئة GaussianBlurFilterOptions لإنشاء تأثير تشويش على الطاير. تحتاج فئة GaussianBlurFilterOptions إلى قيم شعاع وسيجما لإنشاء تأثير تشويش على الصورة. الخطوات لتنفيذ Resize بسيطة كما يلي:

  1. تحميل صورة باستخدام طريقة الكائن المصنع معرضة من قبل فئة Image.
  2. تحويل الصورة إلى RasterImage.
  3. إنشاء نسخة من فئة GaussianBlurFilterOptions باستخدام البناء الافتراضي أو توفير قيم شعاع وسيجما في البناء.
  4. استدعاء طريقة RasterImage.Filter مع تحديد مستطيل كحدود للصورة ونسخة فئة GaussianBlurFilterOptions.
  5. حفظ النتائج.

يوضح الكود التالي كيفية تطبيق تأثير تشويش على الصورة.

String dataDir = Utils.getDataDir(BlurAnImage.class) + "DrawingAndFormattingImages/";
String sourceFile = dataDir + "sample.psd";
String destName = dataDir + "BlurAnImage_out.gif";
// Load an existing image into an instance of RasterImage class
try (Image image = Image.load(sourceFile)) {
// Convert the image into RasterImage,
//Pass Bounds[rectangle] of image and GaussianBlurFilterOptions instance to Filter method and Save the results
RasterImage rasterImage = (RasterImage) image;
rasterImage.filter(rasterImage.getBounds(), new GaussianBlurFilterOptions(15, 15));
rasterImage.save(destName, new GifOptions());
}

التحقق من شفافية الصورة

توضح هذه المقالة استخدام Aspose.PSD للغة Java للتحقق من شفافية الصورة. الخطوات للتحقق من شفافية الصورة بسيطة كما يلي:

  1. تحميل صورة باستخدام طريقة الكائن المصنع معرضة من قبل فئة Image.
  2. التحقق من الضبابية في الصورة إذا كانت الضبابية تساوي الصفر فإن الصورة شفافة.
  3. يوضح الكود التالي كيفية التحقق من شفافية الصورة.
String dataDir = Utils.getDataDir(VerifyImageTransparency.class) + "DrawingAndFormattingImages/";
String sourceFile = dataDir + "sample.psd";
String destName = dataDir + "AdjustBrightness_out.tiff";
// Load an existing image into an instance of RasterImage class
try (PsdImage image = (PsdImage) Image.load(sourceFile)) {
float opacity = image.getImageOpacity();
System.out.println(opacity);
if (opacity == 0) {
// The image is fully transparent.
}
}

تنفيذ ضاغط GIF اللاإرجاعي

مع Aspose.PSD للغة Java، يمكن للمطورين تعيين فرق البكسل. تعتمد ضغط GIF على “قاموس” من سلاسل البكسل المرئية. يقوم المشفر العادي بالبحث في القاموس عن أطول سلسلة من البكسل التي تطابق تمامًا بكسل الصورة. يختار المشفر ذو الضمان أطول سلسلة من البكسل التي “تكون مشابهة بما فيه الكفاية” للبكسل في الصورة. يعرض الكود أدناه لتوضيح الوظيفة المذكورة.

String dataDir = Utils.getDataDir(ImplementLossyGIFCompressor.class) + "DrawingAndFormattingImages/";
String sourceFile = dataDir + "sample.psd";
String destName = dataDir + "anim_lossy-200.gif";
// Load an existing image into an instance of RasterImage class
try (Image image = Image.load(sourceFile)) {
GifOptions gifExport = new GifOptions();
gifExport.setMaxDiff(80);
image.save(dataDir + "anim_lossy-80.gif", gifExport);
gifExport.setMaxDiff(200);
image.save(destName, gifExport);
}

تنفيذ إعادة عينات Bicubic

يعني إعادة عينات أنك تقوم بتغيير أبعاد البكسل للصورة. عندما تقوم بإجراء عينات دونية، فأنت تقوم بالتخلص من البكسل وبالتالي حذف المعلومات والتفاصيل من الصورة الخاصة بك. عندما تقوم بإجراء عينات علوية، أنت تضيف بكسلًا. يضيف Photoshop هذه البكسل باستخدام التكبير الرقمي. توضح هذه المقالة كيف يمكنك تنفيذ إعادة العينات Bicubic باستخدام Aspose.PSD للغة Java.

يعرض الكود أدناه لتوضيح الوظيفة المذكورة.

String dataDir = Utils.getDataDir(ImplementBicubicResampler.class) + "DrawingAndFormattingImages/";
String filePath = dataDir + "sample_bicubic.psd";
String destNameCubicConvolution = dataDir + "ResamplerCubicConvolutionStripes_after.psd";
try (PsdImage image = (PsdImage) Image.load(filePath)) {
image.resize(300, 300, ResizeType.CubicConvolution);
image.save(destNameCubicConvolution, new PsdOptions(image));
String destNameBell = dataDir + "ResamplerBellStripes_after.psd";
}
try (PsdImage imageBellStripes = (PsdImage) Image.load(filePath)) {
imageBellStripes.resize(300, 300, ResizeType.Bell);
imageBellStripes.save(destNameCubicConvolution, new PsdOptions(imageBellStripes));
}

تنفيذ طبقة الضبط المعكوس

توضح هذه المقالة كيف يمكنك تنفيذ الطبقة ضبط المعكوس باستخدام Aspose.PSD للغة Java. الطبقة الضبطية هي نوع خاص من الطبقات تستخدم في معظم الأحيان لتصحيح الألوان. بدلاً من وجود المحتوى الخاص بهم، فإنها تعدل المعلومات على الطبقات تحتها. تمنح طبقة التعديل المعكوس تأثير صورة سلبية من خلال عكس الألوان للصورة.

يعرض الكود أدناه لتوضيح الوظيفة المذكورة.

String dataDir = Utils.getDataDir(InvertAdjustmentLayer.class) + "DrawingAndFormattingImages/";
String filePath = dataDir + "InvertStripes_before.psd";
String outputPath = dataDir + "InvertStripes_after.psd";
try (PsdImage im = (PsdImage) Image.load(filePath)) {
im.addInvertAdjustmentLayer();
im.save(outputPath);
}