C# 二进制图片串互转

C# byte数组与Image的相互转换

功能需求:

1、把一张图片(png bmp jpeg bmp gif)转换为byte数组存放到数据库。

2、把从数据库读取的byte数组转换为Image对象,赋值给相应的控件显示。

3、从图片byte数组得到对应图片的格式,生成一张图片保存到磁盘上。

这里的Image是System.Drawing.Image。

1    //Get an image from file
2     Image image = Image.FromFile("D:\\test.jpg");
3     Bitmap bitmap = new Bitmap("D:\\test.jpg");

以下三个函数分别实现了上述三个需求:

  1 using System;
  2 using System.Collections.Generic;
  3 using System.Drawing;
  4 using System.Drawing.Imaging;
  5 using System.IO;
  6 using System.Linq;
  7 using System.Text;
  8
  9 namespace NetUtilityLib
 10 {
 11     public static class ImageHelper
 12     {
 13         /// <summary>
 14         /// Convert Image to Byte[]
 15         /// </summary>
 16         /// <param name="image"></param>
 17         /// <returns></returns>
 18         public static byte[] ImageToBytes(Image image)
 19         {
 20             ImageFormat format = image.RawFormat;
 21             using (MemoryStream ms = new MemoryStream())
 22             {
 23                 if (format.Equals(ImageFormat.Jpeg))
 24                 {
 25                     image.Save(ms, ImageFormat.Jpeg);
 26                 }
 27                 else if (format.Equals(ImageFormat.Png))
 28                 {
 29                     image.Save(ms, ImageFormat.Png);
 30                 }
 31                 else if (format.Equals(ImageFormat.Bmp))
 32                 {
 33                     image.Save(ms, ImageFormat.Bmp);
 34                 }
 35                 else if (format.Equals(ImageFormat.Gif))
 36                 {
 37                     image.Save(ms, ImageFormat.Gif);
 38                 }
 39                 else if (format.Equals(ImageFormat.Icon))
 40                 {
 41                     image.Save(ms, ImageFormat.Icon);
 42                 }
 43                 byte[] buffer = new byte[ms.Length];
 44                 //Image.Save()会改变MemoryStream的Position,需要重新Seek到Begin
 45                 ms.Seek(0, SeekOrigin.Begin);
 46                 ms.Read(buffer, 0, buffer.Length);
 47                 return buffer;
 48             }
 49         }
 50
 51         /// <summary>
 52         /// Convert Byte[] to Image
 53         /// </summary>
 54         /// <param name="buffer"></param>
 55         /// <returns></returns>
 56         public static Image BytesToImage(byte[] buffer)
 57         {
 58             MemoryStream ms = new MemoryStream(buffer);
 59             Image image = System.Drawing.Image.FromStream(ms);
 60             return image;
 61         }
 62
 63         /// <summary>
 64         /// Convert Byte[] to a picture and Store it in file
 65         /// </summary>
 66         /// <param name="fileName"></param>
 67         /// <param name="buffer"></param>
 68         /// <returns></returns>
 69         public static string CreateImageFromBytes(string fileName, byte[] buffer)
 70         {
 71             string file = fileName;
 72             Image image = BytesToImage(buffer);
 73             ImageFormat format = image.RawFormat;
 74             if (format.Equals(ImageFormat.Jpeg))
 75             {
 76                 file += ".jpeg";
 77             }
 78             else if (format.Equals(ImageFormat.Png))
 79             {
 80                 file += ".png";
 81             }
 82             else if (format.Equals(ImageFormat.Bmp))
 83             {
 84                 file += ".bmp";
 85             }
 86             else if (format.Equals(ImageFormat.Gif))
 87             {
 88                 file += ".gif";
 89             }
 90             else if (format.Equals(ImageFormat.Icon))
 91             {
 92                 file += ".icon";
 93             }
 94             System.IO.FileInfo info = new System.IO.FileInfo(file);
 95             System.IO.Directory.CreateDirectory(info.Directory.FullName);
 96             File.WriteAllBytes(file, buffer);
 97             return file;
 98         }
 99     }
100 }
时间: 2024-08-04 05:17:44

C# 二进制图片串互转的相关文章

使用HTML5的File实现base64和图片的互转

<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"> <html xmlns="http://www.w3.org/1999/xhtml"> <head> <meta http-equiv="Content-

关于数据库保存的二进制图片无法在colorbox插件中显示的解决办法

colorbox是非常优秀的图片显示插件,但最近想用它来显示保存在数据库中的二进制图片却发现问题,就是无法正确显示,显示出来的都是一些乱码字符,究竟问题出在那呢? 于是循例百度了一下,是有人也碰到这个问题,但没有提出解决方案呀!看来只能自己分析原因了... 首先说下我的开发环境:ASP.NET MVC+COLORBOX,那问题不是出在MVC就是COLORBOX上了. 1.MVC分析: 无论图片保存数据库还是保存在目录文件,都是无非转换为二进制流返回比浏览器,于是我试下用COLORBOX显示保存在

[.ashx檔?泛型处理程序?]基础入门#5....ADO.NET 与 将DB里面的二进制图片还原 (范例下载 &amp; 大型控件的ImageField)

[.ashx檔?泛型处理程序?]基础入门#5....ADO.NET 与 将DB里面的二进制图片还原 (范例下载 & 大型控件的ImageField) http://www.dotblogs.com.tw/mis2000lab/archive/2014/05/19/ashx_beginner_05_db_picture_show_download.aspx 根据前面三篇文章的教学 完成后可以做出来  (请您务必依照顺序学习,不要只是找范例来Copy) [.ashx檔?泛型处理程序?]基础入门#1.

数据库读取二进制图片显示到PictureBox中

1.已知路径,加载本地图片到Image中 Image img = Image.FromFile("路径"); 2.数据库中读取二进制图片 string strSql = "Select Top 1 ImageContent From TT_ImageFileSave)"; Byte[] byteImage = new Byte[0]; byteImage = (Byte[])(DbHelperSQL.GetSingle(strSql)); MemoryStream

使用FastJSON,将对象或数组和JSON串互转

Fastjson,是阿里巴巴提供的一个Java语言编写的高性能功能完善的JSON库.其开源的下载网址为:https://github.com/AlibabaTech/fastjson. 示例代码如下: [java] view plaincopy package test; import java.util.ArrayList; import java.util.List; import com.alibaba.fastjson.JSON; class User { private String 

php二进制图片转换

先介绍: $_POST:通过 HTTP POST 方法传递的变量组成的数组.是自动全局变量. $GLOBALS['HTTP_RAW_POST_DATA'] :总是产生 $HTTP_RAW_POST_DATA 变量包含有原始的 POST 数据.此变量仅在碰到未识别 MIME 类型的数据时产生.$HTTP_RAW_POST_DATA 对于 enctype="multipart/form-data" 表单数据不可用. 也就是说基本上$GLOBALS['HTTP_RAW_POST_DATA']

如何读取二进制图片-.ashx一般处理程序 --1---(转载)

我看过了很多关于如何在页面中显示二进制图片的方式.都很好,可觉得其实用性不是很强.我介绍一种方式希望实用性能强一点.    利用“一般处理程序”.如果你实用的是vs2005你在添加新项中可以见到“一般处理程序”,它的后缀名为.ashx.它是什么?其实它和.aspx很类似.先问问.aspx是如何工作的?也许你知道,.aspx能处理来自外部传入的请求,然后它还能处理这个请求并生成一个html作为结果返回.这是典型的处理外部请求的方式..aspx就是专门为处理“典型”的请求而出现的.那么如果我们现在需

WPF如何将数据库中的二进制图片数据显示在Image控件上

首先在xaml文件里定义一个Image控件,取名为img MemoryStream stream = new MemoryStream(获得的数据库对象): BitMapImage bmp = new BitMapImage(); bmp.BeginInit();//初始化 bmp.StreamSource = stream;//设置源 bmp.EndInit();//初始化结束 img.Source = bmp;//设置图像Source 很多人用这个方法都没有初始化BitMapImage ,这

从数据库读取二进制图片,img标签显示图片

引自 http://www.w3dev.cn/article/20110214/asp-net-csharp-image-base64-change.aspx      <img src="@myPicc.ImageInfo" type="image/jpeg" /> 直接给src图片的二进制是不允许的,但是支持base64字符串形式,在后台转化二进制为base64string格式传给前台. data:images/gif;base64,"转化