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

C#——图片操作类简单封装的更多相关文章

  1. C#——JSON操作类简单封装(DataContractJsonSerializer)

    Framework版本:.Net Framework 4 使用DataContractJsonSerializer时,实体请使用注解,格式如下 1.实体使用注解,并且提供get和set的public访 ...

  2. C#——文件操作类简单封装

    using System; using System.Collections.Generic; using System.Linq; using System.Web; using System.IO ...

  3. bootstrap-wysiwyg 结合 base64 解码 .net bbs 图片操作类

    using System; using System.Collections.Generic; using System.Linq; using System.Web; using System.Dr ...

  4. MySQL操作类的封装(PHP)

    <?php class mysql{ /** * 报错函数 * * @param string $error */ function err($error){ die("对不起,您的操 ...

  5. bootstrap-wysiwyg 结合 base64 解码 .net bbs 图片操作类 (二) 图片裁剪

    图片裁剪参见: http://deepliquid.com/projects/Jcrop/demos.php?demo=thumbnail        一个js插件 http://www.mikes ...

  6. php 图片操作类,支持生成缩略图,添加水印,上传缩略图

    <?php class Image {     //类开始     public $originimage = ""; //源图片文件地址     public $image ...

  7. bootstrap-wysiwyg 结合 base64 解码 .net bbs 图片操作类 (三) 图片裁剪

    官方的例子 是 长方形的. 我这里 用于 正方形的头像 所以  做如下  修改 #preview-pane .preview-container { width: 73px; height: 73px ...

  8. ADO.NET操作PostgreSQL:数据库操作类(已封装)

    1.增.删.改通用方法 /// <summary> /// 增.删.改通用方法 /// </summary> /// <param name="commandT ...

  9. ADO.NET操作SQL Server:数据库操作类(已封装)

    1.增.删.改通用方法 /// <summary> /// 增.删.改通用方法 /// </summary> /// <param name="commandT ...

随机推荐

  1. 安全日志:/var/log/secure

    /var/log/secure 一般用来记录安全相关的信息,记录最多的是哪些用户登录服务器的相关日志,如果该文件很大,说明有人在破解你的 root 密码 [root@localhost ~]$ tai ...

  2. Python 扩展知识:编程习惯

    1. 使用四个空格作为缩进而不是Tab键2. 函数名定义时第二个单词首字母大写,如 getNum,类名定义时所有单词首字母大写,如 GetNum

  3. javascript中五种基本数据类型

    前言: JavaScript中有五种基本数据类型(也叫做简单数据类型)分别为:undefined.null.bolean.number.string:另外还含有一种复杂的数据类型:object. 深入 ...

  4. thinkjs——两表联查

    问题来源: 现有一张texture以及一张tradename表,两者的联系是texture表中有一字段名为tid对应tradename表中的id,而tradename表中却有一字段type,要求根据t ...

  5. Core Location和MapKit的一些简单使用

      Core Location 1. 基本对象是CLLocation,有属性coordinate, altitude, horizontal/vertical Accuracy, timestamp, ...

  6. mysql的介绍和安装

    本节内容 1.数据库介绍 2.mysql管理 3.mysql数据类型 4.常用mysql命令 创建数据库 外键 增删改查表 5.事务 6.索引 1.数据库介绍 什么是数据库? 数据库(Database ...

  7. 【MySQL】查询时强制区分大小写的方法

    MySQL默认的查询也不区分大小写.但作为用户信息,一旦用户名重复,又会浪费很多资源.再者,李逵.李鬼的多起来,侦辨起来很困难.要做到这一点,要么在建表时,明确大小写敏感(字段明确大小写敏感) sql ...

  8. 在linux下安装Avria(小红伞)

    1.下载AntiVir PersonalEdition Classic for linux http://www.free-av.com/ 2.解压: tar zxvf antivir.tar.gz ...

  9. Android Studio 解决Fetching android sdk component information加载过久问题

    extends:http://www.cnblogs.com/sonyi/p/4154797.html 安装完成后,如果直接启动,Android Studio会去获取 android sdk 组件信息 ...

  10. Android自定义控件实战——仿淘宝商品浏览界面

    转载请声明出处http://blog.csdn.net/zhongkejingwang/article/details/38656929 用手机淘宝浏览商品详情时,商品图片是放在后面的,在第一个Scr ...