zoukankan      html  css  js  c++  java
  • 步步为营-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 效果图

  • 相关阅读:
    Linux curl使用简单介绍
    SecureCRT编码转换vim
    BigTable/HBase基本概念解读 & Hbase shell常用命令
    Crontab用法说明(Linux)
    Sina SSO 登陆过程分析
    浅谈队列
    搞怪的 log4net 记录日志 性能测试
    iBatis.Net异步多线程 操作Ibatis报错
    高并发高负载的大型网站系统架构
    [置顶] IIs Web 站点安全 监控 站点自动部署 重启
  • 原文地址:https://www.cnblogs.com/YK2012/p/7011291.html
Copyright © 2011-2022 走看看