图片处理

 1、生成渐变自定义文字图片

protected void GetImage {

  //目前只有IE下能生成
  Response.Clear();
  //建立一个120*30大小,24bit的BMP图象; 
  Bitmap imgOutput=new Bitmap(220, 30,PixelFormat.Format24bppRgb);
  Graphics g = Graphics.FromImage(imgOutput); 
  g.Clear(Color.Blue); 
  g.SmoothingMode=SmoothingMode.AntiAlias;
  g.DrawString("看见了吗?", new Font("黑体",16,FontStyle.Bold),new SolidBrush(Color.White),new PointF(2,4));
  g.FillRectangle(new LinearGradientBrush(new Point(0,0), new Point(220,30), Color.FromArgb(0,0,0,0),Color.FromArgb(255,255,255,255)),0,0,220,30);
  imgOutput.Save(Response.OutputStream, ImageFormat.Jpeg);
  //写入文件中
  imgOutput.Save(Server.MapPath("~/images/test.jpg"), ImageFormat.Jpeg);
  g.Dispose() ;
  imgOutput.Dispose() ;
  Response.End();
  }

==========缩略图生成类=============

里面有4个重载方法,有直接返回Image对象的,有生成缩略图,并且保存到指定目录的!
using System.IO;
using System.Drawing;
using System.Drawing.Imaging;

/// <summary>
/// 图片处理类
/// 1、生成缩略图片或按照比例改变图片的大小和画质
/// 2、将生成的缩略图放到指定的目录下
/// </summary>
public class ImageClass
{
  public Image ResourceImage;
  private int ImageWidth;
  private int ImageHeight;

  public string ErrMessage;

  /// <summary>
  /// 类的构造函数
  /// </summary>
  /// <param name="ImageFileName">图片文件的全路径名称</param>
  public ImageClass(string ImageFileName)
  {
  ResourceImage=Image.FromFile(ImageFileName);
  ErrMessage="";
  }

  public bool ThumbnailCallback()
  {
  return false;
  }

  /// <summary>
  /// 生成缩略图重载方法1,返回缩略图的Image对象
  /// </summary>
  /// <param name="Width">缩略图的宽度</param>
  /// <param name="Height">缩略图的高度</param>
  /// <returns>缩略图的Image对象</returns>
  public Image GetReducedImage(int Width,int Height)
  {
  try
  {
  Image ReducedImage;

  Image.GetThumbnailImageAbort callb=new Image.GetThumbnailImageAbort(ThumbnailCallback); 
   
  ReducedImage=ResourceImage.GetThumbnailImage(Width,Height,callb,IntPtr.Zero);
  
  return ReducedImage;
  }
  catch(Exception e)
  {
  ErrMessage=e.Message; 
  return null;
  }
  }

  /// <summary>
  /// 生成缩略图重载方法2,将缩略图文件保存到指定的路径
  /// </summary>
  /// <param name="Width">缩略图的宽度</param>
  /// <param name="Height">缩略图的高度</param>
  /// <param name="targetFilePath">缩略图保存的全文件名,(带路径),参数格式:D:\Images\filename.jpg</param>
  /// <returns>成功返回true,否则返回false</returns>
  public bool GetReducedImage(int Width,int Height,string targetFilePath)
  {
  try
  {
  Image ReducedImage;

  Image.GetThumbnailImageAbort callb=new Image.GetThumbnailImageAbort(ThumbnailCallback); 
   
  ReducedImage=ResourceImage.GetThumbnailImage(Width,Height,callb,IntPtr.Zero);
  ReducedImage.Save(@targetFilePath,ImageFormat.Jpeg); 

  ReducedImage.Dispose(); 
  
  return true;
  }
  catch(Exception e)
  {
  ErrMessage=e.Message; 
  return false;
  }
  }

  /// <summary>
  /// 生成缩略图重载方法3,返回缩略图的Image对象
  /// </summary>
  /// <param name="Percent">缩略图的宽度百分比 如:需要百分之80,就填0.8</param>  
  /// <returns>缩略图的Image对象</returns>
  public Image GetReducedImage(double Percent)
  {
  try
  {
  Image ReducedImage;

  Image.GetThumbnailImageAbort callb=new Image.GetThumbnailImageAbort(ThumbnailCallback); 

  ImageWidth=Convert.ToInt32(ResourceImage.Width*Percent);
  ImageHeight=Convert.ToInt32(ResourceImage.Width*Percent);
   
  ReducedImage=ResourceImage.GetThumbnailImage(ImageWidth,ImageHeight,callb,IntPtr.Zero);
  
  return ReducedImage;
  }
  catch(Exception e)
  {
  ErrMessage=e.Message; 
  return null;
  }
  }

  /// <summary>
  /// 生成缩略图重载方法4,返回缩略图的Image对象
  /// </summary>
  /// <param name="Percent">缩略图的宽度百分比 如:需要百分之80,就填0.8</param>  
  /// <param name="targetFilePath">缩略图保存的全文件名,(带路径),参数格式:D:\Images\filename.jpg</param>
  /// <returns>成功返回true,否则返回false</returns>
  public bool GetReducedImage(double Percent,string targetFilePath)
  {
  try
  {
  Image ReducedImage;

  Image.GetThumbnailImageAbort callb=new Image.GetThumbnailImageAbort(ThumbnailCallback); 

  ImageWidth=Convert.ToInt32(ResourceImage.Width*Percent);
  ImageHeight=Convert.ToInt32(ResourceImage.Width*Percent);
   
  ReducedImage=ResourceImage.GetThumbnailImage(ImageWidth,ImageHeight,callb,IntPtr.Zero);

  ReducedImage.Save(@targetFilePath,ImageFormat.Jpeg);

  ReducedImage.Dispose(); 
  
  return true;
  }
  catch(Exception e)
  {
  ErrMessage=e.Message; 
  return false;
  }
  }
}

===========这个最高级=============

  /// <summary>
  /// 生成缩略图
  /// </summary>
  /// <param name="originalImagePath">源图路径(物理路径)</param>
  /// <param name="thumbnailPath">缩略图路径(物理路径)</param>
  /// <param name="width">缩略图宽度</param>
  /// <param name="height">缩略图高度</param>
  /// <param name="mode">生成缩略图的方式</param> 
  /// <param name="mode">保存缩略图类型格式JPG,BMP,GIF...</param> 
  public void MakeThumbnail(string originalImagePath, string thumbnailPath, int width, int height, string mode, string type)
  {
  System.Drawing.Image originalImage = System.Drawing.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图片
  System.Drawing.Image bitmap = new System.Drawing.Bitmap(towidth, toheight);

  //新建一个画板
  System.Drawing.Graphics g = System.Drawing.Graphics.FromImage(bitmap);

  //设置高质量插值法
  g.InterpolationMode = System.Drawing.Drawing2D.InterpolationMode.High;

  //设置高质量,低速度呈现平滑程度
  g.SmoothingMode = System.Drawing.Drawing2D.SmoothingMode.HighQuality;

  //清空画布并以透明背景色填充
  g.Clear(System.Drawing.Color.Transparent);

  //在指定位置并且按指定大小绘制原图片的指定部分
  g.DrawImage(originalImage, new System.Drawing.Rectangle(0, 0, towidth, toheight),
  new System.Drawing.Rectangle(x, y, ow, oh),
  System.Drawing.GraphicsUnit.Pixel);

  try
  {
  //保存缩略图
  if (type == "JPG")
  {
  bitmap.Save(thumbnailPath, System.Drawing.Imaging.ImageFormat.Jpeg);
  }
  if (type == "BMP")
  {
  bitmap.Save(thumbnailPath, System.Drawing.Imaging.ImageFormat.Bmp);
  }
  if (type == "GIF")
  {
  bitmap.Save(thumbnailPath, System.Drawing.Imaging.ImageFormat.Gif);
  }
  if (type == "PNG")
  {
  bitmap.Save(thumbnailPath, System.Drawing.Imaging.ImageFormat.Png);
  }
  }
  catch (System.Exception e)
  {
  throw e;
  }
  finally
  {
  originalImage.Dispose();
  bitmap.Dispose();
  g.Dispose();
  }
  }

==========图片+水印图+水印文字================

  /// <summary>
  /// 在图片上增加文字水印
  /// </summary>
  /// <param name="Path">原服务器图片路径</param>
  /// <param name="Path_sy">生成的带文字水印的图片路径</param>
  protected void AddShuiYinWord(string Path, string Path_sy)
  {
  Response.Clear();
  string addText = "测试水印";
  System.Drawing.Image image = System.Drawing.Image.FromFile(Path);
  System.Drawing.Graphics g = System.Drawing.Graphics.FromImage(image);
  g.DrawImage(image, 0, 0, image.Width, image.Height);
  System.Drawing.Font f = new System.Drawing.Font("Verdana", 16);
  System.Drawing.Brush b = new System.Drawing.SolidBrush(System.Drawing.Color.Blue);

  //最后的是xy坐标
  g.DrawString(addText, f, b, 15, 300);
  g.Dispose();
  //直接输出处理后的效果图
  image.Save(Response.OutputStream, ImageFormat.Jpeg);
  //图片保存到文件
  //image.Save(Path_sy);
  image.Dispose();
  Response.End();
  }

  /**/
  /// <summary>
  /// 在图片上生成图片水印
  /// </summary>
  /// <param name="Path">原服务器图片路径</param>
  /// <param name="Path_syp">生成的带图片水印的图片路径</param>
  /// <param name="Path_sypf">水印图片路径</param>
  protected void AddShuiYinPic(string Path, string Path_syp, string Path_sypf)
  {
  Response.Clear();
  System.Drawing.Image image = System.Drawing.Image.FromFile(Path);
  System.Drawing.Image copyImage = System.Drawing.Image.FromFile(Path_sypf);
  System.Drawing.Graphics g = System.Drawing.Graphics.FromImage(image);
  g.DrawImage(copyImage, new System.Drawing.Rectangle(image.Width - copyImage.Width, image.Height - copyImage.Height, copyImage.Width, copyImage.Height), 0, 0, copyImage.Width, copyImage.Height, System.Drawing.GraphicsUnit.Pixel);
  g.Dispose();
  //直接输出处理后的效果图
  image.Save(Response.OutputStream, ImageFormat.Jpeg);
  //图片保存到文件
  //image.Save(Path_sy);
  image.Dispose();
  Response.End();
  }

 

posted @ 2008-09-05 15:33  Microbar  阅读(408)  评论(0编辑  收藏  举报