ImageProcessorを利用するコードはこちらの記事を参照してください。
Size
クラスが System.Drawing.Size
と SixLabors.ImageSharp.Size
のどちらを指定しているのかあいまいなために発生します。Size
をSystem.Drawing.Size
に変更します。 private void InitializeComponent()
{
SuspendLayout();
//
// Form1
//
AutoScaleDimensions = new System.Drawing.SizeF(7F, 15F);
AutoScaleMode = AutoScaleMode.Font;
ClientSize = new System.Drawing.Size(512, 227);
Name = "Form1";
Text = "Form1";
ResumeLayout(false);
}
using SixLabors.ImageSharp;
using SixLabors.ImageSharp.Formats.Webp;
namespace WebPConvWindowsForm
{
public partial class FormMain : Form
{
public FormMain()
{
InitializeComponent();
}
private void button1_Click(object sender, EventArgs e)
{
if (openFileDialog1.ShowDialog() == DialogResult.OK) {
if (saveFileDialog1.ShowDialog() == DialogResult.OK) {
SixLabors.ImageSharp.Image img = SixLabors.ImageSharp.Image.Load(openFileDialog1.FileName);
WebpEncoder we = new WebpEncoder() { FileFormat = WebpFileFormatType.Lossy, Quality = 80 };
img.SaveAsWebp(saveFileDialog1.FileName, we);
}
}
}
}
}
SixLabors.ImageSharp.Image.Load()
メソッドを呼び出し、元の画像をSixLabors.ImageSharp.Image
オブジェクトに読み込みます。
WebpEncoder を作成し、WebPの保存フォーマットに関する設定をします。今回のコードでは、非可逆圧縮で、品質を80で保存する設定とします。SaveAsWebp()
メソッドでWebP形式で保存します。第一引数に保存先のファイルパスを与えます。
第二引数には先のコードで作成した、WebpEncoder オブジェクトを与えます。 if (openFileDialog1.ShowDialog() == DialogResult.OK) {
if (saveFileDialog1.ShowDialog() == DialogResult.OK) {
SixLabors.ImageSharp.Image img = SixLabors.ImageSharp.Image.Load(openFileDialog1.FileName);
WebpEncoder we = new WebpEncoder() { FileFormat = WebpFileFormatType.Lossy, Quality = 80 };
img.SaveAsWebp(saveFileDialog1.FileName, we);
}
}
using SixLabors.ImageSharp;
using SixLabors.ImageSharp.Formats.Webp;
namespace WebPConvWindowsForm
{
public partial class FormMain : Form
{
public FormMain()
{
InitializeComponent();
}
private void button2_Click(object sender, EventArgs e)
{
if (openFileDialog1.ShowDialog() == DialogResult.OK) {
if (saveFileDialog1.ShowDialog() == DialogResult.OK) {
SixLabors.ImageSharp.Image img = SixLabors.ImageSharp.Image.Load(openFileDialog1.FileName);
WebpEncoder we = new WebpEncoder() { FileFormat = WebpFileFormatType.Lossless, Quality = 80 };
img.SaveAsWebp(saveFileDialog1.FileName, we);
}
}
}
}
}
WebpFileFormatType.Lossless
を設定します。
この設定により、非可逆でのWebPファイルの保存となります。
Qualityの値は0~100の範囲で指定できます。値が大きいほど、圧縮処理が最適化されファイルサイズは小さくなりますが、処理時間はかかります。 WebpEncoder we = new WebpEncoder() { FileFormat = WebpFileFormatType.Lossless, Quality = 80 };
img.SaveAsWebp(saveFileDialog1.FileName, we);
using Microsoft.AspNetCore.WebUtilities;
using SixLabors.ImageSharp;
using SixLabors.ImageSharp.Formats.Webp;
var builder = WebApplication.CreateBuilder(args);
var app = builder.Build();
app.UseRouting();
app.UseEndpoints(endpoints =>
{
endpoints.MapGet("/", async context =>
{
MemoryStream ms = new MemoryStream();
SixLabors.ImageSharp.Image img = SixLabors.ImageSharp.Image.Load("image.png");
WebpEncoder we = new WebpEncoder() { FileFormat = WebpFileFormatType.Lossy, Quality = 80 };
img.SaveAsWebp(ms, we);
ms.Seek(0, SeekOrigin.Begin);
byte[] imageBytes = ms.ToArray();
ms.Close();
await context.Response.Body.WriteAsync(imageBytes);
});
});
app.Run();
MemoryStream ms = new MemoryStream();
レスポンスヘッダのContentTypeを指定します。WebP画像を返しますので image/webp
を設定します。 context.Response.ContentType = "image/webp";
SixLabors.ImageSharp.Image img = SixLabors.ImageSharp.Image.Load("image.png");
WebpEncoder we = new WebpEncoder() { FileFormat = WebpFileFormatType.Lossy, Quality = 80 };
img.SaveAsWebp(ms, we);
ms.Seek(0, SeekOrigin.Begin);
byte[] imageBytes = ms.ToArray();
ms.Close();
await context.Response.Body.WriteAsync(imageBytes);