如何保存与原图片一样大小的文件
有时候我们需要保存一张图片到另一文件夹的情况,如果使用函数不当却得不到你想到了结果下面举例来说明
第一种情况(使用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个字节这正是我们想要的结果