using FellowOakDicom.Imaging; using SixLabors.ImageSharp.Formats.Jpeg; using SixLabors.ImageSharp; using SixLabors.ImageSharp.Processing; using System.Security.Cryptography; using System.Text; namespace IRaCIS.Core.Application.Helper; public static class ImageHelper { // 采用ImageSharp组件 跨平台,不依赖windows 平台图像处理组件,这里大坑(net 6 下,之前由于Dicom处理最新组件 依赖了这个库的一个旧版本,导致缩略图bug,单独升级依赖组件才解决) public static void ResizeSave(string filePath, string? fileStorePath) { fileStorePath = fileStorePath ?? filePath + ".preview.jpeg"; using (var image = SixLabors.ImageSharp.Image.Load(filePath)) { image.Mutate(x => x.Resize(500, 500)); image.Save(fileStorePath); } } public static Stream RenderPreviewJpeg(string filePath) { string jpegPath = filePath + ".preview.jpg"; if (!File.Exists(jpegPath)) { using (Stream stream = new FileStream(jpegPath, FileMode.Create)) { DicomImage image = new DicomImage(filePath); var sharpimage = image.RenderImage().AsSharpImage(); sharpimage.Save(stream, new JpegEncoder()); } } return new FileStream(jpegPath, FileMode.Open); } public static void RemovePreviewJpeg(string filePath) { string jpegPath = filePath + ".preview.jpg"; if (File.Exists(jpegPath)) File.Delete(jpegPath); } }