zoukankan      html  css  js  c++  java
  • 贴段上传图片代码,截取缩略图

    [PS:原创,如转载,请注明转载出处,谢谢]

    这段代码杂用?有啥用?能干什么?

    最近在做一个图片网,你说能干嘛用呢??呵呵。。。

    一张高清图,最少都是一MB以上的,看了这个之后,你还在用原来的,只保存一张图片???

    那你显示列表页的时候,不卡死了才怪了,一个页面显示60张图片,一张图片来个不多,1MB,整个列表下来是60MB。。。老大,强悍。。。牛B哇。。。嘿嘿

    搞啥?不搞啥,切出来后,在搞,显示缩略图,弄成几十K的大小,显示一张比例为800*600的图,用到详细页面去,在搞个原图,用来点击查看原图用,这样就不用当心了吧?速度自然就上去了

    View Code
    using System.IO;
    using System.Drawing;

    /// <summary>
    /// 图片上传
    /// </summary>
    /// <param name="uname">用户名,用于生成图片名称</param>
    /// <param name="file">HttpPostedFile</param>
    /// <returns>图片路径</returns>
    public string[] ImgUpLoad(string uname, HttpPostedFile file)
    {
    string[] returnImg = new string[3];
    int intThumbWidth = 160;
    int intThumbHeight = 160;

    string sFilename = "";
    HttpPostedFile myFile = file;
    int nFileLen = myFile.ContentLength;
    if (nFileLen == 0)
    return null;
    //获取upImage选择文件的扩展名
    string extendName = System.IO.Path.GetExtension(myFile.FileName).ToLower();
    //判断是否为图片格式
    if (extendName != ".jpg" && extendName != ".jpge" && extendName != ".gif" && extendName != ".bmp" && extendName != ".png")
    return null;

    byte[] myData = new Byte[nFileLen];
    myFile.InputStream.Read(myData, 0, nFileLen);
    sFilename = System.IO.Path.GetFileName(myFile.FileName);

    //生成目录名称
    string dirName = DateTime.Now.Year.ToString() + DateTime.Now.Month.ToString();
    if (!Directory.Exists(System.Web.HttpContext.Current.Server.MapPath("~/PhotoUploadFile/ShowPhoto/" + dirName + "/")))
    {
    Directory.CreateDirectory(System.Web.HttpContext.Current.Server.MapPath("~/PhotoUploadFile/ShowPhoto/" + dirName + "/"));
    }

    //----生成未处理原图存放目录名称
    string dirNameSrc = DateTime.Now.Year.ToString() + DateTime.Now.Month.ToString();
    if (!Directory.Exists(System.Web.HttpContext.Current.Server.MapPath("~/PhotoUploadFile/Photo/" + dirNameSrc + "/")))
    {
    Directory.CreateDirectory(System.Web.HttpContext.Current.Server.MapPath("~/PhotoUploadFile/Photo/" + dirNameSrc + "/"));
    }

    DateTime dtime = DateTime.Now;
    //生成图片文件名称
    string fileName = dtime.Year.ToString()
    + dtime.Month.ToString()
    + dtime.Day.ToString()
    + dtime.Hour.ToString()
    + dtime.Minute.ToString()
    + dtime.Second.ToString()
    + dtime.Millisecond.ToString() + extendName;
    fileName = uname + fileName;

    //处理完显示图片
    string savePath = "~/PhotoUploadFile/ShowPhoto/" + dirName + "/";
    string dirPath = dirName + "/";

    //----未处理原图路径与目录
    string savePathSrc = "~/PhotoUploadFile/Photo/" + dirNameSrc + "/";
    string dirPathSrc = dirNameSrc + "/";

    //----保存未处理原图
    System.IO.FileStream newFileSrc
    = new System.IO.FileStream(System.Web.HttpContext.Current.Server.MapPath(savePathSrc) + fileName,
    System.IO.FileMode.Create, System.IO.FileAccess.Write);
    newFileSrc.Write(myData, 0, myData.Length);
    newFileSrc.Close();
    returnImg[0] = savePathSrc + fileName;
    //以上为上传原图

    try
    {
    //原图加载
    using (System.Drawing.Image sourceImage = System.Drawing.Image.FromFile(System.Web.HttpContext.Current.Server.MapPath(savePathSrc + fileName)))
    {
    //原图宽度和高度
    int width = sourceImage.Width;
    int height = sourceImage.Height;
    int smallWidth;
    int smallHeight;

    //获取第一张绘制图的大小,(比较 原图的宽/缩略图的宽 和 原图的高/缩略图的高)
    if (((decimal)width) / height <= ((decimal)intThumbWidth) / intThumbHeight)
    {
    //smallWidth = width/(height/intThumbHeight);
    smallWidth = width * intThumbHeight / height;
    smallHeight = intThumbHeight;
    }
    else
    {
    smallWidth = intThumbWidth;
    //smallHeight = height/(width/intThumbWidth);
    smallHeight = height * intThumbWidth / width;
    }

    //生成目录名称
    dirName = DateTime.Now.Year.ToString() + DateTime.Now.Month.ToString();
    if (!Directory.Exists(System.Web.HttpContext.Current.Server.MapPath("~/PhotoUploadFile/Thumb/" + dirName + "/")))
    {
    Directory.CreateDirectory(System.Web.HttpContext.Current.Server.MapPath("~/PhotoUploadFile/Thumb/" + dirName + "/"));
    }

    dtime = DateTime.Now;

    savePath = "~/PhotoUploadFile/Thumb/" + dirName + "/";
    string dirPath2 = dirName + "/";


    //缩略图保存的绝对路径
    string smallImagePath = System.Web.HttpContext.Current.Server.MapPath(savePath) + fileName;

    //新建一个图板,以最小等比例压缩大小绘制原图
    using (System.Drawing.Image bitmap3 = new System.Drawing.Bitmap(smallWidth, smallHeight))
    {
    //绘制中间图
    using (System.Drawing.Graphics g = System.Drawing.Graphics.FromImage(bitmap3))
    {

    //高清,平滑
    g.InterpolationMode = System.Drawing.Drawing2D.InterpolationMode.High;
    g.SmoothingMode = System.Drawing.Drawing2D.SmoothingMode.HighQuality;
    g.Clear(Color.Black);
    g.DrawImage(
    sourceImage,
    new System.Drawing.Rectangle(0, 0, smallWidth, smallHeight),
    new System.Drawing.Rectangle(0, 0, width, height),
    System.Drawing.GraphicsUnit.Pixel
    );
    }
    //新建一个图板,以缩略图大小绘制中间图
    using (System.Drawing.Image bitmap1 = new System.Drawing.Bitmap(intThumbWidth, intThumbHeight))
    {
    //绘制缩略图
    using (System.Drawing.Graphics g = System.Drawing.Graphics.FromImage(bitmap1))
    {
    //高清,平滑
    g.InterpolationMode = System.Drawing.Drawing2D.InterpolationMode.High;
    g.SmoothingMode = System.Drawing.Drawing2D.SmoothingMode.HighQuality;
    g.Clear(Color.Black);
    int lwidth = (smallWidth - intThumbWidth) / 2;
    int bheight = (smallHeight - intThumbHeight) / 2;
    g.DrawImage(bitmap3, new Rectangle(0, 0, intThumbWidth, intThumbHeight), lwidth, bheight, intThumbWidth, intThumbHeight, GraphicsUnit.Pixel);

    g.Dispose();
    bitmap1.Save(smallImagePath, System.Drawing.Imaging.ImageFormat.Jpeg);
    returnImg[1] = savePath + fileName;
    }
    }
    }

    //生成显示图片 ShowPhoto
    intThumbWidth = 800;
    intThumbHeight = 600;
    string equalSavePath = "~/PhotoUploadFile/ShowPhoto/" + dirName + "/";
    string showSrcPath = equalSavePath;
    equalSavePath = System.Web.HttpContext.Current.Server.MapPath(equalSavePath) + fileName;
    if (((decimal)width) / height <= ((decimal)intThumbWidth) / intThumbHeight)
    {
    //smallWidth = width/(height/intThumbHeight);
    smallWidth = width * intThumbHeight / height;
    smallHeight = intThumbHeight;
    }
    else
    {
    smallWidth = intThumbWidth;
    //smallHeight = height/(width/intThumbWidth);
    smallHeight = height * intThumbWidth / width;
    }
    if (width <= 800 && height <= 600)
    {
    smallWidth = width;
    smallHeight = height;
    }
    //if (height < 800 && width < 600)
    //{
    // smallWidth = height;
    // smallHeight = width;
    //}
    //if (width <= 800) {
    // smallWidth = width;
    //}
    //if (height <= 600) {
    // smallHeight = height;
    //}

    //新建一个图板,以最小等比例压缩大小绘制原图
    using (System.Drawing.Image bitmap3 = new System.Drawing.Bitmap(smallWidth, smallHeight))
    {
    //绘制中间图
    using (System.Drawing.Graphics g = System.Drawing.Graphics.FromImage(bitmap3))
    {

    //高清,平滑
    g.InterpolationMode = System.Drawing.Drawing2D.InterpolationMode.High;
    g.SmoothingMode = System.Drawing.Drawing2D.SmoothingMode.HighQuality;
    g.Clear(Color.Black);
    g.DrawImage(
    sourceImage,
    new System.Drawing.Rectangle(0, 0, smallWidth, smallHeight),
    new System.Drawing.Rectangle(0, 0, width, height),
    System.Drawing.GraphicsUnit.Pixel
    );
    }
    //新建一个图板,以缩略图大小绘制中间图
    using (System.Drawing.Image bitmap1 = new System.Drawing.Bitmap(intThumbWidth, intThumbHeight))
    {
    //绘制缩略图
    using (System.Drawing.Graphics g = System.Drawing.Graphics.FromImage(bitmap1))
    {
    //高清,平滑
    g.InterpolationMode = System.Drawing.Drawing2D.InterpolationMode.High;
    g.SmoothingMode = System.Drawing.Drawing2D.SmoothingMode.HighQuality;
    g.Clear(Color.Black);
    int lwidth = (smallWidth - intThumbWidth) / 2;
    int bheight = (smallHeight - intThumbHeight) / 2;
    g.DrawImage(bitmap3, new Rectangle(0, 0, intThumbWidth, intThumbHeight), lwidth, bheight, intThumbWidth, intThumbHeight, GraphicsUnit.Pixel);

    g.Dispose();
    bitmap1.Save(equalSavePath, System.Drawing.Imaging.ImageFormat.Jpeg);
    returnImg[2] = showSrcPath + fileName;
    }
    }
    }
    }
    }
    catch (Exception ex)
    {
    //出错则删除
    //System.IO.File.Delete(System.Web.HttpContext.Current.Server.MapPath(savePath));
    throw ex;
    }

    return returnImg;
    }

  • 相关阅读:
    Python全栈开发之---mysql数据库
    python爬虫项目(scrapy-redis分布式爬取房天下租房信息)
    python多线程爬虫+批量下载斗图啦图片项目(关注、持续更新)
    python爬虫+数据可视化项目(关注、持续更新)
    超融合基本架构简单定义
    开启新生之路,,,学习网络
    Redhat7.2 ----team网卡绑定
    设计原则
    java应用程序的运行机制
    java三大版本和核心优势
  • 原文地址:https://www.cnblogs.com/zhoudemo/p/2320288.html
Copyright © 2011-2022 走看看