C#基础(三十六)图片.png .jpg .bmp等与字节byte[]的互转。.png .jpg .bmp图片文件的头部格式。

https://www.cnblogs.com/luxiaoxun/p/3378416.html

http://www.cnblogs.com/wifi/articles/3522773.html

https://blog.****.net/uiwgi/article/details/53201551

一、图片.png .jpg .bmp等与字节byte[]的互转

#region 字节与图片的互转
using System;
using System.Collections;
using System.Collections.Generic;
using System.Drawing;
using System.IO;
using System.Linq;
using System.Text;
using System.Threading.Tasks;

namespace QueueSample
{
    class Program
    {
        static void Main(string[] args)
        {

            string path = @"C:\Users\lanmage2\Desktop\aaa.jpg";
            ImageConvertToByte(path);
            ImageConvertToByte(ImageConvertToByte(path));
            Console.ReadLine();
        }
        /// <summary>
        /// 图片转字节
        /// </summary>
        /// <param name="Path"></param>
        /// <returns></returns>
        static byte[] ImageConvertToByte(string Path)
        {
            FileStream fs = new FileStream(Path, FileMode.Open, FileAccess.Read);
            Byte[] btye2 = new byte[fs.Length];
            fs.Read(btye2, 0, Convert.ToInt32(fs.Length));
            fs.Close();
            return btye2;
        }

        /// <summary>
        /// 字节转图片
        /// </summary>
        /// <param name="ImageByte"></param>
        /// <returns></returns>
        static Image ImageConvertToByte(byte[] ImageByte)
        {
            System.IO.MemoryStream ms = new System.IO.MemoryStream(ImageByte);
            Image img = Image.FromStream(ms);
            img.Save(@"C:\Users\lanmage2\Desktop\aaa22", System.Drawing.Imaging.ImageFormat.Bmp);
            return img;
        }
    }
}

二、可是我还想知道,不同格式图片转成字节后的数据结构是不是一样

     图片,都由一定的数据结构组成。于是,我想看看.png .jpg .bmp等转成字节后,数据结构是不是一样。显然,是不一样的。

参考https://blog.****.net/sj_wll/article/details/81075930

https://blog.****.net/u012611878/article/details/52215985

1、文件头部标识

      图片文件的格式结果中,在头部信息(一般都会在图片文件最开始的几个字节)中都会包含图片的格式信息。下面就列车常用的这几种格式图片的头部信息标识(十六进制)。
Png图片文件包括8字节:89 50 4E 47 0D 0A 1A 0A。即为 .PNG….。 
Jpg图片文件包括2字节:FF D8。
Gif图片文件包括6字节:47 49 46 38 39|37 61 。即为 GIF89(7)a。
Bmp图片文件包括2字节:42 4D。即为 BM。

 

2、改后缀并不能改变头部的格式

      我们不能单纯的用文件后缀名.png、.jpg、.jpeg、.gif、.bmp来区分图片格式,因为实际上我们可以直接修改图片后缀名,修改后缀名并不能修改图片的格式,图片还是保持它原来的格式。

3、我们来上面例子,来验证一下头部结构

3.1、.jpg

C#基础(三十六)图片.png .jpg .bmp等与字节byte[]的互转。.png .jpg .bmp图片文件的头部格式。

255对应了十六进制的FF,216对应了十六进制的D8。所以jpg图片的格式正确。

3.2、.png

C#基础(三十六)图片.png .jpg .bmp等与字节byte[]的互转。.png .jpg .bmp图片文件的头部格式。

137对应了十六进制的89,80对应了十六进制的50。所以png图片的格式正确。

3.3、.bmp

C#基础(三十六)图片.png .jpg .bmp等与字节byte[]的互转。.png .jpg .bmp图片文件的头部格式。

66对应了十六进制的42,77对应了十六进制的4D。所以bmp图片的格式正确。

3.4、.MemoryBmp和png一样

C#基础(三十六)图片.png .jpg .bmp等与字节byte[]的互转。.png .jpg .bmp图片文件的头部格式。

3.5、.GIf 

C#基础(三十六)图片.png .jpg .bmp等与字节byte[]的互转。.png .jpg .bmp图片文件的头部格式。

4、小结

同样的一张图片,经过下面操作后:

1、jpg转成png之后,字节长度由65183变成了115661

2、然后,png转成bmp之后,字节长度由115661变成了10627726。