如何保存与原图片一样大小的文件


有时候我们需要保存一张图片到另一文件夹的情况,如果使用函数不当却得不到你想到了结果下面举例来说明

第一种情况(使用Bitmap Graphics函数)

下面展示一些 内联代码片

/// <summary>
        /// 保存到别一文件夹
        /// </summary>
        /// <param name="path">原图文件路径</param>
        /// <param name="newPath">新图文件路径</param>
        public void SaveImage(string path, string newPath)
        {
            Bitmap bitmap_1 = null;
            Bitmap bitmap_2 = null;
            Graphics gs = null;
            {
                try
                {

                    bitmap_1 = new(path);
                    bitmap_2 = new(bitmap_1.Width, bitmap_1.Height);
                    gs = Graphics.FromImage(bitmap_2);
                    gs.DrawImage(bitmap_1, 0, 0);                   
                    // 获取图片扩展名
                    string fileExtension = System.IO.Path.GetExtension(path).ToLower();

                    switch (fileExtension)
                    {

                        case ".gif": bitmap_2.Save(newPath, ImageFormat.Gif); break;
                        case ".jpg": bitmap_2.Save(newPath, ImageFormat.Jpeg); break;
                        case ".bmp": bitmap_2.Save(newPath, ImageFormat.Bmp); break;
                        case ".png": bitmap_2.Save(newPath, ImageFormat.Png); break;
                    }
                   

                }
                finally
                {
                    if (bitmap_1 != null)
                    {
                        bitmap_1.Dispose();
                    }
                    if (gs != null)
                    {
                        gs.Dispose();
                    }
                    if (bitmap_2 != null)
                    {
                        bitmap_2.Dispose();
                    }

                }



            }
            
        }

如图所示(图一)为原图文件大小
在这里插入图片描述
保存后的结果如图二所示:
在这里插入图片描述
原图大小为593个字节,保存后却变成了517个字节这是我们不想要的结果。

第二种情况(使用Image,MemoryStream,FileStream函数)

下面展示一些 内联代码片

 /// <summary>
        /// 保存到别一文件夹
        /// </summary>
        /// <param name="path">原始路径</param>
        /// <param name="newPath">新的保存路径</param>       
        public void SaveImage(string path, string newPath)
        {
            Image img = null;
            MemoryStream ms = null;
            FileStream fs = null;
            try
            {              
                if (path == "" && newPath == "") return;
                img = Image.FromFile(path);
                // 获取图片扩展名
                string fileExtension = System.IO.Path.GetExtension(path).ToLower();
                //获得图片数组
                byte[] b = DataTransmission.ImgToByte(img, fileExtension);                 
                ms = new MemoryStream(b);
                fs = new FileStream(newPath, FileMode.Create);
                ms.WriteTo(fs);              
               
                
            }
            finally 
            {
                if (ms != null)
                {
                    ms.Dispose();
                    ms.Close();
                }
                if (img != null)
                {
                    img.Dispose();
                    
                }
                if (fs != null)
                {
                    fs.Dispose();
                    fs.Close();
                }
               
            }
        }

保存后的图片如下图所示(图三)
在这里插入图片描述
原图大小为593个字节,保存后却变成了517个字节这也不是我们想要的结果。

第三种情况(使用MemoryStream,FileStream函数)

下面展示一些 内联代码片

 /// <summary>
        /// 保存到别一文件夹
        /// </summary>
        /// <param name="path">原始路径</param>
        /// <param name="newPath">新的保存路径</param>       
        public void SaveImage(string path, string newPath)
        {            
            MemoryStream ms = null;
            FileStream fs = null;          
            try
            {               
                if (path == "" && newPath == "") return;
                //
                //读取图片
                //
                fs = new(path, FileMode.Open, FileAccess.Read);
                //
                //定义数组大小
                //
                Byte[] imgByte = new Byte[fs.Length];
                //
                //读取图片信息
                //
                _ = fs.Read(imgByte, 0, imgByte.Length);
                //
                //读取的图片数组存入内存流
                //
                ms = new MemoryStream(imgByte, 0, imgByte.Length);
                //
                //获取新的保存文件夹
                //
                fs = new FileStream(newPath, FileMode.Create);
                //
                //保存到新的文件夹
                //
                ms.WriteTo(fs);              
                
            }
            finally
            {
              
                if (ms != null)
                {
                    ms.Dispose();
                    ms.Close();
                }
                if (fs != null)
                {
                    fs.Dispose();
                    fs.Close();
                }
            }
        }

保存结果如果下图所示(图四)
在这里插入图片描述
原图大小为593个字节,保存后也是593个字节这正是我们想要的结果

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

杏雨1969

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值