using System;
using System.Collections.Generic;
using System.Linq;
using System.Web;
using System.Drawing;
using System.IO;
using ReligionServer.constant; namespace ReligionServer.util { /// <summary>
/// 图片操作的工具类
/// </summary>
public class ImageUtil { /// <summary>
/// Base64字符转图片单个存储: 将传入的Base64字符串image解析并转存到指定的target目录下, 返回FileInfo
/// </summary>
/// <param name="context"></param>
/// <param name="image"></param>
/// <returns></returns>
public static Model.FileInfo Base64ImageInsert(HttpContext context, String image) {
return ConvertBase64StringToImageAndInsert(context, image);
} /// <summary>
/// Base64字符转图片批量存储: 将传入的Base64字符串集合imageList解析并转存到指定的target目录下, 返回成功的FileInfo的List集合
/// </summary>
/// <param name="imageList"></param>
/// <param name="targetPath"></param>
/// <returns></returns>
public static List<Model.FileInfo> Base64ImageInsertBatch(HttpContext context, List<String> imageList) {
List<Model.FileInfo> fileInfoList = new List<Model.FileInfo>();
foreach (String item in imageList) {
Model.FileInfo temp = Base64ImageInsert(context, item);
if (temp != null) {
fileInfoList.Add(temp);
}
}
return fileInfoList;
} /// <summary>
/// 将传入Base64字符串转换为BitMap并进行转存
/// </summary>
/// <param name="value"></param>
/// <returns></returns>
private static Model.FileInfo ConvertBase64StringToImageAndInsert(HttpContext context, String value) {
Model.FileInfo fileInfo = ParametersUtil.GetInstanceFormRequest<Model.FileInfo>(context, new Model.FileInfo());//使用ForeignKey初始化FileInfo
if (!CommonUtil.IsEmpty(fileInfo.ForeignKey)) {
MemoryStream memoryStream = null;
Bitmap bitmap = null;
try {
byte[] bytes = Convert.FromBase64String(parseBase64String(value));
String value_tmep = parseBase64String(value);
memoryStream = new MemoryStream(bytes);
bitmap = new Bitmap(memoryStream);
if (bitmap != null) {
String directory = DateUtil.CurrentDateTimeValue();//转存图片的文件夹
String targetPhysicalFilePath = context.Request.PhysicalApplicationPath + UploadConstant.UPLOAD_FILE_PATH + directory;//转存图片文件夹的物理路径
if (!Directory.Exists(targetPhysicalFilePath)) {
Directory.CreateDirectory(targetPhysicalFilePath);
}
String targetPath = targetPhysicalFilePath + "/" + CommonUtil.CreateFileName() + SuffixConstant.JPEG;//转存图片的全路径
//填充FileInfo
fileInfo.FileCode = CommonUtil.CreateId();
fileInfo.Name = CommonUtil.CreateFileName() + SuffixConstant.JPEG;
fileInfo.setType(SuffixConstant.JPEG.Substring());
fileInfo.Desc = parseBase64String(value);
fileInfo.Access = ;//0表示关联, 1表示独立
fileInfo.Path = UploadConstant.UPLOAD_FILE_PATH + directory + "/" + CommonUtil.CreateFileName() + SuffixConstant.JPEG;
fileInfo.setCreateTime();
bitmap.Save(targetPath, System.Drawing.Imaging.ImageFormat.Png);
return fileInfo;
}
} catch (Exception e) {
//暂时不做处理
System.Diagnostics.Debug.WriteLine(e.Message);
} finally {
if (null != memoryStream) {
//GDI+ 中发生一般性错误, 这个问题一般为输出路径不存在, 或者是对当前输出路径没有权限, 再者就是文件的生命周期问题 这个问题如下所示
//在Image的整个操作过程中, memoryStream是不能关闭的, 只有等待Image的操作完毕后才可以关闭, 否则会出现 GDI+ 中发生一般性错误
//BitMap继承Image
//百度解释:Bitmap 对象或一个 Image 对象从一个文件, 构造时该文件仍保留锁定对于对象的生存期。 因此, 无法更改图像并将其保存回它产生相同的文件
memoryStream.Close();
}
if (null != bitmap) {
//在Image操作完毕后, 回收Image所持有的资源
bitmap.Dispose();
}
}
}
return null;
} /// <summary>
/// 批量将传入的Base64字符串集合转为BitMap的List集合(暂时没有使用到)
/// </summary>
/// <param name="values"></param>
/// <returns></returns>
private static List<Model.FileInfo> ConvertBase64StringToImageBatch(HttpContext context, List<String> values) { List<Model.FileInfo> fileInfoList = new List<Model.FileInfo>();
if (values != null) {
foreach (String item in values) {
fileInfoList.Add(ConvertBase64StringToImageAndInsert(context, item));
}
}
return fileInfoList;
} /// <summary>
/// 对传入的Base64字符串进行一定的处理, 不然在做图片转换的时候会有影响
/// </summary>
/// <param name="value"></param>
/// <returns></returns>
private static String parseBase64String(String value) {
String result = String.Empty;//表示空字符串, 次字符串只读 int index = value.IndexOf(","); result = value.Substring(index + , value.Length - index - ); return result;
}
}
}

最新文章

  1. Python 调试 PDB
  2. Open source packages on Deep Reinforcement Learning
  3. Zero Requiem
  4. Retention、Documented、Inherited三种注解
  5. ArrayList、LinkedList、Vector的区别
  6. [CentOS]CentOS/RedHat/Fedora的Proxy设定(yum,wget,,rpm)
  7. jquery插件开发规范
  8. 简单计算器 (c语言课程设计)
  9. hrbust 1328 相等的最小公倍数(数论)
  10. Mysql导出导入乱码问题解决
  11. codeforces C. Little Pony and Expected Maximum
  12. CF 295E Yaroslav and Points(Splay)
  13. openMP的一点使用经验
  14. Android 自动编译、打包生成apk文件 3 - 使用SDK Ant方式
  15. Access Treeview树节点代码二
  16. gym 102059A 树链剖分后odt维护区间
  17. 解决MongoDB登录的WARNING
  18. 列表 &amp; 元组&amp; join &amp; range
  19. 李清华201772020113《面向对象程序设计(Java)》第六周学习总结
  20. linux 的常用命令---------第八阶段

热门文章

  1. remove()
  2. complex()
  3. 安卓教程:提取APK程序里图片资源的方法
  4. c++11 数值类型和字符串的相互转换
  5. CentOS配置bond
  6. puremvc TS源码 (未测试...)
  7. netty的解码器与粘包和拆包
  8. OC开发_Storyboard——block和动画
  9. 关于Properties的用法的详细解释
  10. python 对文件的操作