From 87caf24dd1865619ace7d8545b583e7ea734579a Mon Sep 17 00:00:00 2001 From: hang <872297557@qq.com> Date: Thu, 3 Apr 2025 13:49:34 +0800 Subject: [PATCH] =?UTF-8?q?=E9=AA=8C=E8=AF=81=E7=8E=AF=E5=A2=83=E7=94=9F?= =?UTF-8?q?=E6=88=90=E7=BC=A9=E7=95=A5=E5=9B=BE=E6=B5=8B=E8=AF=95ok?= =?UTF-8?q?=E6=8F=90=E4=BA=A4?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../Helper/OtherTool/ImageHelper.cs | 14 ++-- IRaCIS.Core.Application/TestService.cs | 66 ++++++++++++++++++- 2 files changed, 75 insertions(+), 5 deletions(-) diff --git a/IRaCIS.Core.Application/Helper/OtherTool/ImageHelper.cs b/IRaCIS.Core.Application/Helper/OtherTool/ImageHelper.cs index 293511f2d..83843f400 100644 --- a/IRaCIS.Core.Application/Helper/OtherTool/ImageHelper.cs +++ b/IRaCIS.Core.Application/Helper/OtherTool/ImageHelper.cs @@ -15,14 +15,20 @@ public static class ImageHelper fileStorePath = fileStorePath ?? filePath + ".preview.jpeg"; - using (var image = SixLabors.ImageSharp.Image.Load(filePath)) - { + // 读取 DICOM 文件 + var dicomImage = new DicomImage(filePath); + // 渲染 DICOM 图像到 ImageSharp 格式 + using (var image = dicomImage.RenderImage().AsSharpImage()) + { + // 生成缩略图(调整大小) image.Mutate(x => x.Resize(500, 500)); - image.Save(fileStorePath); - + // 保存缩略图为 JPEG + image.Save(fileStorePath, new JpegEncoder()); } + + } diff --git a/IRaCIS.Core.Application/TestService.cs b/IRaCIS.Core.Application/TestService.cs index 2b916b3d0..6a53400fd 100644 --- a/IRaCIS.Core.Application/TestService.cs +++ b/IRaCIS.Core.Application/TestService.cs @@ -1,5 +1,6 @@ using Aliyun.OSS; using DocumentFormat.OpenXml.Spreadsheet; +using FellowOakDicom.Imaging; using IRaCIS.Application.Contracts; using IRaCIS.Core.Application.BusinessFilter; using IRaCIS.Core.Application.Contracts; @@ -27,8 +28,13 @@ using Microsoft.Extensions.Options; using MiniExcelLibs; using NPOI.SS.Formula.Functions; using NPOI.XWPF.UserModel; +using SharpCompress.Common; +using SixLabors.ImageSharp; +using SixLabors.ImageSharp.Formats.Jpeg; +using SixLabors.ImageSharp.Processing; using System.Globalization; using System.Linq.Dynamic.Core; +using System.Reactive.Subjects; using System.Reflection.Metadata.Ecma335; using System.Runtime.InteropServices; using System.Text; @@ -54,6 +60,7 @@ namespace IRaCIS.Core.Application.Service IRepository _dicomSeriesRepository, IRepository _userRoleRepository, IRepository _trialBodyPartRepository, + IOSSService _IOSSService, IDistributedLockProvider _distributedLockProvider, ILogger _logger, IMapper _mapper, IUserInfo _userInfo, IStringLocalizer _localizer) : BaseService { @@ -160,7 +167,7 @@ namespace IRaCIS.Core.Application.Service await _trialQCQuestionAnswerRepository.BatchDeleteNoTrackingAsync(t => t.SubjectVisitId == subjectVisitId); } - + var success = await _subjectVisitRepository.SaveChangesAsync(); @@ -168,6 +175,63 @@ namespace IRaCIS.Core.Application.Service } + + + /// + /// 后端处理某个中心缩略图有问题 先下载,生成缩略图上传,然后更新数据库 + /// + /// + [AllowAnonymous] + public async Task BackImageResize(Guid trialSiteId ,Guid subjectId/* , [FromServices] IRepository<>*/) + { + ///${params.trialId}/ Image /${params.subjectId}/${params.subjectVisitId}/${ dicomInfo.studyUid}/${ v.seriesUid}.jpg + + var dealSeriesList = await _dicomSeriesRepository.Where(t => t.DicomStudy.Subject.TrialSiteId == trialSiteId && t.SubjectId== subjectId).Select(t => new { t.Id, t.SubjectId, t.TrialId, t.SubjectVisitId, t.StudyInstanceUid, t.SeriesInstanceUid, t.ImageResizePath, t.UpdateUserId, FirstInstancePath = t.DicomInstanceList.First().Path }).ToListAsync(); + + //下载到本地 + string tempFolderPath = Path.Combine(Directory.GetCurrentDirectory(), $"DownloadTemp_{NewId.NextGuid()}"); + Directory.CreateDirectory(tempFolderPath); + + foreach (var dealSeries in dealSeriesList) + { + var fileName = Path.GetFileNameWithoutExtension(dealSeries.FirstInstancePath); + + var localFilePath = Path.Combine(tempFolderPath, fileName); + + await _IOSSService.DownLoadFromOSSAsync(dealSeries.FirstInstancePath, localFilePath); + + + var resizePath = localFilePath + "_New.jpg"; + + //生成缩略图 + + // 读取 DICOM 文件 + var dicomImage = new DicomImage(localFilePath); + + + // 渲染 DICOM 图像到 ImageSharp 格式 + using (var image = dicomImage.RenderImage().AsSharpImage()) + { + // 生成缩略图(调整大小) + image.Mutate(x => x.Resize(500, 500)); + + // 保存缩略图为 JPEG + image.Save(resizePath, new JpegEncoder()); + } + + var ossFolder = $"{dealSeries.TrialId}/Image/{dealSeries.SubjectId}/{dealSeries.SubjectVisitId}/{dealSeries.StudyInstanceUid}"; + + var relativePath = await _IOSSService.UploadToOSSAsync(resizePath, ossFolder, false); + + await _dicomSeriesRepository.BatchUpdateNoTrackingAsync(t => t.Id == dealSeries.Id, u => new DicomSeries() { ImageResizePath = relativePath, UpdateUserId = dealSeries.UpdateUserId }); + + } + + return ResponseOutput.Ok(); + + } + + public async Task DeleteOSSDate(string rootFolder, [FromServices] IOSSService _oSSService, [FromServices] IWebHostEnvironment _hostEnvironment) {