ラスター画像のディザリング

ディザリングは、実際に画像を作成するドットのパターンを変化させることによって、新しい色や濃淡の錯覚を作り出す技術です。これは、画像のカラー範囲を256色(またはそれ以下)に減らすための最も一般的な手段です。Aspose.PSDは、RasterImage クラス向けのディザリングサポートを提供し、Ditherメソッドを導入しています。このメソッドは、適用するディザリング手法を指定するDitheringMethod型の最初のパラメータと、ディザリング結果のサンプリングサイズを定義する整数であるビット数の2つのパラメータを受け入れます。デフォルト値は黒と白を示す1であり、許可される値はそれぞれ、2、4、256色を生成するパレットを生成します。

// 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 + @"SampleImage_out.bmp";
// Load an existing image into an instance of RasterImage class
using (var 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つです。カラー調整は以下のようにカテゴリ分けされます。

  1. 明るさは色の明るさまたは暗さを指します。画像の明るさを増やすと全ての色が明るくなり、明るさを減らすと全ての色が暗くなります。
  2. コントラストは、画像内のオブジェクトやディテールをより明瞭にすることを指します。画像のコントラストを増やすと、明暗の差が増え、明るい部分がより明るく、暗い部分がより暗くなります。一方、コントラストを減らすと、明るい部分と暗い部分はほぼ同じままですが、画像全体が均質化されます。
  3. ガンマは、画像内の物体を照らしている間接光のコントラストと明るさを最適化します。

明るさの調整

Aspose.PSD for .NET APIは、RasterImage クラス向けのAdjustBrightness メソッドを提供しており、画像の明るさを整数値としてパラメータとして渡すことで調整できます。パラメータの値が最も高いほど、より明るい画像になります。以下に、オリジナル画像と結果画像の比較が表示されています。

// 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 + @"AdjustBrightness_out.tiff";
using (var image = (PsdImage)Image.Load(sourceFile))
{
RasterCachedImage rasterImage = image;
// Set the brightness value. The accepted values of brightness are in the range [-255, 255].
rasterImage.AdjustBrightness(-50);
TiffOptions tiffOptions = new TiffOptions(TiffExpectedFormat.Default);
rasterImage.Save(destName, tiffOptions);
}

コントラストの調整

RasterImage クラスが公開するAdjustContrast メソッドは、画像のコントラストを調整するために浮動小数点値をパラメータとして渡すことができます。パラメータの値が最も高いほど、与えられた画像のコントラストが高くなります。以下に、オリジナル画像と結果画像の比較が表示されています。

// 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 + @"AdjustContrast_out.tiff";
// Load an existing image into an instance of RasterImage class
using (var 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);
tiffOptions.BitsPerSample = new ushort[] { 8, 8, 8 };
tiffOptions.Photometric = TiffPhotometrics.Rgb;
rasterImage.Save(destName, tiffOptions);
}

ガンマの調整

RasterImage クラスが公開するAdjustGamma メソッドには2つのオーバーロードがあります。1つのオーバーロードは1つの浮動小数点値を受け入れ、赤、青、緑の各色係数に対してガンマ補正を行います。一方、他のオーバーロードはそれぞれの色係数を表す3つの浮動小数点パラメータを受け入れます。次のコード例は、画像にガンマ補正を適用する方法を示しています。

// 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 + @"AdjustGamma_out.tiff";
// Load an existing image into an instance of RasterImage class
using (var 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);
tiffOptions.BitsPerSample = new ushort[] { 8, 8, 8 };
tiffOptions.Photometric = TiffPhotometrics.Rgb;
rasterImage.Save(destName, tiffOptions);
}

画像のぼかし

この記事では、Aspose.PSD for .NETを使用して画像にぼかし効果を適用する方法を示しています。Aspose.PSD APIは、この目標を達成するための効率的で使いやすいメソッドを公開しています。Aspose.PSD for .NETは、画像にぼかし効果を作成するためのGaussianBlurFilterOptions クラスを公開しています。ぼかし効果を作成するためには、GaussianBlurFilterOptions クラスに半径とシグマ値を指定する必要があります。リサイズを実行する手順は以下の通りです。

  1. Imageクラスによって公開されているLoadファクトリメソッドを使用して画像を読み込みます。
  2. 画像をRasterImageに変換します。
  3. デフォルトコンストラクタを使用したGaussianBlurFilterOptions クラスのインスタンスを作成するか、コンストラクタで半径とシグマ値を指定します。
  4. RasterImage.Filterメソッドを呼び出して、画像の境界とGaussianBlurFilterOptions クラスのインスタンスを指定します。
  5. 結果を保存します。

次のコード例は、画像でぼかし効果を作成する方法を示しています。

// 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 + @"BlurAnImage_out.gif";
// Load an existing image into an instance of RasterImage class
using (var 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.Bounds, new GaussianBlurFilterOptions(15, 15));
rasterImage.Save(destName, new GifOptions());
}

画像の透過性を確認

この記事では、Aspose.PSD for .NETを使用して画像の透明性を確認する方法を示しています。画像の透明性を確認する手順は以下の通りです。

  1. Imageクラスが公開するLoad ファクトリメソッドを使用して画像を読み込みます。
  2. 画像の不透明度をチェックし、不透明度がゼロであれば画像は透明です。
  3. 次のコード例は、画像が透明かどうかを確認する方法を示しています。
// 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 + @"AdjustBrightness_out.tiff";
// Load an existing image into an instance of RasterImage class
using (PsdImage image = (PsdImage)Image.Load(sourceFile))
{
float opacity = image.ImageOpacity;
Console.WriteLine(opacity);
if (opacity == 0)
{
// The image is fully transparent.
}
}

損失率のGIF圧縮を実装

Aspose.PSD for .NETを使用すると、開発者はピクセルの差異を設定できます。GIFの圧縮は、見られるピクセルの「辞書」に基づいています。通常のエンコーダーは、画像内のピクセルと完全に一致する最も長いピクセル文字列を辞書で検索します。一方、損失エンコーダーは、画像内のピクセルに「十分に似ている」最長のピクセル文字列を選択します。以下に、この機能のコードデモンストレーションが示されています。

// 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 + @"anim_lossy-200.gif";
GifOptions gifExport = new GifOptions();
// Load an existing image into an instance of RasterImage class
using (var image = Image.Load(sourceFile))
{
gifExport.MaxDiff = 80;
image.Save("anim_lossy-80.gif", gifExport);
gifExport.MaxDiff = 200;
image.Save(destName, gifExport);
}

バイキュービックリサンプリングの実装

リサンプリングとは、画像のピクセル寸法を変更することです。ダウンサンプリングすると、ピクセルが削除され、したがって画像から情報と詳細が削除されます。アップサンプリングすると、ピクセルが追加されます。Photoshopはこのようなピクセルを補間して追加します。この記事では、Aspose.PSD for .NETを使用してバイキュービックリサンプリングを実行する方法を示しています。

以下に、この機能のコードデモンストレーションが示されています。

// For complete examples and data files, please go to https://github.com/aspose-psd/Aspose.PSD-for-.NET
string destNameCubicConvolution = dataDir + "ResamplerCubicConvolutionStripes_after.psd";
// Load an existing image into an instance of PsdImage class
using (PsdImage image = (PsdImage)Image.Load(sourceFile))
{
image.Resize(300, 300, ResizeType.CubicConvolution);
image.Save(destNameCubicConvolution, new PsdOptions(image));
}
string destNameCatmullRom = dataDir + "ResamplerCatmullRomStripes_after.psd";
// Load an existing image into an instance of PsdImage class
using (PsdImage image = (PsdImage)Image.Load(sourceFile))
{
image.Resize(300, 300, ResizeType.CatmullRom);
image.Save(destNameCatmullRom, new PsdOptions(image));
}
string destNameMitchell = "ResamplerMitchellStripes_after.psd";
// Load an existing image into an instance of PsdImage class
using (PsdImage image = (PsdImage)Image.Load(sourceFile))
{
image.Resize(300, 300, ResizeType.Mitchell);
image.Save(destNameMitchell, new PsdOptions(image));
}
string destNameCubicBSpline = "ResamplerCubicBSplineStripes_after.psd";
// Load an existing image into an instance of PsdImage class
using (PsdImage image = (PsdImage)Image.Load(sourceFile))
{
image.Resize(300, 300, ResizeType.CubicBSpline);
image.Save(destNameCubicBSpline, new PsdOptions(image));
}
string destNameSinC = "ResamplerSinCStripes_after.psd";
// Load an existing image into an instance of PsdImage class
using (PsdImage image = (PsdImage)Image.Load(sourceFile))
{
image.Resize(300, 300, ResizeType.SinC);
image.Save(destNameSinC, new PsdOptions(image));
}
string destNameBell = "ResamplerBellStripes_after.psd";
// Load an existing image into an instance of PsdImage class
using (PsdImage image = (PsdImage)Image.Load(sourceFile))
{
image.Resize(300, 300, ResizeType.Bell);
image.Save(destNameBell, new PsdOptions(image));
}

カラーバランス調整レイヤー

この記事では、Aspose.PSD for .NETを使用して画像にカラーバランス調整レイヤーを適用する方法を示しています。カラーバランス調整レイヤーを使用すると、画像の色調を調整する能力が得られます。これにより、三つのカラーチャンネルとその補色が表示され、これらのペアのバランスを調整して写真の外観を変更できます。

以下に、この機能のコードデモンストレーションが示されています。

// For complete examples and data files, please go to https://github.com/aspose-psd/Aspose.PSD-for-.NET
var outputPath = dataDir + "ColorBalance_out.psd";
using (var im = (FileFormats.Psd.PsdImage)Image.Load(filePath))
{
foreach (var layer in im.Layers)
{
var cbLayer = layer as ColorBalanceAdjustmentLayer;
if (cbLayer != null)
{
cbLayer.ShadowsCyanRedBalance = 30;
cbLayer.ShadowsMagentaGreenBalance = -15;
cbLayer.ShadowsYellowBlueBalance = 40;
cbLayer.MidtonesCyanRedBalance = -90;
cbLayer.MidtonesMagentaGreenBalance = -25;
cbLayer.MidtonesYellowBlueBalance = 20;
cbLayer.HighlightsCyanRedBalance = -30;
cbLayer.HighlightsMagentaGreenBalance = 67;
cbLayer.HighlightsYellowBlueBalance = -95;
cbLayer.PreserveLuminosity = true;
}
}
im.Save(outputPath);
}

反転調整レイヤー

この記事では、Aspose.PSD for .NETを使用して反転調整レイヤーを実行する方法を示しています。調整レイヤーは、主にカラー補正のために使用される特別な種類のレイヤーです。独自のコンテンツを持つのではなく、それらの下のレイヤーの情報を調整します。反転調整レイヤーは、画像の色を反転してネガティブ効果を与えます。

以下に、この機能のコードデモンストレーションが示されています。

// For complete examples and data files, please go to https://github.com/aspose-psd/Aspose.PSD-for-.NET
var outputPath = dataDir + "InvertStripes_after.psd";
using (var im = (PsdImage)Image.Load(filePath))
{
im.AddInvertAdjustmentLayer();
im.Save(outputPath);
}