C#对图片的操作

最近Asp.net项目里有图片的上传,图片大小的修改,图片的保存、转移等,索性就整理出一篇博文。

注意:对图片操作前最好先判断文件夹是否存在,图片文件是否存在:

if (!Directory.Exists("文件夹名"))
{
    Directory.CreateDirectory("文件夹名");
}
if (File.Exists(path))
{
    //对文件的操作
}

1.图片的上传:
如果页面中使用<input type="file" />控件,C#中用Request.Files获取上传的内容。
获取客户端上传的文件数量 Request.Files.Count
保存第i个图片 Request.Files[i].SaveAs("上传后保存的路径")
如果需要把文件保存在项目目录中,要注意的是网站发布到服务器后的实际路径是HttpRuntime.AppDomainAppPath(路径末尾有’\’)

如果客户端调用网站接口(如一般处理程序)上传图片到服务器

private string UploadFile(string imgid,string filepath)
{
    //将文件读成文件流形式
    FileStream fs = new FileStream(filepath, FileMode.Open, FileAccess.Read);
    byte[] byteFile = new byte[fs.Length];
    //把文件流放入byte[]
    fs.Read(byteFile, 0, Convert.ToInt32(fs.Length));
    //关闭文件流
    fs.Close();
    fs.Dispose();
    //WebClient Post请求
    var webclient = new WebClient();
    webclient.Headers.Add("Content-Type", "application/x-www-form-urlencoded");
    //待发送的参数
    string postData = "imgid="+ imgid + "&stream=" + HttpUtility.UrlEncode(Convert.ToBase64String(byteFile));
    byte[] byteArray = Encoding.UTF8.GetBytes(postData);
    //上传数据,并获取返回的二进制数据
    byte[] buffer = webclient.UploadData(CConfigHelper.GetConfig("UploadUri"), "POST", byteArray);
    var msg = Encoding.UTF8.GetString(buffer);
    return msg.ToString();
}

2.图片大小的修改:

//首先根据路径读取图片文件得到文件流FileStream
System.IO.FileStream filestream = File.OpenRead("图片路径");
//新建一个Image对象存放文件流,此时这个Image对象就是原来的图片了
System.Drawing.Image initImage = System.Drawing.Image.FromStream(filestream, true);
//如果宽高要等比例就自己算一下
//新建一个Bitmap对象,宽高就是修改后的大小,用来存放修改后的图片
System.Drawing.Image newImage = new System.Drawing.Bitmap((int)width, (int)height);
//新建一个画板
System.Drawing.Graphics g = System.Drawing.Graphics.FromImage(newImage);
//设置画板高质量
g.InterpolationMode = System.Drawing.Drawing2D.InterpolationMode.HighQualityBicubic;
//设置边缘平滑(无锯齿)
g.SmoothingMode = System.Drawing.Drawing2D.SmoothingMode.HighQuality;
//设置画板的背景色
g.Clear(System.Drawing.Color.White);
//画图(参数分别代表:原始图片, 新图片矩形的大小, 原图片矩形的大小, 度量单位为设备像素)
g.DrawImage(initImage, new System.Drawing.Rectangle(0, 0, newImage.Width, newImage.Height), 
    new System.Drawing.Rectangle(0, 0, initImage.Width, initImage.Height), 
    System.Drawing.GraphicsUnit.Pixel);
//通常保存文件需要判断一下文件夹是否存在,如果不存在就新建文件夹
if (!Directory.Exists(saveBag))
{
    Directory.CreateDirectory(saveBag);
}
//以jpg格式保存图片
newImage.Save("图片存放路径", System.Drawing.Imaging.ImageFormat.Jpeg);
//释放资源
initImage.Dispose();
newImage.Dispose();
g.Dispose();

3.图片的转移

//先判断原路径中是否有图片
if (File.Exists(originPath))
{
    //找到原图
    FileInfo originfile = new FileInfo(originPath);
    Image originImg = Image.FromFile(originPath);
    //将原图保存于新的路径下
    originImg.Save(newPath, System.Drawing.Imaging.ImageFormat.Jpeg);
}

4.图片的删除

if (File.Exists(filepath))
{
    File.Delete(filepath);
}

猜你喜欢

转载自blog.csdn.net/qq_26352515/article/details/75174987