Изменение изображений
Дизеринг для растровых изображений
Дизеринг - это техника создания иллюзии новых цветов и оттенков путем изменения узора точек, которые фактически создают изображение. Это наиболее распространенный способ сокращения диапазона цветов изображений до 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()); | |
} |
Настройка яркости, контраста и гаммы
Цветовые коррекции в цифровых изображениях - одна из основных возможностей, которые предоставляют большинство библиотек обработки изображений. Цветовые коррекции могут быть классифицированы следующим образом.
- Яркость относится к светлоте или темноте цвета. Увеличение яркости изображения делает все цвета светлее, тогда как уменьшение яркости затемняет все цвета.
- Контраст относится к сделке объектов или деталей на изображении более очевидными. Увеличение контраста изображения увеличивает разницу между светлыми и темными областями, чтобы светлые области становились светлее, а темные - темнее. Уменьшение контраста приведет к тому, что светлые и темные области останутся примерно одинаковыми, но общее изображение станет более однородным.
- Гамма оптимизирует контраст и яркость косвенного освещения, освещающего объект на изображении.
Настройка яркости
API 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, может использоваться для настройки контраста изображения, передавая значение типа float в качестве параметра.
Наивысшее значение параметра обозначает более высокий контраст на данном изображении. Здесь приведены исходное изображение и полученное изображение для сравнения.
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, имеет две версии. Одна из перегрузок принимает одно значение типа float и выполняет коррекцию гаммы для коэффициентов красного, синего и зеленого каналов. В то время как другая перегрузка принимает три параметра типа float, представляющие каждый цветовой коэффициент отдельно. Приведенный ниже пример кода демонстрирует, как выполнить AdjustGamma на изображении.
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 для создания эффекта размытия на изображении. API Aspose.PSD предоставляет эффективные и простые в использовании методы для достижения этой цели. Aspose.PSD для Java предоставляет класс GaussianBlurFilterOptions для создания эффекта размытия на лету. Класс GaussianBlurFilterOptions требует значений радиуса и сигмы для создания эффекта размытия на изображении. Шаги для выполнения изменения размера просты, как показано ниже:
- Загрузите изображение с помощью фабричного метода Load, предоставленного классом Image.
- Преобразуйте изображение в RasterImage.
- Создайте экземпляр класса GaussianBlurFilterOptions с помощью конструктора по умолчанию или предоставьте значения радиуса и сигмы в конструкторе.
- Вызовите метод Filter класса RasterImage, указав прямоугольник как границы изображения и экземпляр класса GaussianBlurFilterOptions.
- Сохраните результат.
Приведенный ниже пример кода демонстрирует, как создать эффект размытия на изображении.
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 для проверки прозрачности изображения. Шаги для проверки прозрачности изображения просты, как показано ниже:
- Загрузите изображение с помощью фабричного метода Load, предоставленного классом Image.
- Проверьте непрозрачность изображения: если непрозрачность равна нулю, изображение является прозрачным.
- Приведенный ниже пример кода демонстрирует, как проверить, является ли изображение прозрачным или нет.
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); | |
} |
Реализация бикубического ресэмплинга
Ресэмплирование означает изменение пиксельных размеров изображения. При уменьшении размера вы удаляете пиксели и, следовательно, удаляете информацию и детали из вашего изображения. При увеличении размера вы добавляете пиксели. Photoshop добавляет эти пиксели, используя интерполяцию. Эта статья демонстрирует, как можно выполнить бикубическое ресэмплирование с помощью 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); | |
} |