验证环境生成缩略图测试ok提交
continuous-integration/drone/push Build is passing
Details
continuous-integration/drone/push Build is passing
Details
parent
24bfb4920c
commit
87caf24dd1
|
@ -15,14 +15,20 @@ public static class ImageHelper
|
||||||
|
|
||||||
fileStorePath = fileStorePath ?? filePath + ".preview.jpeg";
|
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.Mutate(x => x.Resize(500, 500));
|
||||||
|
|
||||||
image.Save(fileStorePath);
|
// 保存缩略图为 JPEG
|
||||||
|
image.Save(fileStorePath, new JpegEncoder());
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
|
|
@ -1,5 +1,6 @@
|
||||||
using Aliyun.OSS;
|
using Aliyun.OSS;
|
||||||
using DocumentFormat.OpenXml.Spreadsheet;
|
using DocumentFormat.OpenXml.Spreadsheet;
|
||||||
|
using FellowOakDicom.Imaging;
|
||||||
using IRaCIS.Application.Contracts;
|
using IRaCIS.Application.Contracts;
|
||||||
using IRaCIS.Core.Application.BusinessFilter;
|
using IRaCIS.Core.Application.BusinessFilter;
|
||||||
using IRaCIS.Core.Application.Contracts;
|
using IRaCIS.Core.Application.Contracts;
|
||||||
|
@ -27,8 +28,13 @@ using Microsoft.Extensions.Options;
|
||||||
using MiniExcelLibs;
|
using MiniExcelLibs;
|
||||||
using NPOI.SS.Formula.Functions;
|
using NPOI.SS.Formula.Functions;
|
||||||
using NPOI.XWPF.UserModel;
|
using NPOI.XWPF.UserModel;
|
||||||
|
using SharpCompress.Common;
|
||||||
|
using SixLabors.ImageSharp;
|
||||||
|
using SixLabors.ImageSharp.Formats.Jpeg;
|
||||||
|
using SixLabors.ImageSharp.Processing;
|
||||||
using System.Globalization;
|
using System.Globalization;
|
||||||
using System.Linq.Dynamic.Core;
|
using System.Linq.Dynamic.Core;
|
||||||
|
using System.Reactive.Subjects;
|
||||||
using System.Reflection.Metadata.Ecma335;
|
using System.Reflection.Metadata.Ecma335;
|
||||||
using System.Runtime.InteropServices;
|
using System.Runtime.InteropServices;
|
||||||
using System.Text;
|
using System.Text;
|
||||||
|
@ -54,6 +60,7 @@ namespace IRaCIS.Core.Application.Service
|
||||||
IRepository<DicomSeries> _dicomSeriesRepository,
|
IRepository<DicomSeries> _dicomSeriesRepository,
|
||||||
IRepository<UserRole> _userRoleRepository,
|
IRepository<UserRole> _userRoleRepository,
|
||||||
IRepository<TrialBodyPart> _trialBodyPartRepository,
|
IRepository<TrialBodyPart> _trialBodyPartRepository,
|
||||||
|
IOSSService _IOSSService,
|
||||||
IDistributedLockProvider _distributedLockProvider,
|
IDistributedLockProvider _distributedLockProvider,
|
||||||
ILogger<TestService> _logger, IMapper _mapper, IUserInfo _userInfo, IStringLocalizer _localizer) : BaseService
|
ILogger<TestService> _logger, IMapper _mapper, IUserInfo _userInfo, IStringLocalizer _localizer) : BaseService
|
||||||
{
|
{
|
||||||
|
@ -160,7 +167,7 @@ namespace IRaCIS.Core.Application.Service
|
||||||
await _trialQCQuestionAnswerRepository.BatchDeleteNoTrackingAsync(t => t.SubjectVisitId == subjectVisitId);
|
await _trialQCQuestionAnswerRepository.BatchDeleteNoTrackingAsync(t => t.SubjectVisitId == subjectVisitId);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
var success = await _subjectVisitRepository.SaveChangesAsync();
|
var success = await _subjectVisitRepository.SaveChangesAsync();
|
||||||
|
|
||||||
|
@ -168,6 +175,63 @@ namespace IRaCIS.Core.Application.Service
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
/// <summary>
|
||||||
|
/// 后端处理某个中心缩略图有问题 先下载,生成缩略图上传,然后更新数据库
|
||||||
|
/// </summary>
|
||||||
|
/// <returns></returns>
|
||||||
|
[AllowAnonymous]
|
||||||
|
public async Task<IResponseOutput> 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<IResponseOutput> DeleteOSSDate(string rootFolder,
|
public async Task<IResponseOutput> DeleteOSSDate(string rootFolder,
|
||||||
[FromServices] IOSSService _oSSService, [FromServices] IWebHostEnvironment _hostEnvironment)
|
[FromServices] IOSSService _oSSService, [FromServices] IWebHostEnvironment _hostEnvironment)
|
||||||
{
|
{
|
||||||
|
|
Loading…
Reference in New Issue