You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
642 lines
22 KiB
642 lines
22 KiB
using Microsoft.AspNetCore.Http;
|
|
using NPOI.HPSF;
|
|
using System;
|
|
using System.Collections.Generic;
|
|
using System.Diagnostics;
|
|
using System.Drawing;
|
|
using System.Drawing.Imaging;
|
|
//using System.DrawingCore;
|
|
using System.IO;
|
|
using System.Linq;
|
|
using System.Net;
|
|
using System.Net.Http;
|
|
using System.Text;
|
|
using System.Threading.Tasks;
|
|
using Volo.Abp;
|
|
|
|
namespace Shentun.Peis
|
|
{
|
|
public class ImageHelper
|
|
{
|
|
|
|
|
|
/// <summary>
|
|
/// 将Base64字符串转换为图片并保存到本地
|
|
/// </summary>
|
|
/// <param name="base64Str">base64字符串</param>
|
|
/// <param name="savePath">图片保存地址,如:/Content/Images/10000</param>
|
|
/// <returns></returns>
|
|
public static string Base64StrToImage(string base64Str, string savePath)
|
|
{
|
|
var ret = "";
|
|
|
|
try
|
|
{
|
|
base64Str = base64Str.Substring(base64Str.IndexOf(",") + 1);
|
|
|
|
var bitmap = Base64StrToImage(base64Str);
|
|
|
|
if (bitmap != null)
|
|
{
|
|
string ImageSuffix = "";
|
|
if (ImageFormat.Png.Guid == bitmap.RawFormat.Guid)
|
|
{
|
|
ImageSuffix = ".png";
|
|
}
|
|
else if (ImageFormat.Gif.Guid == bitmap.RawFormat.Guid)
|
|
{
|
|
ImageSuffix = ".gif";
|
|
}
|
|
else
|
|
{
|
|
ImageSuffix = ".jpg";
|
|
}
|
|
|
|
savePath = savePath + ImageSuffix;
|
|
|
|
//创建文件夹
|
|
var folderPath = savePath.Substring(0, savePath.LastIndexOf('/'));
|
|
|
|
if (!Directory.Exists(folderPath))
|
|
{
|
|
Directory.CreateDirectory(folderPath);
|
|
}
|
|
|
|
//图片后缀格式
|
|
var suffix = savePath.Substring(savePath.LastIndexOf('.') + 1, savePath.Length - savePath.LastIndexOf('.') - 1).ToLower();
|
|
var suffixName = suffix == "png" ? ImageFormat.Png :
|
|
suffix == "jpg" || suffix == "jpeg" ? ImageFormat.Jpeg :
|
|
suffix == "bmp" ? ImageFormat.Bmp :
|
|
suffix == "gif" ? ImageFormat.Gif : ImageFormat.Jpeg;
|
|
|
|
|
|
|
|
//这里复制一份对图像进行保存,否则会出现“GDI+ 中发生一般性错误”的错误提示
|
|
var bmpNew = new Bitmap(bitmap);
|
|
// bmpNew.Save(_hostingEnvironment.ContentRootPath + savePath, suffixName);
|
|
|
|
var s1 = Directory.GetCurrentDirectory();
|
|
|
|
string saveurl = Path.Combine(s1, savePath);
|
|
|
|
bmpNew.Save(saveurl, suffixName);
|
|
bmpNew.Dispose();
|
|
|
|
bitmap.Dispose();
|
|
|
|
ret = savePath;
|
|
}
|
|
else
|
|
{
|
|
ret = "";
|
|
}
|
|
}
|
|
catch (Exception ex)
|
|
{
|
|
ret = "";
|
|
}
|
|
|
|
return ret;
|
|
}
|
|
|
|
|
|
|
|
/// <summary>
|
|
/// 将Byte[]转换为图片并保存到本地
|
|
/// </summary>
|
|
/// <param name="base64Str">base64字符串</param>
|
|
/// <param name="savePath">图片保存地址,如:/Content/Images/10000</param>
|
|
/// <returns></returns>
|
|
public static string ByteToImage(byte[] photo, string savePath)
|
|
{
|
|
var ret = "";
|
|
|
|
try
|
|
{
|
|
MemoryStream ms = new MemoryStream(photo);
|
|
Bitmap bitmap = new Bitmap(ms);
|
|
ms.Close();
|
|
|
|
|
|
if (bitmap != null)
|
|
{
|
|
string ImageSuffix = "";
|
|
if (ImageFormat.Png.Guid == bitmap.RawFormat.Guid)
|
|
{
|
|
ImageSuffix = ".png";
|
|
}
|
|
else if (ImageFormat.Gif.Guid == bitmap.RawFormat.Guid)
|
|
{
|
|
ImageSuffix = ".gif";
|
|
}
|
|
else
|
|
{
|
|
ImageSuffix = ".jpg";
|
|
}
|
|
|
|
savePath = savePath + ImageSuffix;
|
|
|
|
//创建文件夹
|
|
var folderPath = savePath.Substring(0, savePath.LastIndexOf('/'));
|
|
|
|
if (!Directory.Exists(folderPath))
|
|
{
|
|
Directory.CreateDirectory(folderPath);
|
|
}
|
|
|
|
//图片后缀格式
|
|
var suffix = savePath.Substring(savePath.LastIndexOf('.') + 1, savePath.Length - savePath.LastIndexOf('.') - 1).ToLower();
|
|
var suffixName = suffix == "png" ? ImageFormat.Png :
|
|
suffix == "jpg" || suffix == "jpeg" ? ImageFormat.Jpeg :
|
|
suffix == "bmp" ? ImageFormat.Bmp :
|
|
suffix == "gif" ? ImageFormat.Gif : ImageFormat.Jpeg;
|
|
|
|
|
|
|
|
//这里复制一份对图像进行保存,否则会出现“GDI+ 中发生一般性错误”的错误提示
|
|
var bmpNew = new Bitmap(bitmap);
|
|
// bmpNew.Save(_hostingEnvironment.ContentRootPath + savePath, suffixName);
|
|
|
|
var s1 = Directory.GetCurrentDirectory();
|
|
|
|
string saveurl = Path.Combine(s1, savePath);
|
|
|
|
bmpNew.Save(saveurl, suffixName);
|
|
bmpNew.Dispose();
|
|
|
|
bitmap.Dispose();
|
|
|
|
ret = savePath;
|
|
}
|
|
else
|
|
{
|
|
ret = "";
|
|
}
|
|
}
|
|
catch (Exception ex)
|
|
{
|
|
ret = "";
|
|
}
|
|
|
|
return ret;
|
|
}
|
|
|
|
|
|
/// <summary>
|
|
/// 将Base64字符串转换为图片并保存到服务器
|
|
/// </summary>
|
|
/// <param name="AbsolutePath">物理路径</param>
|
|
/// <param name="fileName">图片名</param>
|
|
/// <param name="base64Str"></param>
|
|
/// <param name="PatientRegisterId">登记ID 作为目录</param>
|
|
/// <param name="RegisterCheckId">检查ID 作为目录</param>
|
|
/// <returns></returns>
|
|
public static string Base64StrToImageInAbsolutePath(string AbsolutePath, string fileName, string base64Str, string PatientRegisterId, string RegisterCheckId)
|
|
{
|
|
var ret = "";
|
|
|
|
try
|
|
{
|
|
|
|
base64Str = base64Str.Substring(base64Str.IndexOf(",") + 1);
|
|
|
|
string savePath = "";
|
|
string hostPath = "";
|
|
var bitmap = Base64StrToImage(base64Str);
|
|
|
|
if (bitmap != null)
|
|
{
|
|
string ImageSuffix = "";
|
|
if (ImageFormat.Png.Guid == bitmap.RawFormat.Guid)
|
|
{
|
|
ImageSuffix = ".png";
|
|
}
|
|
else if (ImageFormat.Gif.Guid == bitmap.RawFormat.Guid)
|
|
{
|
|
ImageSuffix = ".gif";
|
|
}
|
|
else if (ImageFormat.Bmp.Guid == bitmap.RawFormat.Guid)
|
|
{
|
|
ImageSuffix = ".bmp";
|
|
}
|
|
else
|
|
{
|
|
ImageSuffix = ".jpg";
|
|
}
|
|
|
|
string savaDirectory = $"{AbsolutePath}\\pacs\\{DateTime.Now.Year}\\{DateTime.Now.Month}\\{DateTime.Now.Day}\\{PatientRegisterId}\\{RegisterCheckId}";
|
|
|
|
savePath = $"{savaDirectory}\\{fileName + ImageSuffix}";
|
|
hostPath = $"/CheckPictureImg/pacs/{DateTime.Now.Year}/{DateTime.Now.Month}/{DateTime.Now.Day}/{PatientRegisterId}/{RegisterCheckId}/{fileName + ImageSuffix}";
|
|
|
|
|
|
if (!Directory.Exists(savaDirectory))
|
|
{
|
|
Directory.CreateDirectory(savaDirectory);
|
|
}
|
|
|
|
|
|
|
|
//图片后缀格式
|
|
var suffix = savePath.Substring(savePath.LastIndexOf('.') + 1, savePath.Length - savePath.LastIndexOf('.') - 1).ToLower();
|
|
var suffixName = suffix == "png" ? ImageFormat.Png :
|
|
suffix == "jpg" || suffix == "jpeg" ? ImageFormat.Jpeg :
|
|
suffix == "bmp" ? ImageFormat.Bmp :
|
|
suffix == "gif" ? ImageFormat.Gif : ImageFormat.Jpeg;
|
|
|
|
|
|
|
|
//这里复制一份对图像进行保存,否则会出现“GDI+ 中发生一般性错误”的错误提示
|
|
var bmpNew = new Bitmap(bitmap);
|
|
// bmpNew.Save(_hostingEnvironment.ContentRootPath + savePath, suffixName);
|
|
|
|
var s1 = Directory.GetCurrentDirectory();
|
|
|
|
string saveurl = Path.Combine(s1, savePath);
|
|
|
|
bmpNew.Save(saveurl, suffixName);
|
|
bmpNew.Dispose();
|
|
|
|
bitmap.Dispose();
|
|
|
|
ret = hostPath;
|
|
}
|
|
else
|
|
{
|
|
ret = "";
|
|
}
|
|
}
|
|
catch (Exception ex)
|
|
{
|
|
ret = "";
|
|
}
|
|
|
|
return ret;
|
|
}
|
|
|
|
|
|
public static string Base64ToImageUseAbsolutePath(string absolutePath, string fileName, string base64Str, string patientRegisterId, string registerCheckId)
|
|
{
|
|
var ret = "";
|
|
|
|
if (string.IsNullOrWhiteSpace(absolutePath))
|
|
{
|
|
throw new UserFriendlyException("absolutePath不能为空");
|
|
}
|
|
|
|
if (string.IsNullOrWhiteSpace(fileName))
|
|
{
|
|
throw new UserFriendlyException("文件名不能为空");
|
|
}
|
|
|
|
if (string.IsNullOrWhiteSpace(base64Str))
|
|
{
|
|
throw new UserFriendlyException("base64Str不能为空");
|
|
}
|
|
|
|
if (string.IsNullOrWhiteSpace(patientRegisterId))
|
|
{
|
|
throw new UserFriendlyException("PatientRegisterId不能为空");
|
|
}
|
|
|
|
if (string.IsNullOrWhiteSpace(registerCheckId))
|
|
{
|
|
throw new UserFriendlyException("RegisterCheckId不能为空");
|
|
}
|
|
|
|
string savaDirectory = $"{absolutePath}\\pacs\\{DateTime.Now.Year}\\{DateTime.Now.Month}\\{DateTime.Now.Day}\\{patientRegisterId}\\{registerCheckId}";
|
|
if (!Directory.Exists(savaDirectory))
|
|
{
|
|
Directory.CreateDirectory(savaDirectory);
|
|
}
|
|
var savePath = $"{savaDirectory}\\{fileName}";
|
|
var fullFileName = Base64ToImage(base64Str, savePath);
|
|
var ImageSuffix = Path.GetExtension(fullFileName);
|
|
var hostPath = $"/CheckPictureImg/pacs/{DateTime.Now.Year}/{DateTime.Now.Month}/{DateTime.Now.Day}/{patientRegisterId}/{registerCheckId}/{fileName + ImageSuffix}";
|
|
|
|
ret = hostPath;
|
|
return ret;
|
|
}
|
|
|
|
|
|
/// <summary>
|
|
/// 将Base64字符串转换为图片并保存到服务器
|
|
/// </summary>
|
|
/// <param name="AbsolutePath">物理路径</param>
|
|
/// <param name="base64Str"></param>
|
|
/// <param name="PatientRegisterId">登记ID 作为目录</param>
|
|
/// <param name="RegisterCheckId">检查ID 作为目录</param>
|
|
/// <param name="ImageName">图片名</param>
|
|
/// <returns></returns>
|
|
public static string Base64StrToImageInAbsolutePath2(string AbsolutePath, IFormFile file, string PatientRegisterId, string RegisterCheckId, string ImageName)
|
|
{
|
|
var ret = "";
|
|
|
|
try
|
|
{
|
|
|
|
|
|
string savePath = "";
|
|
string hostPath = "";
|
|
|
|
if (file == null || file.Length == 0)
|
|
{
|
|
throw new UserFriendlyException("图片数据有误");
|
|
}
|
|
|
|
var ImageSuffix = Path.GetExtension(file.FileName);
|
|
|
|
|
|
if (ImageSuffix == null)
|
|
{
|
|
throw new UserFriendlyException("图片数据有误");
|
|
}
|
|
|
|
string fileFilt = ".gif|.jpg|.jpeg|.png";
|
|
|
|
if (fileFilt.IndexOf(ImageSuffix.ToLower(), StringComparison.Ordinal) <= -1)
|
|
{
|
|
throw new UserFriendlyException("请上传jpg、png、gif格式的图片");
|
|
}
|
|
|
|
|
|
|
|
|
|
savePath = AbsolutePath + "\\" + PatientRegisterId + "\\" + RegisterCheckId + "\\" + ImageName + ImageSuffix;
|
|
hostPath = "/CheckPictureImg/" + PatientRegisterId + "/" + RegisterCheckId + "/" + ImageName + ImageSuffix;
|
|
|
|
|
|
if (!Directory.Exists(AbsolutePath + "\\" + PatientRegisterId))
|
|
{
|
|
Directory.CreateDirectory(AbsolutePath + "\\" + PatientRegisterId);
|
|
}
|
|
|
|
if (!Directory.Exists(AbsolutePath + "\\" + PatientRegisterId + "\\" + RegisterCheckId))
|
|
{
|
|
Directory.CreateDirectory(AbsolutePath + "\\" + PatientRegisterId + "\\" + RegisterCheckId);
|
|
}
|
|
|
|
//图片后缀格式
|
|
var suffix = savePath.Substring(savePath.LastIndexOf('.') + 1, savePath.Length - savePath.LastIndexOf('.') - 1).ToLower();
|
|
var suffixName = suffix == "png" ? ImageFormat.Png :
|
|
suffix == "jpg" || suffix == "jpeg" ? ImageFormat.Jpeg :
|
|
suffix == "bmp" ? ImageFormat.Bmp :
|
|
suffix == "gif" ? ImageFormat.Gif : ImageFormat.Jpeg;
|
|
|
|
|
|
|
|
//这里复制一份对图像进行保存,否则会出现“GDI+ 中发生一般性错误”的错误提示
|
|
// var bmpNew = new Bitmap(bitmap);
|
|
// bmpNew.Save(_hostingEnvironment.ContentRootPath + savePath, suffixName);
|
|
|
|
using (FileStream fs = System.IO.File.Create(savePath))
|
|
|
|
{
|
|
|
|
file.CopyTo(fs);
|
|
|
|
fs.Flush();
|
|
|
|
}
|
|
|
|
|
|
//var s1 = Directory.GetCurrentDirectory();
|
|
|
|
//string saveurl = Path.Combine(s1, savePath);
|
|
|
|
//bmpNew.Save(saveurl, suffixName);
|
|
//bmpNew.Dispose();
|
|
|
|
//bitmap.Dispose();
|
|
|
|
ret = hostPath;
|
|
|
|
}
|
|
catch (Exception ex)
|
|
{
|
|
ret = "";
|
|
}
|
|
|
|
return ret;
|
|
}
|
|
|
|
|
|
/// <summary>
|
|
/// 将Base64字符串转换为Image对象
|
|
/// </summary>
|
|
/// <param name="base64Str">base64字符串</param>
|
|
/// <returns></returns>
|
|
public static Bitmap Base64StrToImage(string base64Str)
|
|
{
|
|
Bitmap bitmap = null;
|
|
|
|
|
|
byte[] arr = Convert.FromBase64String(base64Str);
|
|
using (MemoryStream ms = new MemoryStream(arr))
|
|
{
|
|
|
|
Bitmap bmp = new Bitmap(ms);
|
|
ms.Close();
|
|
bitmap = bmp;
|
|
}
|
|
return bitmap;
|
|
}
|
|
|
|
public static string Base64ToImage(string base64String, string filePath)
|
|
{
|
|
if (string.IsNullOrWhiteSpace(filePath))
|
|
{
|
|
throw new UserFriendlyException("文件名不能为空");
|
|
}
|
|
|
|
if (string.IsNullOrWhiteSpace(base64String))
|
|
{
|
|
throw new UserFriendlyException("base64Str不能为空");
|
|
}
|
|
|
|
|
|
byte[] imageBytes = Convert.FromBase64String(base64String);
|
|
using (MemoryStream ms = new MemoryStream(imageBytes, 0, imageBytes.Length))
|
|
{
|
|
// Convert byte[] to Image
|
|
using (Image image = Image.FromStream(ms))
|
|
{
|
|
// Save the image to file system
|
|
string ImageSuffix = "";
|
|
if (ImageFormat.Png.Guid == image.RawFormat.Guid)
|
|
{
|
|
ImageSuffix = ".png";
|
|
}
|
|
else if (ImageFormat.Gif.Guid == image.RawFormat.Guid)
|
|
{
|
|
ImageSuffix = ".gif";
|
|
}
|
|
else if (ImageFormat.Bmp.Guid == image.RawFormat.Guid)
|
|
{
|
|
ImageSuffix = ".bmp";
|
|
}
|
|
else
|
|
{
|
|
ImageSuffix = ".jpg";
|
|
}
|
|
image.Save(filePath + ImageSuffix);
|
|
return filePath + ImageSuffix;
|
|
}
|
|
}
|
|
}
|
|
|
|
///// <summary>
|
|
///// 图片转换为base64
|
|
///// </summary>
|
|
///// <param name="imgurl"></param>
|
|
///// <returns></returns>
|
|
//public static string ImageToBase64Str(string imgurl)
|
|
//{
|
|
// string result = "";
|
|
// try
|
|
// {
|
|
// using (FileStream fs = new FileStream(imgurl, FileMode.Open, FileAccess.Read))
|
|
// {
|
|
// byte[] byteArray = new byte[fs.Length];
|
|
// fs.Read(byteArray, 0, byteArray.Length);
|
|
// result = Convert.ToBase64String(byteArray);
|
|
// }
|
|
// }
|
|
// catch(Exception ex)
|
|
// {
|
|
// result = "";
|
|
// }
|
|
// return result;
|
|
//}
|
|
|
|
///// <summary>
|
|
///// 获取图片的Base64字符串
|
|
///// </summary>
|
|
///// <param name="imageUrl">imageUrl</param>
|
|
///// <returns></returns>
|
|
//public static async Task<string> GetImageBase64StringAsync(string imageUrl)
|
|
//{
|
|
// // 创建 HttpClient 实例
|
|
// using (var httpClient = new HttpClient())
|
|
// {
|
|
// // 下载图片
|
|
// var response = await httpClient.GetAsync(imageUrl);
|
|
// var contentStream = await response.Content.ReadAsStreamAsync();
|
|
|
|
// // 将图片转换为 Base64 格式的字符串
|
|
// using (var memoryStream = new MemoryStream())
|
|
// {
|
|
// await contentStream.CopyToAsync(memoryStream);
|
|
// string base64String = Convert.ToBase64String(memoryStream.ToArray());
|
|
// return base64String;
|
|
// }
|
|
// }
|
|
//}
|
|
|
|
|
|
/// <summary>
|
|
/// 获取图片的Base64字符串
|
|
/// </summary>
|
|
/// <param name="imageUrl">imageUrl</param>
|
|
/// <returns></returns>
|
|
public static string GetImageBase64StringAsync(string imageUrl)
|
|
{
|
|
string result = "";
|
|
try
|
|
{
|
|
using (FileStream fs = new FileStream(imageUrl, FileMode.Open, FileAccess.Read))
|
|
{
|
|
byte[] byteArray = new byte[fs.Length];
|
|
fs.Read(byteArray, 0, byteArray.Length);
|
|
result = Convert.ToBase64String(byteArray);
|
|
}
|
|
}
|
|
catch
|
|
{
|
|
result = "";
|
|
}
|
|
|
|
if (!string.IsNullOrEmpty(result))
|
|
result = "data:image/jpeg;base64," + result;
|
|
return result;
|
|
}
|
|
|
|
|
|
public static string SavePacsFile(string absolutePath, string sourceFileFullName, string PatientRegisterId, string RegisterCheckId, string imageName)
|
|
{
|
|
var ret = "";
|
|
|
|
string savePath = "";
|
|
string hostPath = "";
|
|
|
|
|
|
if (string.IsNullOrWhiteSpace(absolutePath))
|
|
{
|
|
throw new UserFriendlyException("absolutePath不能为空");
|
|
}
|
|
|
|
if (string.IsNullOrWhiteSpace(sourceFileFullName))
|
|
{
|
|
throw new UserFriendlyException("文件名不能为空");
|
|
}
|
|
|
|
if (!File.Exists(sourceFileFullName))
|
|
{
|
|
throw new UserFriendlyException("文件名不存在");
|
|
}
|
|
|
|
|
|
var ImageSuffix = Path.GetExtension(sourceFileFullName);
|
|
|
|
if (string.IsNullOrWhiteSpace(imageName))
|
|
{
|
|
throw new UserFriendlyException("图片名不能为空");
|
|
}
|
|
|
|
if (string.IsNullOrWhiteSpace(ImageSuffix))
|
|
{
|
|
throw new UserFriendlyException("图片数据后缀名不能为空");
|
|
}
|
|
|
|
if (string.IsNullOrWhiteSpace(PatientRegisterId))
|
|
{
|
|
throw new UserFriendlyException("PatientRegisterId不能为空");
|
|
}
|
|
|
|
if (string.IsNullOrWhiteSpace(RegisterCheckId))
|
|
{
|
|
throw new UserFriendlyException("RegisterCheckId不能为空");
|
|
}
|
|
string fileFilt = ".gif|.jpg|.jpeg|.png";
|
|
|
|
if (fileFilt.IndexOf(ImageSuffix.ToLower(), StringComparison.Ordinal) <= -1)
|
|
{
|
|
throw new UserFriendlyException("请上传jpg、png、gif格式的图片");
|
|
}
|
|
|
|
savePath = absolutePath + "\\" + PatientRegisterId + "\\" + RegisterCheckId + "\\" + imageName + ImageSuffix;
|
|
hostPath = "/CheckPictureImg/" + PatientRegisterId + "/" + RegisterCheckId + "/" + imageName + ImageSuffix;
|
|
|
|
|
|
if (!Directory.Exists(absolutePath + "\\" + PatientRegisterId))
|
|
{
|
|
Directory.CreateDirectory(absolutePath + "\\" + PatientRegisterId);
|
|
}
|
|
|
|
if (!Directory.Exists(absolutePath + "\\" + PatientRegisterId + "\\" + RegisterCheckId))
|
|
{
|
|
Directory.CreateDirectory(absolutePath + "\\" + PatientRegisterId + "\\" + RegisterCheckId);
|
|
}
|
|
|
|
File.Copy(sourceFileFullName, savePath, true);//true允许覆盖
|
|
|
|
|
|
ret = hostPath;
|
|
return ret;
|
|
}
|
|
|
|
|
|
|
|
}
|
|
}
|
|
|