C#を介してEMFをディザリングします
サーバーサイドAPIを使用して、独自の.NETアプリをディザEMFファイルに構築します。
C#を使用してEMFファイルをディザリングする方法
スムーズなユーザー エクスペリエンスを確保するには、Web 配置用に画像を効率的に最適化することが重要です。このような最適化への 1 つのアプローチには、画像のカラー パレットを減らすことが含まれます。これにより、ファイル サイズが減少し、ページの読み込み時間が短縮されます。ただし、滑らかなカラー グラデーションが崩れたり、単色領域に鮮明な境界が現れたりするのを防ぐには、ディザリングとして知られる画像平滑化機能を使用することが不可欠です。この技術を使用すると、画像や写真に制御された量の「ノイズ」を導入することができます。これにより、カラー フィールド内の遷移が滑らかになり、画像全体の視覚的な魅力が向上するというプラスの効果が得られます。 EMF ファイルをディザリングするには、次を使用します。 Aspose.Imaging for .NET 機能が豊富で強力で使いやすいC#プラットフォーム用の画像操作および変換APIであるAPI。開ける NuGet パッケージマネージャー、検索 ** Aspose.Imaging ** とインストールします。パッケージマネージャーコンソールから次のコマンドを使用することもできます。
パッケージマネージャーコンソールコマンド
PM> Install-Package Aspose.Imaging
C#を介してEMFをディザリングする手順
あなたは aspose.imaging.dll 自分の環境で次のワークフローを試してください。
+Image.Loadメソッドを使用してEMFファイルをロードします +ディザ画像; +Aspose.Imaging形式でサポートされているディスクに圧縮画像を保存します
システム要求
Aspose.Imaging for .NETは、すべての主要なオペレーティングシステムでサポートされています。次の前提条件があることを確認してください。
-Microsoft Windows、または.NET Framework、.NET Core、Windowsアプリケーション、ASP.NETWebアプリケーションと互換性のあるOS。 -Microsoft VisualStudioのような開発環境。 -プロジェクトで参照されているAspose.Imagingfor.NET。
ディザEMF画像-.NET
using Aspose.Imaging; | |
using Aspose.Imaging.FileFormats.Bmp; | |
using Aspose.Imaging.FileFormats.Dicom; | |
using Aspose.Imaging.FileFormats.Emf; | |
using Aspose.Imaging.FileFormats.Jpeg; | |
using Aspose.Imaging.FileFormats.Jpeg2000; | |
using Aspose.Imaging.FileFormats.Png; | |
using Aspose.Imaging.FileFormats.Psd; | |
using Aspose.Imaging.FileFormats.Tiff.Enums; | |
using Aspose.Imaging.ImageFilters.FilterOptions; | |
using Aspose.Imaging.ImageOptions; | |
using Aspose.Imaging.Masking; | |
using Aspose.Imaging.Masking.Options; | |
using Aspose.Imaging.Masking.Result; | |
using Aspose.Imaging.Sources; | |
using System; | |
using System.Collections.Generic; | |
using System.IO; | |
using System.Linq; | |
string templatesFolder = @"c:\Users\USER\Downloads"; | |
ThresholdDithering(); | |
void FloydSteinbergDithering() | |
{ | |
FilterImages(image => | |
{ | |
//https://apireference.aspose.com/imaging/net/aspose.imaging/ditheringmethod | |
image.Dither(DitheringMethod.FloydSteinbergDithering, 4); | |
}, "floydsteinbergdithering"); | |
} | |
void ThresholdDithering() | |
{ | |
FilterImages(image => | |
{ | |
//https://apireference.aspose.com/imaging/net/aspose.imaging/ditheringmethod | |
image.Dither(DitheringMethod.ThresholdDithering, 4); | |
}, "thresholddithering"); | |
} | |
void FilterImages(Action<RasterImage> doFilter, string filterName) | |
{ | |
List<string> rasterFormats = new List<string>() { "jpg", "png", "bmp", "apng", "dicom", | |
"jp2", "j2k", "tga", "webp", "tif", "gif", "ico" }; | |
List<string> vectorFormats = new List<string>() { "svg", "otg", "odg", "eps", "wmf", "emf", "wmz", "emz", "cmx", "cdr" }; | |
List<string> allFormats = new List<string>(rasterFormats); | |
allFormats.AddRange(vectorFormats); | |
allFormats.ForEach( | |
formatExt => | |
{ | |
var inputFile = Path.Combine(templatesFolder, $"template.{formatExt}"); | |
bool isVectorFormat = vectorFormats.IndexOf(formatExt) > -1; | |
//Need to rasterize vector formats before background remove | |
if (isVectorFormat) | |
{ | |
inputFile = RasterizeVectorImage(formatExt, inputFile); | |
} | |
var outputFile = Path.Combine(templatesFolder, $"{filterName}_{formatExt}.png"); | |
Console.WriteLine($"Processing {formatExt}"); | |
using (var image = (RasterImage)Image.Load(inputFile)) | |
{ | |
doFilter(image); | |
//If image is multipage save each page to png to demonstrate results | |
if (image is IMultipageImage multiPage && multiPage.PageCount > 1) | |
{ | |
for (var pageIndex = 0; pageIndex < multiPage.PageCount; pageIndex++) | |
{ | |
string fileName = $"{filterName}_page{pageIndex}_{formatExt}.png"; | |
multiPage.Pages[pageIndex].Save(templatesFolder + fileName, new PngOptions()); | |
File.Delete(templatesFolder + fileName); | |
} | |
} | |
else | |
{ | |
image.Save(outputFile, new PngOptions()); | |
File.Delete(outputFile); | |
} | |
} | |
//Remove rasterized vector image | |
if (isVectorFormat) | |
{ | |
File.Delete(inputFile); | |
} | |
} | |
); | |
} | |
string RasterizeVectorImage(string formatExt, string inputFile) | |
{ | |
string outputFile = Path.Combine(templatesFolder, $"rasterized.{formatExt}.png"); | |
using (var image = Image.Load(inputFile)) | |
{ | |
image.Save(outputFile, new PngOptions()); | |
} | |
return outputFile; | |
} |
Aspose.Imaging for .NET APIについて
Aspose.Imaging APIは、アプリケーション内で画像(写真)を作成、変更、描画、または変換するための画像処理ソリューションです。クロスプラットフォームの画像処理(さまざまな画像形式間の変換(均一なマルチページまたはマルチフレームの画像処理を含む)、描画などの変更、グラフィックプリミティブの操作、変換(サイズ変更、トリミング、反転、回転)を含むがこれらに限定されない) 、2値化、グレースケール、調整)、高度な画像操作機能(フィルタリング、ディザリング、マスキング、デスキュー)、およびメモリ最適化戦略。これはスタンドアロンライブラリであり、画像操作をソフトウェアに依存しません。プロジェクト内のネイティブAPIを使用して、高性能の画像変換機能を簡単に追加できます。これらは100%プライベートのオンプレミスAPIであり、画像はサーバーで処理されます。オンラインアプリ経由でディザEMF
[Live Demos Webサイト](https://products.aspose.app/imaging/image-Dither)にアクセスして、EMFドキュメントをディザリングします。 ライブデモには次の利点があります
EMF とは EMF ファイル形式
拡張メタファイル形式(EMF)は、グラフィック画像をデバイスに依存せずに保存します。 EMFのメタファイルは、任意の出力デバイスで解析した後、保存された画像をレンダリングできる時系列の可変長レコードで構成されます。これらの可変長レコードは、囲まれたオブジェクトの定義、描画用のコマンド、および画像を正確にレンダリングするために重要なグラフィックスプロパティにすることができます。デバイスが独自のグラフィックス環境を使用してEMFメタファイルを開くと、開いているデバイスプラットフォームに関係なく、元の画像の比率、寸法、色、およびその他のグラフィックプロパティは同じままです。
続きを読むその他のサポートされているディザ形式
C#を使用すると、次のようなさまざまな形式を簡単にディザリングできます。