zoukankan      html  css  js  c++  java
  • 【转】图片上传

    代码
    /// <summary>
    /// 上传照片,调用MakeThumbnail方法对照片的大小进行修改
    /// </summary>
    public void uploadPicture()
    {

    if (FileUpload1.HasFile)
    {
    string fileContentType = FileUpload1.PostedFile.ContentType;
    if (fileContentType == "image/bmp" || fileContentType == "image/gif" || fileContentType == "image/pjpeg")
    {
    string name = FileUpload1.PostedFile.FileName; // 客户端文件路径
    FileInfo file = new FileInfo(name);
    string fileName = file.Name; // 文件名称
    //System.DateTime sd = new System.DateTime();


    //中间加一个GUID防止重复
    string fileName_s = "TW_" + System.Guid.NewGuid().ToString() + file.Name; // 缩略图文件名称

    string webFilePath = Server.MapPath("../TPicture/" + fileName); // 服务器端文件路径
    string webFilePath_s = Server.MapPath("../TPicture/" + fileName_s);  // 服务器端缩略图路径
    string houzhui = System.IO.Path.GetExtension(name);
    //测试用
    tm.Tl_Name = Session["Tl_Name"].ToString();
    string picture = fileName_s;
    tm.Tl_Picture
    = picture;
    tm.up_Picture();
    //tm.webpath = webFilePath_s;
    if (!File.Exists(webFilePath))
    {
    try
    {
    FileUpload1.SaveAs(webFilePath);
    // 使用 SaveAs 方法保存文件
    MakeThumbnail(webFilePath, webFilePath_s, 140, 123, "HW"); // 生成缩略图方法
    //Response .Write ("<script>alert('文件上传成功!')</script>");

    //将图片显示出来
    this.img_Picture.ImageUrl = "~/TPicture/" + fileName_s;
    //删除原文件,这里的原文件不是本地硬盘上的文件,而是服务器上的原文件
    FileInfo fi = new FileInfo(webFilePath);
    fi.Delete();
    //string a = "dsfs";
    }
    catch (Exception ex)
    {
    //Tools.AddLog("1", "上传照片成功信息失败!");
    throw new Exception("提示:文件上传失败,失败原因" + ex.Message);
    }
    }
    else
    {
    Response.Write(
    "<script>alert('图片已经存在,请重命名后上传!')</script>");
    }
    }
    else
    {
    Response.Write(
    "<script>alert('文件类型不符!')</script>");
    }
    }
    else
    {
    Response.Write(
    "<script>alert('请选择照片!')</script>");
    }

    }

    /// <summary>
    /// 生成缩略图
    /// </summary>
    /// <param name="originalImagePath">源图路径(物理路径)</param>
    /// <param name="thumbnailPath">缩略图路径(物理路径)</param>
    /// <param name="width">缩略图宽度</param>
    /// <param name="height">缩略图高度</param>
    /// <param name="mode">生成缩略图的方式</param>
    public static void MakeThumbnail(string originalImagePath, string thumbnailPath, int width, int height, string mode)
    {

    System.Drawing.Image originalImage
    = System.Drawing.Image.FromFile(originalImagePath);

    int towidth = width;
    int toheight = height;

    int x = 0;
    int y = 0;
    int ow = originalImage.Width;
    int oh = originalImage.Height;

    switch (mode)
    {
    case "HW"://指定高宽缩放(可能变形)
    break;
    case "W"://指定宽,高按比例
    toheight = originalImage.Height * width / originalImage.Width;
    break;
    case "H"://指定高,宽按比例
    towidth = originalImage.Width * height / originalImage.Height;
    break;
    case "Cut"://指定高宽裁减(不变形)
    if ((double)originalImage.Width / (double)originalImage.Height > (double)towidth / (double)toheight)
    {
    oh
    = originalImage.Height;
    ow
    = originalImage.Height * towidth / toheight;
    y
    = 0;
    x
    = (originalImage.Width - ow) / 2;
    }
    else
    {
    ow
    = originalImage.Width;
    oh
    = originalImage.Width * height / towidth;
    x
    = 0;
    y
    = (originalImage.Height - oh) / 2;
    }
    break;
    default:
    break;
    }

    //新建一个bmp图片
    System.Drawing.Image bitmap = new System.Drawing.Bitmap(towidth, toheight);

    //新建一个画板
    System.Drawing.Graphics g = System.Drawing.Graphics.FromImage(bitmap);

    //设置高质量插值法
    g.InterpolationMode = System.Drawing.Drawing2D.InterpolationMode.High;

    //设置高质量,低速度呈现平滑程度
    g.SmoothingMode = System.Drawing.Drawing2D.SmoothingMode.HighQuality;

    //清空画布并以透明背景色填充
    g.Clear(System.Drawing.Color.Transparent);

    //在指定位置并且按指定大小绘制原图片的指定部分
    g.DrawImage(originalImage, new System.Drawing.Rectangle(0, 0, towidth, toheight),
    new System.Drawing.Rectangle(x, y, ow, oh),
    System.Drawing.GraphicsUnit.Pixel);

    try
    {
    //以jpg格式保存缩略图
    bitmap.Save(thumbnailPath, System.Drawing.Imaging.ImageFormat.Jpeg);

    }
    catch (System.Exception e)
    {
    // throw e;
    }
    finally
    {
    originalImage.Dispose();
    bitmap.Dispose();
    g.Dispose();
    }


    }
  • 相关阅读:
    斐波那契数列
    用两个栈实现队列
    从尾到头打印链表
    HDOJ5877(dfs序+离散化+树状数组)
    HDOJ5876(补图的最短路)
    POJ3090(欧拉函数)
    POJ2478(欧拉函数)
    POJ2407(欧拉函数)
    POJ2142(扩展欧几里得)
    POJ3020(最小边覆盖)
  • 原文地址:https://www.cnblogs.com/gebenhagen/p/1653068.html
Copyright © 2011-2022 走看看