步步为营-71-asp.net的简单练习(图片处理)

1 原有图片添加水印

1.1 封装一个类,用于获取文件路径

using System;
using System.Collections.Generic;
using System.IO;
using System.Linq;
using System.Web;

namespace _06_图片处理
{
    public static class FileHelper
    {
        public static string GetFilePath() 
        {
            //02 创建文件保存路径
            string savePath = Path.Combine(AppDomain.CurrentDomain.BaseDirectory + "Upload\");
            //02-01 根据日期创建文件夹
            DateTime dt = DateTime.Now;
            savePath += dt.Year + "\" + dt.Month + "\" + dt.Day;
            if (!Directory.Exists(savePath))
            {
                //创建文件夹
                Directory.CreateDirectory(savePath);
            }
            //02-02文 件名为当前时间            
            //savePath += "\" + dt.ToString().Replace(':', '-') + ".gif";
            savePath += "\" + dt.ToString().Replace(':', '-') ;
            return savePath;
        } 
    }
}
FileHelper

1.2 html页面和ashx页面

<!DOCTYPE html>
<html xmlns="http://www.w3.org/1999/xhtml">
<head>
<meta http-equiv="Content-Type" content="text/html; charset=utf-8"/>
    <title></title>
</head>
<body>
    <form action="AddLogo.ashx" method="post" enctype="multipart/form-data">
        <input type="file" name="OrImg" />
        <input type="submit" value="添加水印" />
    </form>
</body>
</html>
html
using System;
using System.Collections.Generic;
using System.Drawing;
using System.Linq;
using System.Web;

namespace _06_图片处理
{
    /// <summary>
    /// AddLogo 的摘要说明
    /// </summary>
    public class AddLogo : IHttpHandler
    {

        public void ProcessRequest(HttpContext context)
        {
            context.Response.ContentType = "text/html";

            //01 获取上传图片
            HttpPostedFile pf = context.Request.Files["OrImg"];
            
            #region 02 添加水印
            //02-01 创建画布
            Bitmap bm = new Bitmap(pf.InputStream);
            //02-02 创建绘图工具
            Graphics gs = Graphics.FromImage(bm);
            //02-03 拿到logo图片
            Bitmap bmLogo = new Bitmap(AppDomain.CurrentDomain.BaseDirectory + "/images/LogoYK.GIF");
            //02-04 开始绘制
            gs.DrawImage(bmLogo,bm.Width-bmLogo.Width,bm.Height-bmLogo.Height,bmLogo.Width,bmLogo.Height);
            #endregion

            
            #region 03 保存
            //03-01 获取文件扩展名
            string extName = pf.FileName.Substring(pf.FileName.LastIndexOf('.'));
            //03-02 获取文件路径
            string ph = FileHelper.GetFilePath();
            string savePath = ph + extName;
            //03-03 saveAs
            bm.Save(savePath);
            #endregion

            //04 展示
            context.Response.Write("<img src='" + savePath.Substring(savePath.IndexOf("Upload")) + "'/> ");
        }

        public bool IsReusable
        {
            get
            {
                return false;
            }
        }
    }
}
AddLogo.ashx

1.3 运行效果

2 验证码

2.1 ashx页面

using System;
using System.Collections.Generic;
using System.Drawing;
using System.Linq;
using System.Web;
using System.Drawing.Imaging;

namespace _06_图片处理
{
    /// <summary>
    /// ValidateCode 的摘要说明
    /// </summary>
    public class ValidateCode : IHttpHandler
    {

        public void ProcessRequest(HttpContext context)
        {
            //01 验证码是图片,所以修改Type
            context.Response.ContentType = "image/jpeg";
            //02 创建画布
            Bitmap bm = new Bitmap(70,30);
                      
            //03 创建绘图工具
            Graphics g =   Graphics.FromImage(bm);
            //03-01 设置背景色
            g.Clear(Color.Green);
            //04 准备绘制
            string strArry = "abcdefghijklmnopqrstuvwxyz0123456789";
            string vCode = string.Empty;
            Random r = new Random ();
            for (int i = 0; i < 4; i++)
            {
                vCode += strArry[r.Next(strArry.Length)];
            }
            //05 开始绘制
            g.DrawString(vCode,new Font (new FontFamily("宋体"),20),new SolidBrush(Color.Red),0,0);
            //06 保存
            bm.Save(context.Response.OutputStream,ImageFormat.Jpeg);
            //context.Response.Write("Hello World");
        }

        public bool IsReusable
        {
            get
            {
                return false;
            }
        }
    }
}
ashx

2.2 HTML页面

<!DOCTYPE html>
<html xmlns="http://www.w3.org/1999/xhtml">
<head>
<meta http-equiv="Content-Type" content="text/html; charset=utf-8"/>
    <script src="Script/jquery-1.7.1.min.js"></script>
    <title></title>
    <script>
        $(function () {
            $("#changeCode").click(function () {
                $('#validateCode').attr("src",  $('#validateCode').attr("src")+'1');
            });
        })
    </script>
</head>
<body>
    <img id="validateCode" src="ValidateCode.ashx?1"/>
    <a href="#" id="changeCode">看不清,换一张</a>
</body>
</html>
html

2.3 效果图

3 缩略图

3.1 HTML页面和ashx代码

<!DOCTYPE html>
<html xmlns="http://www.w3.org/1999/xhtml">
<head>
<meta http-equiv="Content-Type" content="text/html; charset=utf-8"/>
    <title></title>
</head>
<body>
    <form method="post" action="SmallImag.ashx" enctype="multipart/form-data">
        <input type="file" name="OrImg"/>
        <input type="submit" value="制作缩略图" />
    </form>
</body>
</html>
html
using System;
using System.Collections.Generic;
using System.Drawing;
using System.Linq;
using System.Web;

namespace _06_图片处理
{
    /// <summary>
    /// SmallImag 的摘要说明
    /// </summary>
    public class SmallImag : IHttpHandler
    {

        public void ProcessRequest(HttpContext context)
        {
            context.Response.ContentType = "text/html";
            //01 获取上传对象
            HttpPostedFile hf = context.Request.Files["OrImg"];
            //01-01 获取文件名称和后缀名
            string name = hf.FileName;
            string extName = hf.FileName.Substring(hf.FileName.IndexOf('.'));
            //01-02 获取文件路径 和 相对路径
            string path = FileHelper.GetFilePath();
            string showPath = path.Substring(path.IndexOf("Upload"));
            //02 保存原图片
            hf.SaveAs(path+extName);


            #region 03 绘制缩略后的小图

            //03-00 规定缩放比例
            float scale = 0.3f;
            //03-01 获取原图片
            Bitmap bmBig = new Bitmap(hf.InputStream);
            //03-02 创建画布
            Bitmap bm = new Bitmap((int)(bmBig.Width * scale),(int)(bmBig.Height * scale));
            //03-03 获取绘制工具
            Graphics g = Graphics.FromImage(bm);
            //03-04 开始绘制
            g.DrawImage(bmBig, 0, 0, (bmBig.Width * scale), (bmBig.Height * scale));
          
            #endregion
            //04 保存缩略图
            bm.Save(path +"_small"+ extName);
            //05 展示缩略图
            context.Response.Write("<img src='"+showPath+"_small"+extName+"'/>");
        }

        public bool IsReusable
        {
            get
            {
                return false;
            }
        }
    }
}
SmallImag.ashx

3.2 效果图

原文地址:https://www.cnblogs.com/YK2012/p/7011291.html