bootstrap-wysiwyg 结合 base64 解码 .net bbs 图片操作类
using System;
using System.Collections.Generic;
using System.Linq;
using System.Web;
using System.Drawing;
using System.Drawing.Drawing2D;
using System.Net;
using System.IO;
using KT_Product_Show_V3.Models;
using KT_Product_Show_V3.Controllers;
using System.Text.RegularExpressions;
using System.Drawing.Imaging; namespace KT_Product_Show_V3
{
public partial class ImageTool
{
public static string BuildImg(string webUrl, int Size, string directory)
{
Bitmap bmp;
System.Drawing.Image img;
string filename = "";
if (!Directory.Exists(directory))
{
return "";
}
WebRequest WebReq = WebRequest.Create(webUrl);
WebReq.Method = "GET";
img = System.Drawing.Image.FromStream(WebReq.GetResponse().GetResponseStream());
bmp = new Bitmap(Size, Size);
System.Drawing.Graphics gr = System.Drawing.Graphics.FromImage(bmp);
gr.SmoothingMode = System.Drawing.Drawing2D.SmoothingMode.HighQuality;
gr.CompositingQuality = System.Drawing.Drawing2D.CompositingQuality.HighQuality;
gr.InterpolationMode = System.Drawing.Drawing2D.InterpolationMode.High;
System.Drawing.Rectangle rectDestination = new System.Drawing.Rectangle(, , Size, Size);
gr.DrawImage(img, rectDestination, , , img.Width, img.Height, GraphicsUnit.Pixel);
filename = DateTime.Now.ToFileTime().ToString() + "_" + Size + ".jpeg";
bmp.Save(directory + filename);
Qiniu_API.PutFile(directory + filename, filename);
bmp.Dispose();
img.Dispose();
return filename;
} public static string Base64StringToImage(string strsuffix, string strbase64)
{
string path = "C:\\DescripttionImg\\";
string FileName_withOutstrsuffix = DateTime.Now.ToString("yyMMddhhmmss") + Guid.NewGuid().ToString("N");
string FileName = string.Format(@"{0}.{1}", FileName_withOutstrsuffix, strsuffix);
if (!Directory.Exists(path))
{
Directory.CreateDirectory(path);
}
try
{
byte[] arr = Convert.FromBase64String(strbase64);
MemoryStream ms = new MemoryStream(arr);
Bitmap bmp = new Bitmap(ms);
bmp.Save(path + FileName);
ms.Close(); Qiniu_API.PutFile(path + FileName, FileName); }
catch (Exception ex)
{ }
finally
{ }
return string.Format("http://{0}/{1}", Qiniu_API.Domain, FileName);
} public static string ImgToBase64String(string Imagefilename)
{
try
{
Bitmap bmp = new Bitmap(Imagefilename); MemoryStream ms = new MemoryStream();
bmp.Save(ms, System.Drawing.Imaging.ImageFormat.Png);
byte[] arr = new byte[ms.Length];
ms.Position = ;
ms.Read(arr, , (int)ms.Length);
ms.Close();
return Convert.ToBase64String(arr);
}
catch (Exception ex)
{
return null;
}
} public static string DescripttionDecode(string str)
{
string pattern = @"data:image/[a-z]+;base64,([a-z0-9-A-z]|[\+]|[/\\]|[=])*";
string pattern_suffix = @"data:image/[a-z]+;base64,";
RegexOptions regexOptions = RegexOptions.None;
Regex regex = new Regex(pattern, regexOptions);
Regex regex_suffix = new Regex(pattern_suffix, regexOptions);
foreach (Match match in regex.Matches(str))
{
if (match.Success)
{
string path = "";
string Temp = regex_suffix.Match(match.Value).Value;
string suffix = Temp.Replace("data:image/", "").Replace(";base64,", "");
string base64 = match.Value.Replace(Temp, "");
path = Base64StringToImage(suffix, base64);
str = str.Replace(match.Value, path); }
} return str;
} public static string DescripttionDecodeCutMaxWidth(string str, int MaxWidth)
{
string pattern = @"data:image/[a-z]+;base64,([a-z0-9-A-z]|[\+]|[/\\]|[=])*";
string pattern_suffix = @"data:image/[a-z]+;base64,";
RegexOptions regexOptions = RegexOptions.None;
Regex regex = new Regex(pattern, regexOptions);
Regex regex_suffix = new Regex(pattern_suffix, regexOptions);
foreach (Match match in regex.Matches(str))
{
if (match.Success)
{
string path = "";
string Temp = regex_suffix.Match(match.Value).Value;
string suffix = Temp.Replace("data:image/", "").Replace(";base64,", "");
string base64 = match.Value.Replace(Temp, "");
path = Base64StringToImageCutMaxWidth(suffix, base64,MaxWidth);
str = str.Replace(match.Value, path); }
} return str;
}
public static string Base64StringToImageCutMaxWidth(string strsuffix, string strbase64, int MaxWidth)
{
string path = "C:\\DescripttionImg\\";
string FileName_withOutstrsuffix = DateTime.Now.ToString("yyMMddhhmmss") + Guid.NewGuid().ToString("N");
string FileName = string.Format(@"{0}.{1}", FileName_withOutstrsuffix, strsuffix);
if (!Directory.Exists(path))
{
Directory.CreateDirectory(path);
}
try
{
byte[] arr = Convert.FromBase64String(strbase64);
MemoryStream ms = new MemoryStream(arr);
Bitmap bmp = new Bitmap(ms);
if (bmp.Width > MaxWidth)
{
bmp = KiResizeImage(bmp, MaxWidth, MaxWidth * bmp.Height / bmp.Width);
} // bmp.Width = MaxWidth;
// bmp.Height
bmp.Save(path + FileName);
ms.Close(); Qiniu_API.PutFile(path + FileName, FileName); }
catch (Exception ex)
{ }
finally
{ }
return string.Format("http://{0}/{1}", Qiniu_API.Domain, FileName);
}
public static Bitmap KiResizeImage(Bitmap bmp, int newW, int newH)
{
try
{
Bitmap b = new Bitmap(newW, newH);
Graphics g = Graphics.FromImage(b); // 插值算法的质量
g.InterpolationMode = InterpolationMode.HighQualityBicubic;
g.SmoothingMode = System.Drawing.Drawing2D.SmoothingMode.AntiAlias;
g.CompositingQuality = System.Drawing.Drawing2D.CompositingQuality.HighQuality;
//g.InterpolationMode = System.Drawing.Drawing2D.InterpolationMode.High;
g.DrawImage(bmp, new Rectangle(, , newW, newH), new Rectangle(, , bmp.Width, bmp.Height), GraphicsUnit.Pixel);
g.Dispose(); return b;
}
catch
{
return null;
}
} }
}
先上传到本地 然后到 七牛云 存储,最后 ,在 bbs 上显示 图片 直接 来源于七牛,本地也保存了一份,后续扩展到一键切换到本地读取功能。还可以使用负载均衡。
上面这个 图片操作类 还提供了 头像裁剪 之后 的 上传 大、小 图片 的方法。
[HttpPost]
[ValidateInput(false)]
public void AddDescripttion()
{
if (Request.Form["Descripttion"] == null)
{
Response.Write();
Response.End(); }
string str = Request.Form["Descripttion"].ToString();
Discuz discuz = new Discuz();
discuz.CreateTime = DateTime.Now;
discuz.Descripttion = ImageTool.DescripttionDecode(str);
discuz.Floor = conn.Database.SqlQuery<int>("select isnull( max(Floor),0) from dbo.Discuz").FirstOrDefault() + ;
discuz.ForumId = ;
discuz.IsFather = true;
discuz.Isgood = ;
discuz.IsPass = ;
discuz.UserId = ;
conn.Discuz.Add(discuz);
conn.SaveChanges();
Response.Write();
Response.End();
}
MVC bbs发表帖子 的调用 action , [ValidateInput(false)] 结合 网站 web.config 文件 中的 <system.webServer> 下的<validation validateIntegratedModeConfiguration="false" /> 一起用 ,才能解决
从客户端 中检测到有潜在危险的 Request.Form 值 报错的问题。
还介绍一个好的 Regex 工具
下载之后 我找了 半天 ,原来 在 这里啊!
img 的 src 属性 可以 是 data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAAUA
AAAFCAYAAACNbyblAAAAHElEQVQI12P4//8/w38GIAXDIBKE0DHxgljNBAAO
9TXL0Y4OHwAAAABJRU5ErkJggg==" > 这种不支持图片缓存。
bootstrap-wysiwyg 结合 base64 解码 .net bbs 图片操作类的更多相关文章
- bootstrap-wysiwyg 结合 base64 解码 .net bbs 图片操作类 (二) 图片裁剪
图片裁剪参见: http://deepliquid.com/projects/Jcrop/demos.php?demo=thumbnail 一个js插件 http://www.mikes ...
- bootstrap-wysiwyg 结合 base64 解码 .net bbs 图片操作类 (三) 图片裁剪
官方的例子 是 长方形的. 我这里 用于 正方形的头像 所以 做如下 修改 #preview-pane .preview-container { width: 73px; height: 73px ...
- C#——图片操作类简单封装
using System; using System.Collections.Generic; using System.Linq; using System.Web; using System.Dr ...
- php 图片操作类,支持生成缩略图,添加水印,上传缩略图
<?php class Image { //类开始 public $originimage = ""; //源图片文件地址 public $image ...
- C#获取CPU与网卡硬盘序列号及Base64和DES加密解密操作类
public class RegisterHelp { /// <summary> /// CPU /// </summary> /// <returns>< ...
- 微信小程序之图片base64解码
不知道大家在做微信小程序的时候遇到base64解码的问题,我之前在做微信小程序的时候遇到base64解析图片一直有问题,所以在这里把遇到的问题和解决方案在这里记录一下: 在平时的项目中我们是直接用ba ...
- 将图片文件转化为字节数组字符串,并对其进行Base64编码处理,以及对字节数组字符串进行Base64解码并生成图片
实际开发中涉及图片上传并且量比较大的时候一般处理方式有三种 1.直接保存到项目中 最老土直接方法,也是最不适用的方法,量大对后期部署很不方便 2.直接保存到指定路径的服务器上.需要时候在获取,这种方式 ...
- Base64字符保存图片,图片转换成Base64字符编码
//文件转换成Base64编码 public static String getFileBase64Str(String filePath) throws IOException { String f ...
- file上传图片,base64转换、压缩图片、预览图片、将图片旋转到正确的角度
/** * 将base64转换为文件对象 * (即用文件上传输入框上传文件得到的对象) * @param {String} base64 base64字符串 */ function convertBa ...
随机推荐
- Webuploader 大文件分片上传
百度Webuploader 大文件分片上传(.net接收) 前阵子要做个大文件上传的功能,找来找去发现Webuploader还不错,关于她的介绍我就不再赘述. 动手前,在园子里找到了一篇不错的分片 ...
- ExtJS4 表格的嵌套 rowExpander
今天做一个grid,里面的数据须要带明细,思来想去还是搞个表格嵌套吧!看下图 对于grid中每一条记录点击左边的+号能展开一个明细的子表格 全部数据包含列名均从后台获得,子表格的数据临时在本地以做測试 ...
- 开源 自由 java CMS - FreeCMS2.0 举APP产生信息数据
项目地址:http://www.freeteam.cn/ 生成信息数据 生成当前管理网站下同意移动APP訪问的栏目的信息页面. 从左側管理菜单点击生成信息数据进入. 您能够选择须要生成的栏目,然后点击 ...
- 几点思考-人生哲学,生活方式---ShinePans
美结账时账单住酒店一晚800元.她抱怨太贵.经理说这是标准收费,带泳池的酒店.健身房和wifi. 美女说自己全然没使用,经理说饭店有提供.是她自己不用. 女客人打开皮包掏钱付账.但说要扣除经理和她共度 ...
- MVC简单的认识
学习一个新知识,首先要了解的就是以下几个问题,它是什么?它能干什么?使用它有什么优点?这篇文章就环绕这几个问题来展开讨论. mvc不是一种编程语言,严格来说.它都不算是一门技术.它是开发软件时使用的一 ...
- Android-用你自己的自定义图像资源(2)
Android-自己定义图像资源的使用 2014年4月29日 上一篇博客.介绍前面几种图像资源的使用,本篇博客把剩下的所有介绍完: 普通图像资源 XML图像资源 Nine-patch图像资源 XM ...
- 网络爬虫WebCrawler(1)-Http网页内容抓取
在windows在下面C++由Http协议抓取网页的内容: 首先介绍了两个重要的包(平时linux在开源包,在windows下一个被称为动态链接库dll):curl包和pthreads_dll,其中c ...
- Android和C#实时视频传输Demo
说起去年的Demo.以今天的免费整齐优势. 原理很easy,虽然没有写android申请书.但,好了~ 高级语言是相通的.傲慢约.就这么简单研究了一下api后,找到相机对象有一个预览回调方法. 意识到 ...
- SQL操作语句中的注意点
一 查询语句 1 distinctkeyword消除反复行 当查询的结果数据中出现反复数据时.在查询条件中加上distinctkeyword消除反复行: 如:select distinct Sno f ...
- 无插件,直接加参数,chrome它可以模拟手机浏览器
在目标出现,加上一些参数即可:--user-agent="mozilla/5.0 (linux; u; android 2.3.3; en-us; sdk build/ gri34) app ...