/// <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# 图片处理方法 整理汇总的更多相关文章

  1. CSS图片垂直居中方法整理集合

    原帖链接:http://bbs.blueidea.com/thread-2666987-1-1.html 1.因为Opera,FF3,IE8均支持display:talbe;这些特性了,因此改进的办法 ...

  2. Base64 字符串转图片 问题整理汇总

    前言 最近碰到了一些base64字符串转图片的开发任务,开始觉得没啥难度,但随着开发的进展还是发现有些东西需要记录下. Base64 转二进制 这个在net有现有方法调用: Convert.FromB ...

  3. JavaScript实现判断图片是否加载完成的3种方法整理

    JavaScript实现判断图片是否加载完成的3种方法整理 有时候我们在前端开发工作中为了获取图片的信息,需要在图片加载完成后才可以正确的获取到图片的大小尺寸,并且执行相应的回调函数使图片产生某种显示 ...

  4. MATLAB(4)——图片保存方法汇总及常用指令

    作者:桂. 时间:2017-03-03  19:30:03 链接:http://www.cnblogs.com/xingshansi/p/6498318.html 前言 本文为MATLAB系列第四篇. ...

  5. HTML5 Audio/Video 标签,属性,方法,事件汇总

    HTML5 Audio/Video 标签,属性,方法,事件汇总 (转) 2011-06-28 13:16:48   <audio> 标签属性:src:音乐的URLpreload:预加载au ...

  6. 【AS3】Flash与后台数据交换四种方法整理

    随着Flash Player 9的普及,AS3编程也越来越多了,所以这次重新整理AS3下几种与后台数据交换方法.1.URLLoader(URLStream)2.FlashRemoting3.XMLSo ...

  7. [转帖]HTML5 Audio/Video 标签,属性,方法,事件汇总

    HTML5 Audio/Video 标签,属性,方法,事件汇总 <audio>标签属性: src:音乐的URL preload:预加载 autoplay:自动播放 loop:循环播放 co ...

  8. android图片处理方法

    Java代码 //压缩图片大小 public static Bitmap compressImage(Bitmap image) { ByteArrayOutputStream baos = new ...

  9. 在Altium_Designer_PCB_中插入图片的方法

    详细请看PDF: http://files.cnblogs.com/files/BinB-W/在Altium_Designer_PCB_中插入图片的方法.pdf 配套文件: http://files. ...

随机推荐

  1. Eclipse中Tomcat v8.0 Server at localhost右键选择Properties详情页中Server Locations变灰无法编辑

    Eclipse中Tomcat v8.0 Server at localhost右键选择Properties详情页中Server Locations变灰无法编辑解决办法:1.首先将Servers中部署的 ...

  2. nginx 高并发优化参数

    关于内核参数的优化: net.ipv4.tcp_max_tw_buckets = 6000timewait的数量,默认是180000.net.ipv4.ip_local_port_range = 10 ...

  3. 前后端分离不可缺少的神器 NGINX

    样例讲解 1:安装工具包 wget.vim和gcc yum install -y wget yum install -y vim-enhanced yum install -y make cmake ...

  4. QT下的darknet-GPU项目属性

    #------------------------------------------------- # # Project created by QtCreator 2018-08-04T19:39 ...

  5. Java调用第三方接口示范

    在项目开发中经常会遇到调用第三方接口的情况,比如说调用第三方的天气预报接口. 使用流程[1]准备工作:在项目的工具包下导入HttpClientUtil这个工具类,或者也可以使用Spring框架的res ...

  6. EXEC sp_executesql with multiple parameters

    传递多个参数 https://stackoverflow.com/questions/28481189/exec-sp-executesql-with-multiple-parameters http ...

  7. python from entry to abandon3

    第十章的内容是解决问题————编写一个Python脚本.在我的电脑上因为Zip命令不能正常工作所以无法给出演示.该章给出了很有意义的编程思路,对以后学习和工作都有不错的参考意义,这部分有兴趣的同学还是 ...

  8. 使用VS Code调试Node

    1.双击打开vscode 2.找到底层面板 把ctrl改成LF 2. 3.打开文件夹,建立项目test 4.新建hellow.js 输入: var name='world'; var s='hello ...

  9. P1908 逆序对

    传送门 这题似乎不应该出现在这里.. 日常做法(归并): #include<iostream> #include<cstdio> #include<algorithm&g ...

  10. java读取UTF-8的txt文件发现开头的一个字符问题

    今天遇到一个奇葩问题,在读取一个TXT文件时,出现开头多了一个问号(?).如下图: 莫名奇妙的多了一个.最后通过网上资料,知道在Java中,class文件采用utf8的编码方式,JVM运行时采用utf ...