summaryrefslogtreecommitdiff
path: root/Services/ImageResizer.cs
blob: c9aeafa6a14797e0777f73060ac92889912e3fbb (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
using SkiaSharp;

namespace MyDarling.Services
{
	public class ImageResizer : IImageResizer
	{
		public void CreateThumbnail(string inputPath)
		{
			using var input = File.OpenRead(inputPath);
			using var inputStream = new SKManagedStream(input);
			var outputPath = Path.GetDirectoryName(inputPath) + "/" +
				Path.GetFileNameWithoutExtension(inputPath) + "_thumb.jpg";
			WriteResized(inputStream, 600, outputPath);
		}
		public void WriteResized(IFormFile formFile, string outputFilePath)
		{
			SKManagedStream stream = new(formFile.OpenReadStream());
			WriteResized(stream, 2000, outputFilePath);
		}

		private void WriteResized(SKManagedStream stream, int size, string outputFilePath)
		{
			int quality = 95;
			var skData = SKData.Create(stream);
			using var original = SKBitmap.Decode(skData);

			int width, height;
			if (original.Width > original.Height)
			{
				width = size;
				height = original.Height * size / original.Width;
			}
			else
			{
				width = original.Width * size / original.Height;
				height = size;
			}

			using var resized = original.Resize(new SKImageInfo(width, height), SKFilterQuality.High);
			if (resized == null) return;

			using var image = SKImage.FromBitmap(resized);
			using var output = File.OpenWrite(outputFilePath);

			image.Encode(SKEncodedImageFormat.Jpeg, quality).SaveTo(output);
		}
	}
}