Обрезка, поворот и изменение размера изображений
Обрезка изображений
Обрезка изображения обычно относится к удалению внешних частей изображения для улучшения кадрирования. Обрезка также может использоваться для вырезания части изображения для увеличения фокуса на определенной области. API Aspose.PSD поддерживает два различных подхода к обрезке изображений: по сдвигам и прямоугольнику.
Обрезка по сдвигам
Класс RasterImage предоставляет перегруженную версию метода Crop, который принимает 4 целочисленных значения, обозначающих Лево, Право, Верх и Низ. На основе этих четырех значений метод Crop перемещает границы изображения к центру изображения, отбрасывая внешнюю часть. Ниже приведен фрагмент кода, демонстрирующий, как обрезать изображение по сдвигам.
// For complete examples and data files, please go to https://github.com/aspose-psd/Aspose.PSD-for-.NET | |
string sourceFile = dataDir + @"sample.psd"; | |
string destName = dataDir + @"CroppingByShifts_out.jpg"; | |
// Load an existing image into an instance of RasterImage class | |
using (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. Ниже приведен фрагмент кода, демонстрирующий, как обрезать любое изображение прямоугольником.
// For complete examples and data files, please go to https://github.com/aspose-psd/Aspose.PSD-for-.NET | |
string sourceFile = dataDir + @"sample.psd"; | |
string destName = dataDir + @"CroppingByRectangle_out.jpg"; | |
// Load an existing image into an instance of RasterImage class | |
using (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 для .NET - это простая в использовании библиотека, поскольку она предоставляет простые методы для выполнения сложных операций. Например, для поворота изображения Aspose.PSD для .NET предоставлен метод RotateFlip для своего базового класса Image. Независимо от формата изображения, библиотека может выполнять определенные процедуры вращения и отражения.
Поворот изображения
Метод Image.RotateFlip можно использовать для поворота изображения на 90/180/270 градусов и отражения изображения горизонтально или вертикально. Метод Image.RotateFlip принимает параметр RotateFlipType, который определяет тип вращения и отражения, применяемый к изображению. Шаги для выполнения поворота и отражения просты:
- Загрузите изображение с помощью метода фабрики Load класса Image.
- Вызовите метод Image.RotateFlip, указав соответствующий RotateFlipType.
- Сохраните результат.
Приведенный ниже фрагмент кода демонстрирует, как установить свойство RotateFlip изображения и перечисление RotateFlipType.
// For complete examples and data files, please go to https://github.com/aspose-psd/Aspose.PSD-for-.NET | |
string sourceFile = dataDir + @"sample.psd"; | |
string destName = dataDir + @"RotatingAnImage_out.jpg"; | |
// Load an existing image into an instance of RasterImage class | |
using (Image image = Image.Load(sourceFile)) | |
{ | |
image.RotateFlip(RotateFlipType.Rotate270FlipNone); | |
image.Save(destName, new JpegOptions()); | |
} |
Поворот изображения на определенный угол
Aspose.PSD для .NET API предоставляет метод RasterImage.Rotate для удобства пользователей, которые хотят повернуть изображение под определенным углом. В отличие от метода RasterImage.RotateFlip, метод RasterImage.Rotate принимает три параметра:
- Угол поворота: Параметр типа float, который указывает угол поворота, на который должно быть повернуто изображение. Положительное значение поворачивает изображение по часовой стрелке; отрицательное значение выполняет поворот против часовой стрелки.
- Изменение пропорционально: Параметр типа Boolean определяет, должны ли изменяться размеры изображения согласно проекциям повернутого прямоугольника (точек углов). Если установлено значение false, размеры изображения останутся неизменными, и будут повернуты только внутренние содержимое изображения.
- Цвет фона: Параметр типа Color определяет цвет, заполняемый в фон повернутого изображения.
Приведенный ниже фрагмент кода демонстрирует использование метода RasterImage.Rotate.
// For complete examples and data files, please go to https://github.com/aspose-psd/Aspose.PSD-for-.NET | |
string sourceFile = dataDir + @"sample.psd"; | |
string destName = dataDir + @"RotatingImageOnSpecificAngle_out.jpg"; | |
// Load an image to be rotated in an instance of RasterImage | |
using (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.Red); | |
image.Save(destName, new JpegOptions()); | |
} |
Изменение размера изображений
В этой статье демонстрируется использование Aspose.PSD для .NET для выполнения операции изменения размера изображения. API Aspose.PSD предоставила эффективные и простые в использовании методы для достижения этой цели. Aspose.PSD для .NET предоставил метод Resize для класса Image, который можно использовать для изменения размера существующих изображений на лету. Существует две перегрузки метода Resize, чтобы удовлетворить потребности приложения.
Простое изменение размера
Шаги для выполнения изменения размера просты:
- Загрузите изображение с помощью метода фабрики Load класса Image.
- Вызовите метод Image.Resize, указав новую высоту и ширину.
- Сохраните результат.
Приведенный ниже фрагмент кода демонстрирует, как изменить размер изображения.
// For complete examples and data files, please go to https://github.com/aspose-psd/Aspose.PSD-for-.NET | |
string sourceFile = dataDir + @"sample.psd"; | |
string destName = dataDir + @"SimpleResizing_out.jpg"; | |
// Load an existing image into an instance of RasterImage class | |
using (Image image = Image.Load(sourceFile)) | |
{ | |
image.Resize(300, 300); | |
image.Save(destName, new JpegOptions()); | |
} |
Изменение размера с помощью перечисления ResizeType
API Aspose.PSD предоставила перечисление ResizeType, которое может быть использовано с методом Image.Resize для достижения желаемых результатов. Ниже приведен фрагмент кода, демонстрирующий использование перечисления ResizeType, тогда как подробности членов перечисления ResizeType можно найти внизу этой страницы.
// For complete examples and data files, please go to https://github.com/aspose-psd/Aspose.PSD-for-.NET | |
string sourceFile = dataDir + @"sample.psd"; | |
string destName = dataDir + @"ResizingwithResizeTypeEnumeration_out.jpg"; | |
// Load an existing image into an instance of RasterImage class | |
using (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 для .NET API для изменения размера изображений, передавая либо новую высоту, либо ширину, позволяя API автоматически рассчитать другое пропорциональное значение.
// For complete examples and data files, please go to https://github.com/aspose-psd/Aspose.PSD-for-.NET | |
string sourceFile = dataDir + @"sample.psd"; | |
string destName = dataDir + @"SimpleResizeImageProportionally_out.png"; | |
// Load an existing image into an instance of RasterImage class | |
using (Image image = Image.Load(sourceFile)) | |
{ | |
if (!image.IsCached) | |
{ | |
image.CacheData(); | |
} | |
// Specifying width and height | |
int newWidth = image.Width / 2; | |
image.ResizeWidthProportionally(newWidth); | |
int newHeight = image.Height / 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 | Масштабирование с использованием алгоритма ближайшего соседа. |