قص وتدوير وتغيير حجم الصور

قص الصور

يشير قص الصور عادة إلى إزالة الأجزاء الخارجية من الصورة لمساعدة في تحسين الإطار. يمكن استخدام القص أيضًا لقص جزء معين من الصورة لزيادة التركيز على منطقة معينة. تدعم واجهة برمجة التطبيقات لـ Aspose.PSD اثنين من الطرق المختلفة لقص الصور: بالانتقالات والمستطيل.

القص بواسطة الانتقالات

يوفر فئة RasterImage نسخة محملة بمعنى الطريقة الزائدة للطريقة القص التي تقبل 4 قيم صحيحة تشير الي اليمين، اليسار، الأعلى، الأسفل. استنادًا إلى هذه القيم الأربعة، تقوم الطريقة Crop بنقل حدود الصورة نحو مركز الصورة مع نبذ الجزء الخارجي. يوضح قطع الكود أدناه كيفية قص الصورة باستخدام الانتقالات.

String dataDir = Utils.getDataDir(CroppingbyShifts.class) + "DrawingAndFormattingImages/";
String sourceFile = dataDir + "sample.psd";
String destName = dataDir + "CroppingByShifts_out.jpg";
// Load an existing image into an instance of RasterImage class
try (RasterImage rasterImage = (RasterImage) Image.load(sourceFile)) {
// Before cropping, the image should be cached for better performance
if (!rasterImage.isCached()) {
rasterImage.cacheData();
}
// Define shift values for all four sides
int leftShift = 10;
int rightShift = 10;
int topShift = 10;
int bottomShift = 10;
// Based on the shift values, apply the cropping on image Crop method will shift the image bounds toward the center of image and Save the results to disk
rasterImage.crop(leftShift, rightShift, topShift, bottomShift);
rasterImage.save(destName, new JpegOptions());
}

القص بواسطة المستطيل

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

String dataDir = Utils.getDataDir(CroppingbyRectangle.class) + "DrawingAndFormattingImages/";
String sourceFile = dataDir + "sample.psd";
String destName = dataDir + "CroppingByRectangle_out.jpg";
// Load an existing image into an instance of RasterImage class
try (RasterImage rasterImage = (RasterImage) Image.load(sourceFile)) {
if (!rasterImage.isCached()) {
rasterImage.cacheData();
}
// Create an instance of Rectangle class with desired size,
//Perform the crop operation on object of Rectangle class and Save the results to disk
Rectangle rectangle = new Rectangle(20, 20, 20, 20);
rasterImage.crop(rectangle);
rasterImage.save(destName, new JpegOptions());
}

تدوير واقلب الصورة

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

تدوير الصورة

يمكن استخدام الطريقة Image.RotateFlip لتدوير الصورة بزاوية 90/180/270 درجة واقلب الصورة أفقيًا أو عموديًا. تقبل الطريقة Image.RotateFlip المعلمة من نوع RotateFlipType التي تحدد نوع تدوير واقلب المطبق على الصورة. اهم الخطوات لتأدية التدوير والاقلاب كما يلي،

  1. حمل الصورة باستخدام طريقة الصناعة Load التي تتعرض لها فئة Image.
  2. اتصل بطريقة Image.RotateFlip مع تحديد RotateFlipType المناسب.
  3. حفظ النتائج.

يُظهر مثال الكود التالي كيفية تحديد خاصية RotateFlip لصورة وتعداد RotateFlipType.

String dataDir = Utils.getDataDir(RotatinganImage.class) + "DrawingAndFormattingImages/";
String sourceFile = dataDir + "sample.psd";
String destName = dataDir + "RotatingAnImage_out.jpg";
// Load an existing image into an instance of RasterImage class
try (Image image = Image.load(sourceFile)) {
image.rotateFlip(RotateFlipType.Rotate270FlipNone);
image.save(destName, new JpegOptions());
}

تدوير الصورة بزاوية محددة

تكشف واجهة برمجة التطبيقات لـ Aspose.PSD لـ Java عن طريقة RasterImage.Rotate لتي تيسر امور مستخدميها الذين يرغبون في تدوير الصورة بزاوية محددة. على عكس طريقة RasterImage.RotateFlip، تقبل طريقة RasterImage.Rotate ثلاثة معلمات:

  1. زاوية الدوران: معلمة من نوع float تحدد زاوية الدوران التي يجب أن تدور الصورة إليها. القيمة الموجبة تدير الصورة باتجاه عقارب الساعة؛ القيمة السالبة تنفذ دورانًا عكس اتجاه عقارب الساعة.
  2. تغيير الحجم تناسبيًا: معلمة من نوع Boolean تحدد ما إذا كان يتعين تغيير حجم الصورة وفقًا لتصوير مستطيل الدورة (نقاط الزاوية) المدرج. إذا تم تعيينه على false، سيتم ترك أبعاد الصورة دون تغيير ويتم فقط دوران محتويات الصورة الداخلية.
  3. لون الخلفية: معلمة من نوع Color تحدد اللون الذي سيتم ملئه في خلفية الصورة المدورة.

يُظهر قطع الكود التالي كيفية استخدام طريقة RasterImage.Rotate.

String dataDir = Utils.getDataDir(RotatinganImageonaSpecificAngle.class) + "DrawingAndFormattingImages/";
String sourceFile = dataDir + "sample.psd";
String destName = dataDir + "RotatingImageOnSpecificAngle_out.jpg";
try (RasterImage image = (RasterImage) Image.load(sourceFile)) {
// Before rotation, the image should be cached for better performance
if (!image.isCached()) {
image.cacheData();
}
// Perform the rotation on 20 degree while keeping the image size proportional with red background color and Save the result to a new file
image.rotate(20f, true, Color.getRed());
image.save(destName, new JpegOptions());
}

تغيير حجم الصور

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

تغيير الحجم البسيط

الخطوات لأداء الاعتماد هي كما يلي:

  1. حمل الصورة باستخدام طريقة Load المكشوفة من قبل فئة Image.
  2. اتصل بطريقة Image.Resize مع تحديد الارتفاع والعرض الجديدين.
  3. حفظ النتائج.

يُظهر مثال الكود التالي كيفية تغيير حجم الصورة.

String dataDir = Utils.getDataDir(SimpleResizing.class) + "DrawingAndFormattingImages/";
String sourceFile = dataDir + "sample.psd";
String destName = dataDir + "SimpleResizing_out.jpg";
// Load an existing image into an instance of RasterImage class
try (Image image = Image.load(sourceFile)) {
image.resize(300, 300);
image.save(destName, new JpegOptions());
}

تحديد الحجم مع تعداد ResizeType Enumeration

قدمت واجهة برمجة التطبيقات لـ Aspose.PSD تعداد ResizeType يمكن استخدامه مع Image.Resize لتحقيق النتائج المرغوبة. يُظهر مثال الكود المقدم أدناه استخدام تعداد ResizeType، في حين يمكن العثور على تفاصيل أعضاء تعداد ResizeType في أسفل هذه الصفحة.

String dataDir = Utils.getDataDir(ResizingwithResizeTypeEnumeration.class) + "DrawingAndFormattingImages/";
String sourceFile = dataDir + "sample.psd";
String destName = dataDir + "ResizingwithResizeTypeEnumeration_out.jpg";
// Load an existing image into an instance of RasterImage class
try (Image image = Image.load(sourceFile)) {
image.resize(300, 300, ResizeType.LanczosResample);
image.save(destName, new JpegOptions());
}

إذا كنت تنوي الحصول على نتيجة ذات جودة بعد تطبيق تغيير الحجم، فإنه من المقترح دائمًا استخدام ResizeType.LanczosResample لأنه سيُخرج نتائج عالية الجودة لكن قد يعمل ببطء مقارنةً بـ ResizeType.NearestNeighbourResample. من ناحية أخرى، خوارزنة ResizeType.NearestNeighbourResample يُستخدم بشكل خاص لتغيير الحجم بسرعة مع التنازل عن جودة الصورة. يمكن أن يكون هذا الأسلوب مفيدًا لتوليد الصور المصغرة في الوقت الحقيقي أو العمليات المشابهة حيث يتطلب الأداء.

تغيير حجم الصورة بنسبة

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

String dataDir = Utils.getDataDir(ResizeImageProportionally.class) + "DrawingAndFormattingImages/";
String sourceFile = dataDir + "sample.psd";
String destName = dataDir + "SimpleResizeImageProportionally_out.png";
try (Image image = Image.load(sourceFile)) {
if (!image.isCached()) {
image.cacheData();
}
// Specifying width and height
int newWidth = image.getWidth() / 2;
image.resizeWidthProportionally(newWidth);
int newHeight = image.getHeight() / 2;
image.resizeHeightProportionally(newHeight);
image.save(destName, new PngOptions());
}

تعداد ResizeType Enumeration

يحدد ResizeType نوع تغيير الحجم الذي يجب تنفيذه على الصورة بناءً على الفلتر المختار.

أعضاء تعداد ResizeType

اسم العضو القيمة الوصف
LeftTopToLeftTop 0 سيتزامن النقطة العلوية اليسرى للصورة الجديدة مع النقطة العلوية اليسرى للصورة الأصلية. ستحدث قصة إذا لزم الأمر.
RightTopToRightTop 1 سيتزامن النقطة العلوية اليمنى للصورة الجديدة مع النقطة العلوية اليمنى للصورة الأصلية. ستحدث قصة إذا لزم الأمر.
RightBottomToRightBottom 2 سيتزامن النقطة السفلى اليمنى للصورة الجديدة مع النقطة السفلى اليمنى للصورة الأصلية. ستحدث قصة إذا لزم الأمر.
LeftBottomToLeftBottom 3 سيتزامن النقطة السفلى اليسرى للصورة الجديدة مع النقطة السفلى اليسرى للصورة الأصلية. ستحدث قصة إذا لزم الأمر.
CenterToCenter 4 سيتزامن مركز الصورة الجديدة مع مركز الصورة الأصلية. ستحدث قصة إذا لزم الأمر.
LanczosResample 5 إعادة عينة باستخدام خوارزمية Lanczos باستخدام قناع 7 × 7.
NearestNeighbourResample 6 إعادة عينة باستخدام خوارزمية أقرب جار.