Обрізання, Обертання та Зміна розміру Зображень

Обрізання Зображень

Зазвичай обрізання зображень відноситься до видалення зовнішніх частин зображення для поліпшення композиції. Обрізка також може використовуватися для вирізання певної частини зображення, щоб збільшити увагу до конкретної області. API Aspose.PSD підтримує два різні підходи до обрізання зображень: за допомогою зсувів та прямокутника.

Обрізання за допомогою Зсувів

Клас RasterImage надає перевантажену версію методу Crop, яка приймає 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 надає ще одну перевантажену версію методу Crop, яка приймає екземпляр класу Rectangle. Ви можете вирізати будь-яку частину зображення, вказавши бажані границі об’єкту 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 для Image та перелік перечислення 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());
}

Обертання Зображення під Кутом

API 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 для виконання операції зміни розміру зображення. API Aspose.PSD надає ефективні та прості у використанні методи для досягнення цієї мети. Aspose.PSD для Java надає метод Resize для класу Image, який може бути використаний для зміни розмірів існуючих зображень на льоту. Існують дві перевантажені версії методу 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

API 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, але в цьому випадку вам потрібно самостійно розрахувати відношення сторін. Це тому, що коли ширина або висота зображення змінюються, зображення масштабується або стискається для заповнення нового розміру . Якщо зміни ширини та висоти зображення не зберігають пропорції, це може призвести до розтягнутих та спотворених результатів. У цій статті показано використання API Aspose.PSD для Java для зміни розміру зображень, передаючи одну з нових висоти або ширини, дозволяючи API автоматично розрахувати інше пропорційне значення.

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

ResizeType визначає тип зміни розміру, що виконується на зображеннях на основі обраного фільтра.

Члени перерахування ResizeType

Назва Члену Значення Опис
LeftTopToLeftTop 0 Лівий верхній кут нового зображення буде збігатися з лівим верхнім кутом оригінального зображення. Обрізка відбудеться, якщо потрібно.
RightTopToRightTop 1 Правий верхній кут нового зображення буде збігатися з правим верхнім кутом оригінального зображення. Обрізка відбудеться, якщо потрібно.
RightBottomToRightBottom 2 Правий нижній кут нового зображення буде збігатися з правим нижнім кутом оригінального зображення. Обрізка відбудеться, якщо потрібно.
LeftBottomToLeftBottom 3 Лівий нижній кут нового зображення буде збігатися з лівим нижнім кутом оригінального зображення. Обрізка відбудеться, якщо потрібно.
CenterToCenter 4 Центр нового зображення буде збігатися з центром оригінального зображення. Обрізка відбудеться, якщо потрібно.
LanczosResample 5 Змінити розмір за допомогою алгоритму Ланцоша, використовуючи маску 7x7.
NearestNeighbourResample 6 Змінити розмір за допомогою алгоритму найближчого сусіда.