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 ...
随机推荐
- vue中的小踩坑(01)
前言: 昨天算是使用vue2.0+element-ui做了一点小小的页面,可是源于其中遇到的问题,特地整理一下,以防自己还有其他的小伙伴们继续踩坑. 过程: 1.不知道大家有没有注意到 ...
- 佛祖保佑永无bug
世界最难懂C语言代码竞赛: // _ooOoo_ // o8888888o // 88" . "88 // (| -_- |) // O\ = /O // ____/`---'\_ ...
- Java环境变量中classpath是必须配置吗
设置环境变量在java 中需要设置三个环境变量(1.5之后不用再设置classpath了,但个人强烈建议继续设置以保证向下兼用问题)JDK安装完成之后我们来设置环境变量:右击“我的电脑”,选择“属性” ...
- iGson
头文件 #import <Foundation/Foundation.h> #import <objc/runtime.h> #import "NSString+Ut ...
- css3 - 字体图标库使用方法
一些字体图标库的网站 https://icomoon.io/app/#/selecthttp://www.iconfont.cn/http://www.bootcss.com/ http://www. ...
- LeetCode - Customers Who Never Order
Description: Suppose that a website contains two tables, the Customers table and the Orders table. W ...
- SPF难以解决邮件伪造的现状以及方案
邮件伪造的现状 仿冒域名 私搭邮服仿冒域名: 例如某公司企业的域名是example.com,那么攻击者可以搭建一个邮服,也把自己的域名配置为example.com,然后发邮件给真实的企业员工xxx@e ...
- navigater导航
1.css的hover事件2.url事件(或者click事件),激活当前项3.第一导航与第二导航的移入移出事件(可以通过left,top值来显示,也可以变化宽度,高宽来显示)4.有二级导航的另外给cl ...
- MySQL 5.6 my.cnf 参数说明(转)
# 以下选项会被MySQL客户端应用读取. # 注意只有MySQL附带的客户端应用程序保证可以读取这段内容. # 如果你想你自己的MySQL应用程序获取这些值. # 需要在MySQL客户端库初始化的时 ...
- 170808、生成为CVS文件
/** * Desc : 生成为CVS文件 * User : RICK * @param data 源数据List * @param map csv文件的列表头map * @param outPutP ...