首页 > 批量修改图片以及加水印

批量修改图片以及加水印

好久木有来写点什么了.. 前段时间挺忙的.  

今天上来分享一个,这几天我给商城图片加水印的代码吧.因为产品编辑那边是先把图片都上传完成了,所以只能做批量修改图片来完成给所有图片加水印的效果. 类似DX、京东效果.

现在正在开发的B2C项目商城: www.oxozoom.com  也希望更多能关注下.

效果如下:

public void plAddSY(object sender, EventArgs e)

        {

            //C#遍历指定文件夹中的所有文件

            DirectoryInfo TheFolder = new DirectoryInfo(Request.PhysicalApplicationPath + "images\Product");

            //DirectoryInfo TheFolder = new DirectoryInfo("D:\WebFiles\Newb2c\images\Product");

            //遍历文件夹

            foreach (DirectoryInfo NextFolderfirst in TheFolder.GetDirectories())

            {

                foreach (DirectoryInfo NextFolder in NextFolderfirst.GetDirectories())

                {

                    if (NextFolder.Name == "-2" || NextFolder.Name == "-1" || NextFolder.Name == "0" || NextFolder.Name == "1" || NextFolder.Name == "2" || NextFolder.Name == "3" || NextFolder.Name == "IsBoolImg")

                    {

                        //遍历文件

                        foreach (FileInfo NextFile in NextFolder.GetFiles())

                        {

                            if (NextFile.Name.Contains("SY800SY"))

                            {

                                File.Delete(NextFile.FullName);

                            }

                            else if (!NextFile.Name.Contains("SY.") && !NextFile.Name.Contains("SY800."))

                            {

                                if (!NextFile.Name.Contains("47-47_")&&!NextFile.Name.Contains("50-50_")&&!NextFile.Name.Contains("80-80_")&&!NextFile.Name.Contains("100-100_")&&!NextFile.Name.Contains("120-120_")&&!NextFile.Name.Contains("140-140_")&&!NextFile.Name.Contains("160-160_")&&!NextFile.Name.Contains("380-380_"))

                                {

                                    MarkWater(NextFile.FullName, Request.PhysicalApplicationPath + "images\" + "logo-back.png");

                                    //MarkWater(NextFile.FullName, "D:\WebFiles\Newb2c\images\" + "logo-back.png");

                                }

                            }

                        }

                    }

                }

            }

        }



        ///

   

        /// 给图片上水印   

        ///
   

        /// 原图片地址   

        /// 水印图片地址   

        public void MarkWater(string filePath, string waterFile)

        {

            int i = filePath.LastIndexOf(".");

            string ex = filePath.Substring(i, filePath.Length - i);

            if (string.Compare(ex, ".gif", true) == 0)

            {

                return;

            }

            int newp = filePath.LastIndexOf(".");

            string newpo = filePath.Substring(0, newp);

            string newpolast = filePath.Substring(newp + 1);

            string newlastimg = newpo + "SY800" + "." + newpolast;

            BitmapHelper.MakeThumbnail(filePath, newlastimg, 800, 800, "DB", "JPG");

            string ModifyImagePath = newlastimg;

            int lucencyPercent = 25;

            System.Drawing.Image modifyImage = null;

            System.Drawing.Image drawedImage = null;

            Graphics g = null;

            try

            {

                modifyImage = System.Drawing.Image.FromFile(ModifyImagePath, true);

                drawedImage = System.Drawing.Image.FromFile(waterFile, true);

                g = Graphics.FromImage(modifyImage);

                int x = (modifyImage.Width - drawedImage.Width)/2;

                int y = (modifyImage.Height - drawedImage.Height)/2;

                float[][] matrixItems ={   

                new float[] {1, 0, 0, 0, 0},   

                new float[] {0, 1, 0, 0, 0},   

                new float[] {0, 0, 1, 0, 0},   

                new float[] {0, 0, 0, (float)lucencyPercent/100f, 0},   

                new float[] {0, 0, 0, 0, 1}};



                ColorMatrix colorMatrix = new ColorMatrix(matrixItems);

                ImageAttributes imgAttr = new ImageAttributes();

                imgAttr.SetColorMatrix(colorMatrix, ColorMatrixFlag.Default, ColorAdjustType.Bitmap);

                g.DrawImage(drawedImage, new Rectangle(x, y, drawedImage.Width, drawedImage.Height), 10, 10, drawedImage.Width, drawedImage.Height, GraphicsUnit.Pixel, imgAttr);

                string[] allowImageType = { ".jpg", ".gif", ".png", ".bmp", ".tiff", ".wmf", ".ico" };

                FileInfo fi = new FileInfo(ModifyImagePath);

                ImageFormat imageType = ImageFormat.Gif;

                switch (fi.Extension.ToLower())

                {

                    case ".jpg": imageType = ImageFormat.Jpeg; break;

                    case ".gif": imageType = ImageFormat.Gif; break;

                    case ".png": imageType = ImageFormat.Png; break;

                    case ".bmp": imageType = ImageFormat.Bmp; break;

                    case ".tif": imageType = ImageFormat.Tiff; break;

                    case ".wmf": imageType = ImageFormat.Wmf; break;

                    case ".ico": imageType = ImageFormat.Icon; break;

                    default: break;

                }

                MemoryStream ms = new MemoryStream();

                modifyImage.Save(ms, imageType);

                byte[] imgData = ms.ToArray();

                modifyImage.Dispose();

                drawedImage.Dispose();

                g.Dispose();

                FileStream fs = null;

                fs = new FileStream(ModifyImagePath.Replace("SY800.", "SY."), FileMode.Create, FileAccess.Write);

                if (fs != null)

                {

                    fs.Write(imgData, 0, imgData.Length);

                    fs.Close();

                }

            }

            finally

            {

                try

                {

                    drawedImage.Dispose();

                    modifyImage.Dispose();

                    g.Dispose();

                }

                catch

                {

                }

            }

        }

 

 

public class BitmapHelper

    {

        ///



        /// 生成缩略图

        ///


        /// 源图路径(物理路径)

        /// 缩略图路径(物理路径)

        /// 缩略图宽度

        /// 缩略图高度

        /// 生成缩略图的方式

        /// 缩略图的图片类型

        public static void MakeThumbnail(string originalImagePath, string thumbnailPath, int width, int height, string mode, string type)

        {

            Image originalImage = 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;

                case "DB"://等比缩放(不变形,如果高大按高,宽大按宽缩放)

                    if ((double)originalImage.Width / (double)towidth < (double)originalImage.Height / (double)toheight)

                    {

                        toheight = height;

                        towidth = originalImage.Width * height / originalImage.Height;

                    }

                    else

                    {

                        towidth = width;

                        toheight = originalImage.Height * width / originalImage.Width;

                    }

                    break;

                default:

                    break;

            }



            //新建一个bmp图片

            Image bitmap = new Bitmap(towidth, toheight);



            //新建一个画板

            Graphics g = Graphics.FromImage(bitmap);



            //设置高质量插值法

            g.InterpolationMode = System.Drawing.Drawing2D.InterpolationMode.High;



            //设置高质量,低速度呈现平滑程度

            g.SmoothingMode = System.Drawing.Drawing2D.SmoothingMode.HighQuality;



            //清空画布并以透明背景色填充

            g.Clear(Color.Transparent);



            //在指定位置并且按指定大小绘制原图片的指定部分

            g.DrawImage(originalImage, new Rectangle(0, 0, towidth, toheight),

            new Rectangle(x, y, ow, oh),

            GraphicsUnit.Pixel);



            try

            {

                //保存缩略图

                if (type.ToUpper() == "JPG")

                {

                    bitmap.Save(thumbnailPath, System.Drawing.Imaging.ImageFormat.Jpeg);

                }

                if (type.ToUpper() == "BMP")

                {

                    bitmap.Save(thumbnailPath, System.Drawing.Imaging.ImageFormat.Bmp);

                }

                if (type.ToUpper() == "GIF")

                {

                    bitmap.Save(thumbnailPath, System.Drawing.Imaging.ImageFormat.Gif);

                }

                if (type.ToUpper() == "PNG")

                {

                    bitmap.Save(thumbnailPath, System.Drawing.Imaging.ImageFormat.Png);

                }

            }

            catch (System.Exception e)

            {

                throw e;

            }

            finally

            {

                originalImage.Dispose();

                bitmap.Dispose();

                g.Dispose();

            }

        }}

今天平安夜.一年又是一年,去年10月14号跟女友分手到现在,已经1年多了 .2013,我的本命年.也是不无心再谈感情的一年.这一年收获很多,明白了太多太多.

那在即将到来的2014,我会开始下一段感情. 希望我会幸福..  一直坚信自信是一个人自强、自立的根本,也许过去我会有不自信,会迷茫,但是现在不会了.我很清楚我要什么.我所期待的东西得不到,我可以等.但是我觉得不会再勉强. 2012.10.14-2013.12.24 这1年多的时间我觉得是我这辈子最宝贵的财富!!   一个懂得爱自己的人,才会知道如何去爱别人.一个太过依赖对方的人,不经历一个失败,永远都不会长大。 用一年的时间来沉淀、埋藏三年的感情,很有必要. bye ~   在这里谢谢我的前女友. 谢谢!! 最后一次祝你幸福~ 

转载于:https://www.cnblogs.com/xiong-QQ357253950/p/3489012.html

更多相关:

  • 菜鸟一枚,正在学习C++ Gui Qt4,整理很零碎,欢迎批评指正   1.窗口标题: QWidget *window = new QWidget; window->setWindowTitle("Enter Your Age"); **************************************** 关于标题...

  • 将两个有序链表合并为一个新的有序链表并返回。新链表是通过拼接给定的两个链表的所有节点组成的。 示例: 输入:1->2->4, 1->3->4 输出:1->1->2->3->4->4 总体思路是: 比较两个链表头节点,较小的插入新链表指针之后,同时较小链表指针向后移动一位 实现如下: ListNode* mergeTwo...

  • 1.直接调用微软socket对象处理 static void Main(string[] args){try{IPAddress ip = new IPAddress(new byte[] { 127, 0, 0, 1 });//在3721端口新建一个TcpListener对象TcpListener listener = new...

  •   现在很多地方都会用到zookeeper, 用到它的地方就是为了实现分布式。用到的场景就是服务注册,比如一个集群服务器,需要知道哪些服务器在线,哪些服务器不在线。   ZK有一个功能,就是创建临时节点,当机器启动应用的时候就会连接到一个ZK节点,然后创建一个临时节点,那么通过获取监听该路径,并且获取该路径下的节点数量就知道有哪些服务...

  • 前台到后台java时data日期类型的转化 在实体类中用@DataTimeFormat,这样设置即使传过来是空的字符串也是可以转的,要和前面传过来的格式一致,如 @XmlElement(name="BeginDate") @DateTimeFormat(pattern="yyyy-MM-dd") private Date begin...

  • 有时候我们项目,在执行某个操作后,会生成一些数据结果,如报表一类的东西,我们需要对结果进行保存,甚至是生成word文档。 那么首先获取到控件快照就最基本的条件。 生成快照的静态方法类 using System; using System.Collections.Generic; using System.Drawing; using...

  • 作用批量执行sql语句 表达式.RunSQL(SQLStatement,UseTransaction) 表达式.一个代表DoCmd对象的变量。 注释:sqlstatement参数的最大长度为 32,768 个字符(而"宏"窗口中的 SQL 语句操作参数的最大长度为 256 个字符)。      官方说仅能用于Microsoft Acc...

  • 前戏:针对上一篇列出来的功能点,今天和大家分享下这个自定义的公式是怎么设计的,由于我的第一篇博客在首页被管理员移走了,大家可以点击这里来跳转,看下第一篇的目录结构。本人作为老菜鸟,和大家分享的也是一些老菜鸟的想法,大神千万别喷我.   设计背景:当初为什么要设计这个自定义的计算公式呢,原因就是,这个价格是不确定的,计算方式也是不确定的...

  • 背景 搭建一个适合公司erp业务的开发平台。 架构概要图:    流程引擎开发平台:  包含流程引擎设计器,流程管理平台,流程引擎服务。目前只使用单个数据库进行管理。  流程引擎设计器    采用silverlight进行开发,本质是对流程模型进行设计,并生成xml。包含:人工节点,自动节点,并行开始节点,并行结束节点,消息节点,文...

  • using System;using System.Collections.Generic;using System.Linq;using System.Text;using System.Xml;using System.Web; namespace BLL{    public  class XmlDoc    {       ...

  • 在AS3中,键盘事件是由KeyboardEvent类来处理的,属于flash.events包里面,有两种类型的键盘事件:KeyboardEvent.KEY_DOWN 和 KeyboardEvent.KEY_UP,对于键的代码获得我们通过keyCode这个属性 其实键盘事件使用起来还是相当方便,下面直接看实例: 建立一个新的AS文件ma...