C# 图片处理方法 整理汇总
/// <summary>
/// 图片转为base64编码字符
/// </summary>
/// <param name="path">图片路径</param>
/// <param name="format">图片格式</param>
/// <returns>base64编码字符</returns>
public static string ImgToBase64(string path, ImageFormat format)
{
try
{
var bmp = new Bitmap(path);
var ms = new MemoryStream();
bmp.Save(ms, format);
var arr = new byte[ms.Length];
ms.Position = ;
ms.Read(arr, , (int)ms.Length);
ms.Close();
return Convert.ToBase64String(arr);
}
catch (Exception ex)
{
throw new Exception(ex.Message);
}
} /// <summary>
/// 图片转为base64编码字符
/// </summary>
/// <param name="bytes">图片二进制数据</param>
public static string ImgToBase64(byte[] bytes)
{
if (bytes == null)
{
return "";
} try
{
return Convert.ToBase64String(bytes);
}
catch (Exception ex)
{
throw new Exception(ex.Message);
}
} /// <summary>
/// 图片转为base64编码字符
/// </summary>
/// <param name="img">Image图片</param>
/// <returns>base64字符串</returns>
public static string ImgToBase64(Image img)
{
try
{
var bts = BitmapToBytes(img);
return ImgToBase64(bts);
}
catch (Exception ex)
{
throw new Exception(ex.Message);
}
} /// <summary>
/// image转byte[]
/// </summary>
/// <param name="image">image</param>
/// <returns>byte[]</returns>
public static byte[] ImageToBytes(Image image)
{
var format = image.RawFormat;
using (var ms = new MemoryStream())
{
if (format.Equals(ImageFormat.Jpeg))
{
image.Save(ms, ImageFormat.Jpeg);
}
else if (format.Equals(ImageFormat.Png))
{
image.Save(ms, ImageFormat.Png);
}
else if (format.Equals(ImageFormat.Bmp))
{
image.Save(ms, ImageFormat.Bmp);
}
else if (format.Equals(ImageFormat.Gif))
{
image.Save(ms, ImageFormat.Gif);
}
else if (format.Equals(ImageFormat.Icon))
{
image.Save(ms, ImageFormat.Icon);
}
else
{
image.Save(ms, ImageFormat.Jpeg);
}
var buffer = new byte[ms.Length];
//Image.Save()会改变MemoryStream的Position,需要重新Seek到Begin
ms.Seek(, SeekOrigin.Begin);
ms.Read(buffer, , buffer.Length);
return buffer;
}
} /// <summary>
/// base64编码的文本转为图片
/// </summary>
/// <param name="bstring">base64编码图片</param>
/// <returns>图片</returns>
public static Bitmap Base64ToImage(string bstring)
{
try
{
if (string.IsNullOrEmpty(bstring)) return null;
var arr = Convert.FromBase64String(bstring);
var ms = new MemoryStream(arr);
var bmp = new Bitmap(Image.FromStream(ms));
ms.Close();
return bmp;
}
catch (Exception ex)
{
return null;
}
} /// <summary>
/// 图片转byte[]
/// </summary>
/// <param name="image"></param>
/// <returns></returns>
public static byte[] BitmapToBytes(Image image)
{ MemoryStream ms = new MemoryStream();
image.Save(ms, System.Drawing.Imaging.ImageFormat.Bmp);
byte[] bytes = ms.GetBuffer(); //byte[] bytes= ms.ToArray(); 这两句都可以,至于区别么,下面有解释
ms.Close();
return bytes;
} /// <summary>
///读取byte[]并转化为图片
/// </summary>
/// <param name="bytes">byte[]</param>
/// <returns>Image</returns>
public static Image GetImageByBytes(byte[] bytes)
{
Image photo = null;
using (var ms = new MemoryStream(bytes))
{
ms.Write(bytes, , bytes.Length);
photo = Image.FromStream(ms, true);
}
return photo;
}
/// 图片url链接转化为图片
/// </summary>
/// <param name="url"></param>
/// <returns></returns>
public static Bitmap GetURLImage(string url)
{
if (string.IsNullOrEmpty(url))
{
return null;
} try
{
System.Net.WebRequest webreq = System.Net.WebRequest.Create(url);
System.Net.WebResponse webres = webreq.GetResponse();
using (System.IO.Stream stream = webres.GetResponseStream())
{
Bitmap tmpImg = new Bitmap(stream);
var img = new Bitmap(tmpImg);
stream.Close();
return img;
}
}
catch (Exception ex)
{
//LogHelper.WriteErrorLog(typeof(ImageHelper), ex);
return null;
} }
/// <summary>
/// 图片url链接转化为字节
/// </summary>
/// <param name="url"></param>
/// <returns></returns>
public static byte[] GetURLImageBytes(string url)
{
byte[] img = null;
try
{
System.Net.WebRequest webreq = System.Net.WebRequest.Create(url);
System.Net.WebResponse webres = webreq.GetResponse();
using (System.IO.Stream stream = webres.GetResponseStream())
{
using (System.IO.MemoryStream mStream = new MemoryStream())
{
stream.CopyTo(mStream);
img = mStream.GetBuffer();
stream.Close();
mStream.Close();
}
}
}
catch (Exception ex)
{
//LogHelper.WriteErrorLog(typeof(ImageHelper), ex);
}
return img;
}
C# 图片处理方法 整理汇总的更多相关文章
- CSS图片垂直居中方法整理集合
原帖链接:http://bbs.blueidea.com/thread-2666987-1-1.html 1.因为Opera,FF3,IE8均支持display:talbe;这些特性了,因此改进的办法 ...
- Base64 字符串转图片 问题整理汇总
前言 最近碰到了一些base64字符串转图片的开发任务,开始觉得没啥难度,但随着开发的进展还是发现有些东西需要记录下. Base64 转二进制 这个在net有现有方法调用: Convert.FromB ...
- JavaScript实现判断图片是否加载完成的3种方法整理
JavaScript实现判断图片是否加载完成的3种方法整理 有时候我们在前端开发工作中为了获取图片的信息,需要在图片加载完成后才可以正确的获取到图片的大小尺寸,并且执行相应的回调函数使图片产生某种显示 ...
- MATLAB(4)——图片保存方法汇总及常用指令
作者:桂. 时间:2017-03-03 19:30:03 链接:http://www.cnblogs.com/xingshansi/p/6498318.html 前言 本文为MATLAB系列第四篇. ...
- HTML5 Audio/Video 标签,属性,方法,事件汇总
HTML5 Audio/Video 标签,属性,方法,事件汇总 (转) 2011-06-28 13:16:48 <audio> 标签属性:src:音乐的URLpreload:预加载au ...
- 【AS3】Flash与后台数据交换四种方法整理
随着Flash Player 9的普及,AS3编程也越来越多了,所以这次重新整理AS3下几种与后台数据交换方法.1.URLLoader(URLStream)2.FlashRemoting3.XMLSo ...
- [转帖]HTML5 Audio/Video 标签,属性,方法,事件汇总
HTML5 Audio/Video 标签,属性,方法,事件汇总 <audio>标签属性: src:音乐的URL preload:预加载 autoplay:自动播放 loop:循环播放 co ...
- android图片处理方法
Java代码 //压缩图片大小 public static Bitmap compressImage(Bitmap image) { ByteArrayOutputStream baos = new ...
- 在Altium_Designer_PCB_中插入图片的方法
详细请看PDF: http://files.cnblogs.com/files/BinB-W/在Altium_Designer_PCB_中插入图片的方法.pdf 配套文件: http://files. ...
随机推荐
- latch release ......
MainControl_cfg.c brings error: not defined. /* e_TIMER_MCtrlLatchReleaseTime */ TIMER_ID_MCtr ...
- Quick Union
Quick Union quick union就是快速连接 和quick find相同,也是构建一个数组id[],不过存的值换一种理解: 每个数组内的元素看做一个结点,结点内的值即id[i]看做i的前 ...
- D2欧拉路,拓扑排序,和差分约束
第一题:太鼓达人:BZOJ3033 题意:给出k,求一个最长的M位01串,使其从每一个位置向后走k个得到 的M个k位01串互不相同(最后一个和第一个相邻,即是一个环).输出 字典序最小的答案. 2 ≤ ...
- centos etcd 启动失败
chmod -R 777 /var/lib/etcd systemctl daemon-reload cat /etc/systemd/system/etcd.service " [Unit ...
- flask --- 02. 路由, 初始化配置,蓝图
一.Flask 路由 1.添加路由的方式 ① ② 实例: ① @app.route("/my_de") def detail() ② def detail() app.add_ur ...
- 【Entity Framework】disable automatic migration, 执行update-migration仍然会显示有automatic migration
本文涉及的相关问题,如果你的问题或需求有与下面所述相似之处,请阅读本文 [Entity Framework] disable automatic migration, 执行update-migrati ...
- Learning-MySQL【4】:表的操作管理和 MySQL 的约束控制
一.表的操作 1.表的基本概念 数据库与表之间的关系:数据库是由各种数据表组成的,数据表是数据库中最重要的对象,用来存储和操作数据的逻辑结构. 表由列和行组成,列是表数据的描述,行是表数据的实例. 表 ...
- Lintcode376-Binary Tree Path Sum-Easy
376. Binary Tree Path Sum Given a binary tree, find all paths that sum of the nodes in the path equa ...
- java笔记 -- GregorianCalendar和DateFormateSymbols 类方法
java.util.GregorianCalendar new GregorianCalendar() 构造一个日历对象, 用于表示默认地区,默认时区的当前时间. new GregorianCalen ...
- rocketmq ----> 学习笔记
官网:http://rocketmq.apache.org 1.环境搭建 准备: rocketmq-all-4.3.0-bin-release.zip 必须配置:JAVA_HOME=/home/rui ...