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

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;
}
}
}