【C#公共帮助类】 Image帮助类

大家知道,开发项目除了数据访问层很重要外,就是Common了,这里就提供了强大且实用的工具。

Image类:

using System;
using System.Collections.Generic;
using System.Text;
using System.IO;
using System.Drawing.Imaging;
using System.Drawing;
using System.Web;
namespace Common
{
  public  static class Image
  {

      #region 图片格式转换
      /// <summary>
      /// 图片格式转换
      /// </summary>
      /// <param name="OriFilename">原始文件相对路径</param>
      /// <param name="DesiredFilename">生成目标文件相对路径</param>
      /// <returns></returns>
      ///  JPG采用的是有损压缩所以JPG图像有可能会降低图像清晰度,而像素是不会降低的
      ///  GIF采用的是无损压缩所以GIF图像是不会降低原图图像清晰度和像素的,但是GIF格式只支持256色图像。
      public static bool ConvertImage(string OriFilename, string DesiredFilename)
      {
          string extname = DesiredFilename.Substring(DesiredFilename.LastIndexOf(‘.‘)+1).ToLower();
          ImageFormat DesiredFormat;
          //根据扩张名,指定ImageFormat
          switch (extname)
          {
              case "bmp":
                  DesiredFormat = ImageFormat.Bmp;
                  break;
              case "gif":
                  DesiredFormat = ImageFormat.Gif;
                  break;
              case "jpeg":
                  DesiredFormat = ImageFormat.Jpeg;
                  break;
              case "ico":
                  DesiredFormat = ImageFormat.Icon;
                  break;
              case "png":
                  DesiredFormat = ImageFormat.Png;
                  break;
              default:
                  DesiredFormat = ImageFormat.Jpeg;
                  break;
          }
          try
          {
              System.Drawing.Image imgFile = System.Drawing.Image.FromFile(WebPathTran(OriFilename));
              imgFile.Save(WebPathTran(DesiredFilename), DesiredFormat);
              return true;
          }
          catch
          {
              return false;
          }
      }
        #endregion

      #region 图片缩放
      /// <summary>
      /// 图片固定大小缩放
      /// </summary>
      /// <param name="OriFileName">源文件相对地址</param>
      /// <param name="DesiredFilename">目标文件相对地址</param>
      /// <param name="IntWidth">目标文件宽</param>
      /// <param name="IntHeight">目标文件高</param>
      /// <param name="imageFormat">图片文件格式</param>
      public static bool ChangeImageSize(string OriFileName, string DesiredFilename, int IntWidth, int IntHeight, ImageFormat imageFormat)
        {
            string SourceFileNameStr =WebPathTran(OriFileName); //来源图片名称路径
            string TransferFileNameStr = WebPathTran(DesiredFilename); //目的图片名称路径
             FileStream myOutput =null;
            try
            {
                System.Drawing.Image.GetThumbnailImageAbort myAbort = new System.Drawing.Image.GetThumbnailImageAbort(imageAbort);
                Image SourceImage = System.Drawing.Image.FromFile(OriFileName);//来源图片定义
                Image TargetImage = SourceImage.GetThumbnailImage(IntWidth, IntHeight, myAbort, IntPtr.Zero);  //目的图片定义
                //将TargetFileNameStr的图片放宽为IntWidth,高为IntHeight
                myOutput = new FileStream(TransferFileNameStr, FileMode.Create, FileAccess.Write, FileShare.Write);
                TargetImage.Save(myOutput, imageFormat);
                myOutput.Close();
                return true;
            }
            catch
            {
                myOutput.Close();
                return false;
            }

        }

      private static  bool imageAbort()
        {
            return false;
        }
      #endregion

      #region 文字水印
        /// <summary>
        /// 文字水印
        /// </summary>
        /// <param name="wtext">水印文字</param>
        /// <param name="source">原图片物理文件名</param>
        /// <param name="target">生成图片物理文件名</param>
        public static bool ImageWaterText(string wtext,string source, string target)
        {
            bool resFlag = false;
            Image image = Image.FromFile(source);
            Graphics graphics = Graphics.FromImage(image);
            try
            {
              graphics.DrawImage(image, 0, 0, image.Width, image.Height);
              Font font = new System.Drawing.Font("Verdana", 60);
              Brush brush = new System.Drawing.SolidBrush(System.Drawing.Color.Green);
              graphics.DrawString(wtext, font, brush, 35, 35);
              image.Save(target);
              resFlag = true;
            }
            catch (Exception)
            {

                throw;
            }
            finally
            {
                graphics.Dispose();
                image.Dispose();

            }
              return resFlag;
        }

        #endregion

      #region 图片水印

        /// <summary>
        /// 在图片上生成图片水印
        /// </summary>
        /// <param name="Path">原服务器图片路径</param>
        /// <param name="Path_syp">生成的带图片水印的图片路径</param>
        /// <param name="Path_sypf">水印图片路径</param>
      public static bool ImageWaterPic(string source, string target, string waterPicSource)
        {
            bool resFlag = false;
            Image sourceimage = Image.FromFile(source);
            Graphics sourcegraphics = Graphics.FromImage(sourceimage);
            Image waterPicSourceImage = Image.FromFile(waterPicSource);
            try
            {
                sourcegraphics.DrawImage(waterPicSourceImage, new System.Drawing.Rectangle(sourceimage.Width - waterPicSourceImage.Width, sourceimage.Height - waterPicSourceImage.Height, waterPicSourceImage.Width, waterPicSourceImage.Height), 0, 0, waterPicSourceImage.Width, waterPicSourceImage.Height, GraphicsUnit.Pixel);
                sourceimage.Save(target);
            }
            catch (Exception)
            {
                throw;
            }
            finally
            {
                sourcegraphics.Dispose();
                sourceimage.Dispose();
                waterPicSourceImage.Dispose();
            }
            return resFlag;

        }

        #endregion

      /// <summary>
      /// 路径转换(转换成绝对路径)
      /// </summary>
      /// <param name="path"></param>
      /// <returns></returns>
      private static string WebPathTran(string path)
      {
          try
          {
              return HttpContext.Current.Server.MapPath(path);
          }
          catch
          {
              return path;
          }
      }
    }
}
时间: 2024-10-06 12:55:45

【C#公共帮助类】 Image帮助类的相关文章

公共的数据库访问访问类 SqlHelper.cs

/// <summary> /// 类说明:公共的数据库访问访问类 /// </summary> using System; using System.Collections.Generic; using System.Text; using System.Data; using System.Data.SqlClient; using System.Collections; namespace DotNet.Utilities { /// <summary> /// 

【C++】C++自学旅程(7):类类型初识——类的定义

新年第一博,新年快乐! 一直不明白面对对象的“对象”是什么意思,想象不出:在学OC时出现了奇怪的语法,让程序“自己”运行:EDA的沙龙中提到了类类型,但不知道这是个什么鬼.终于这些问题的谜底要被我自己自学揭开了,哈哈哈!类类型我来啦! 类(Class)是一种自定义数据类型,是具有相同属性和行为的一组对象的集合,它是面向对象中最为重要的概念之一.类类型中有变量来存储属性和数据,叫做成员变量或数据成员,还有操作这些数据的函数,叫做成员函数. 类类型的作用: 实现封装 数据隐藏 继承和派生多态 ……

类,抽象基类,接口类三者间的区别与联系(C++)

联系很明显,三个都是‘类’,如果读者对类的概念不清楚,可以参照wid的博文http://www.cnblogs.com/mr-wid/archive/2013/02/18/2916309.html. 下面着重解释一下区别,但此文仅是个人理解,如果觉得我说的不对的地方,还请赐教. (1)结构上的区别: 普通类:数据+方法+实现 抽象类:数据+方法(一定包含虚方法n>=1)+部分方法的实现 接口类:方法(纯虚方法) (2)概念上的区别: 普通的类和另外两个的区别很明显,普通类就是猫狗之类的,而抽象类

java 类的匿名类和封装

/* 匿名对象:没有引用类型变量指向的对象称作为匿名对象. 需求: 使用 java类描述一个学生类. 匿名对象要注意的事项: 1. 我们一般不会给匿名对象赋予属性值,因为永远无法获取到. 2. 两个匿名对象永远都不可能是同一个对象. 匿名对象好处:简化书写.可以尽快释放对象的堆内存空间 匿名对象的应用场景: 1. 如果一个对象需要调用一个方法一次的时候,而调用完这个方法之后,该对象就不再使用了,这时候可以使用 匿名对象. 2. 可以作为实参调用一个函数. */ //学生类 class Stude

黑马程序员--Java基础学习笔记【Object类、String类】

------Java培训.Android培训.iOS培训..Net培训.期待与您交流! ------- Object类 在Java类继承结构中,java.lang.Object类位于顶端. 所有类都直接或间接继承Object类. (接口不能继承Object类,接口中隐含定义了Object类的所有公共方法,但是全抽象) Object类型的引用变量可以指向任何类型对象. Object类成员方法 public String toString() { return getClass().getName(

c++——派生类和基类转换

派生类经常(但不总是)覆盖它继承的虚函数.如果派生类没有覆盖其基类中的某个虚函数,则该虚函数的行为类似于其他的普通成员,派生类会直接继承其在基类中的版本. c++11允许派生类显式地注明它使用某个成员函数覆盖了它继承的虚函数.具体做法是在形参列表后面.或者在const成员函数的const关键字后面.或者在引用成员函数的引用限定符后面添加一个关键字override. 派生类也必须使用基类的构造函数来初始化它的基类部分.(除非基类没有显式定义构造函数,这样在派生类的构造函数中可以不显式调用基类的构造

黑马程序员——Java基础---反射Class类、Constructor类、Field类

------<a href="http://www.itheima.com" target="blank">Java培训.Android培训.iOS培训..Net培训</a>.期待与您交流! ------- 反射的应用场景 一.概述 反射技术: Java反射机制是在运行状态中,对于任意一个类,都能够知道这个类中的所有属性和方法:对于任意一个对象,都能够调用它的任意一个方法和属性:这种动态获取的信息以及动态调用对象的方法的功能称为java语言的

基类与派生类的关系

任何一个类都可以派生出一个新类,派生类也可以再派生出新类,因此,基类和派生类是相对而言的. 基类与派生类之间的关系可以有如下几种描述: 1. 派生类是基类的具体化 类的层次通常反映了客观世界中某种真实的模型.在这种情况下,不难看出:基类是对若干个派生类的抽象,而派生类是基类的具体化.基类抽取了它的派生类的公共特征,而派生类通过增加行为将抽象类变为某种有用的类型. 2. 派生类是基类定义的延续 先定义一个抽象基类,该基类中有些操作并未实现.然后定义非抽象的派生类,实现抽象基类中定义的操作.例如,虚

C++ Primer 学习笔记_66_面向对象编程 -定义基类跟派生类[续]

面向对象编程 --定义基类和派生类[续] 四.virtual与其他成员函数 C++中的函数调用默认不使用动态绑定.要触发动态绑定,必须满足两个条件: 1)只有指定为虚函数的成员函数才能进行动态绑定,成员函数默认为非虚函数,非虚函数不进行动态绑定. 2)必须通过基类类型的引用或指针进行函数调用. 1.从派生类到基类的转换 因为每个派生类对象都包含基类部分,所以可以将基类类型的引用绑定到派生类对象的基类部分可以用指向基类的指针指向派生类对象: void print_total(const Item_

C++——类继承以及类初始化顺序

对于类以及类继承, 几个主要的问题:1) 继承方式: public/protected/private继承. 这是c++搞的, 实际上继承方式是一种允许子类控制的思想. 子类通过public继承, 可以把基类真实还原, 而private继承则完全把基类屏蔽掉. 这种屏蔽是相对于对象层而言的, 就是说子类的对象完全看不到基类的方法, 如果继承方式是private的话, 即使方法在基类中为public的方法. 但继承方式并不影响垂直方向的访问特性, 那就是子类的函数对基类的成员访问是不受继承方式的影