C#——图片操作类简单封装
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#——图片操作类简单封装的更多相关文章
- C#——JSON操作类简单封装(DataContractJsonSerializer)
Framework版本:.Net Framework 4 使用DataContractJsonSerializer时,实体请使用注解,格式如下 1.实体使用注解,并且提供get和set的public访 ...
- C#——文件操作类简单封装
using System; using System.Collections.Generic; using System.Linq; using System.Web; using System.IO ...
- bootstrap-wysiwyg 结合 base64 解码 .net bbs 图片操作类
using System; using System.Collections.Generic; using System.Linq; using System.Web; using System.Dr ...
- MySQL操作类的封装(PHP)
<?php class mysql{ /** * 报错函数 * * @param string $error */ function err($error){ die("对不起,您的操 ...
- bootstrap-wysiwyg 结合 base64 解码 .net bbs 图片操作类 (二) 图片裁剪
图片裁剪参见: http://deepliquid.com/projects/Jcrop/demos.php?demo=thumbnail 一个js插件 http://www.mikes ...
- php 图片操作类,支持生成缩略图,添加水印,上传缩略图
<?php class Image { //类开始 public $originimage = ""; //源图片文件地址 public $image ...
- bootstrap-wysiwyg 结合 base64 解码 .net bbs 图片操作类 (三) 图片裁剪
官方的例子 是 长方形的. 我这里 用于 正方形的头像 所以 做如下 修改 #preview-pane .preview-container { width: 73px; height: 73px ...
- ADO.NET操作PostgreSQL:数据库操作类(已封装)
1.增.删.改通用方法 /// <summary> /// 增.删.改通用方法 /// </summary> /// <param name="commandT ...
- ADO.NET操作SQL Server:数据库操作类(已封装)
1.增.删.改通用方法 /// <summary> /// 增.删.改通用方法 /// </summary> /// <param name="commandT ...
随机推荐
- React的setState如何实现同步处理数据
React里面的使用setState来进行状态的更新,为了性能的提升,此时的过程是异步操作的,那我们如果在一个进程里面想同步操作改变了状态的值怎么办呢,这里需要使用回调函数了: this.setSta ...
- Django学习笔记 创建应用
django中使用应用来分割功能.比如:做一个游戏网站,包含4块不同的功能:游戏新闻.游戏论坛.Blog系统.在线商城.使得结构清晰了,每一个应用实现不同的功能:便于复用:游戏新闻.游戏论坛.Blog ...
- qq邮箱发送,mail from address must be same as authorization user
由于邮箱发送的邮箱账号更换,所以重新测试.结果一直出错,要不就是请求超时,要不就是未授权. 用smtp 开始的时候,端口使用495,结果是请求超时. 后来改成25,结果是未授权. 再后来听人说,有一个 ...
- poj_1084 剪枝-IDA*
题目大意 给出一个由2*S*(S+1)构成的S*S大小的火柴格.火柴可以构成1x1,2x2...SxS大小的方格.其中已经拿走了几个火柴,问最少再拿走几个火柴可以使得这些火柴无法构成任何一个方格. 题 ...
- 【ecshop】使用sql 清除测试数据
操作方式:后台->数据库->sql查询 输入以下你想进行的操作 -- -- 清空会员有关数据: -- TRUNCATE TABLE `ecs_users` ; TRUNCATE TAB ...
- LNMP ftp 可以登录无权限操作?
服务器环境: LNMP ftp : LNMP ftp一键安装 嘛卖批啊! 解决办法: 登录服务器.执行以下命令 chattr -i /home/wwwroot/default/.user.ini c ...
- 【BZOJ4922】[Lydsy六月月赛]Karp-de-Chant Number 贪心+动态规划
[BZOJ4922][Lydsy六月月赛]Karp-de-Chant Number Description 卡常数被称为计算机算法竞赛之中最神奇的一类数字,主要特点集中于令人捉摸不透,有时候会让水平很 ...
- 日志记录---log4j详解
Apache官方项目地址 通常的日志记录的缺点是会减慢程序的运行速度,如果用普通的System.out的话影响视觉效果,另外解耦度也不好,而log4j的设计则使得日志记录变得可靠快速和可拓展性好. l ...
- EDT改成CST
功能说明:显示文字.语 法:echo [-ne][字符串]或 echo [--help][--version]补充说明:echo会将输入的字符串送往标准输出.输出的字符串间以空白字符隔开, 并在最后加 ...
- 【Object.prototype.toString.call()】---判断某个对象属于哪种内置类型------【巷子】
预热:目前我们知道区分对象类型的方式有三种 :type instanceof Object.prototype.toString.call. 那么这三种的区别是什么呢? type 在 Java ...