Post history - Last 5 commits
11/03/2025 21:57:09 - folder ( Vasilis Plavos )
26/02/2025 14:09:47 - Update IImageSharpService.cs ( Vasilis Plavos )
28/10/2024 18:57:33 - Update IImageSharpService.cs ( Vasilis Plavos )
12/06/2024 07:52:20 - cmt ( Vasileios Plavos )
28/03/2024 15:03:50 - update nuget ( Vasileios Plavos )
👉 View code on GitHub
using SixLabors.ImageSharp;
using SixLabors.ImageSharp.Formats;
using SixLabors.ImageSharp.Formats.Webp;
using SixLabors.ImageSharp.PixelFormats;
namespace Examples.y23.ImageSharp.Services;
public interface IImageSharpService
{
Task<bool> RunAsync();
}
public class ImageSharpService : IImageSharpService
{
private readonly string _buildPath = Path.Combine(Path.GetDirectoryName(System.Reflection.Assembly.GetExecutingAssembly().Location)!);
public async Task<bool> RunAsync()
{
// loading image from file
using var image = await Image.LoadAsync($"{_buildPath}/image.jpg");
// get image file extension (ex. jpg)
var imageTypeExtension = GetImageTypeExt(image);
// get base64string of webp image from jpg image
var base64String = image.ToBase64String(WebpFormat.Instance);
// get image file extension from base64String (ex. webp)
imageTypeExtension = GetBase64StringImageTypeExt(base64String);
// load image from base64String
using var image2 = ConvertBase64StringToImage(base64String);
// load image to MemoryStream in WebP format and return it
var imageStream = ImageToStream(image);
// get base64string of webp image from ImageStream
base64String = StreamToBase64String(imageStream);
await imageStream.DisposeAsync();
// get image file extension from base64String (ex. webp)
var format = GetFormat("image/webp");
base64String = image.ToBase64String(format ?? WebpFormat.Instance);
// saving image as webp
await image.SaveAsync($"{_buildPath}/image.webp");
// load image to MemoryStream in webp image
// save image to webp
// return webpimage from stream
var webPImage = ImageToWebP(image);
webPImage.Dispose();
return true;
}
private Image ConvertBase64StringToImage(string base64String)
{
var finalB64 = base64String.Split(",")[1];
var imageContent = Convert.FromBase64String(finalB64);
return Image.Load(imageContent);
}
private string GetBase64StringImageTypeExt(string base64String)
{
var imgExt = base64String.Split(",")[0].Replace("data:image/", "").Replace(";base64","");
return imgExt;
}
private string GetImageTypeExt(Image image)
{
return image.Metadata.DecodedImageFormat!.FileExtensions.First();
}
private IImageFormat GetFormat(string? mimeType)
{
return mimeType switch
{
"image/webp" => WebpFormat.Instance,
_ => WebpFormat.Instance
};
}
private MemoryStream ImageToStream(Image image)
{
var webPStream = new MemoryStream();
image.Save(webPStream, new WebpEncoder{ Quality = 80 }); // similar image.SaveAsWebp(webPStream);
webPStream.Position = 0;
return webPStream;
}
private Image ImageToWebP(Image image)
{
var stream = ImageToStream(image);
return Image.Load(stream);
}
private string StreamToBase64String(MemoryStream imageStream)
{
using var image = Image.Load<Rgba32>(imageStream);
var webPBase64String = image.ToBase64String(WebpFormat.Instance);
return webPBase64String;
}
}