源码网商城,靠谱的源码在线交易网站 我的订单 购物车 帮助

源码网商城

c#给图片添加文字的代码小结

  • 时间:2022-03-20 17:16 编辑: 来源: 阅读:
  • 扫一扫,手机访问
摘要:c#给图片添加文字的代码小结
[b]代码实例一 [/b]
[u]复制代码[/u] 代码如下:
using System; using System.IO; using System.Collections; using System.Drawing; using System.Drawing.Drawing2D; using System.Drawing.Imaging; namespace Imag_writer { /// <summary> /// 水印的类型 /// </summary> public enum WaterMarkType {    /// <summary>    /// 文字水印    /// </summary>    TextMark,    /// <summary>    /// 图片水印    /// </summary>    //ImageMark // 暂时只能添加文字水印 }; /// <summary> /// 水印的位置 /// </summary> public enum WaterMarkPosition {    /// <summary>    /// 左上角    /// </summary>    WMP_Left_Top,    /// <summary>    /// 左下角    /// </summary>    WMP_Left_Bottom,    /// <summary>    /// 右上角    /// </summary>    WMP_Right_Top,    /// <summary>    /// 右下角    /// </summary>    WMP_Right_Bottom }; /// <summary> /// 处理图片的类(包括加水印,生成缩略图) /// </summary> public class ImageWaterMark {    public ImageWaterMark()    {     //     // TODO: 在此处添加构造函数逻辑     //    }    #region 给图片加水印    /// <summary>    /// 添加水印(分图片水印与文字水印两种)    /// </summary>    /// <param name="oldpath">原图片绝对地址</param>    /// <param name="newpath">新图片放置的绝对地址</param>    /// <param name="wmtType">要添加的水印的类型</param>    /// <param name="sWaterMarkContent">水印内容,若添加文字水印,此即为要添加的文字;    /// 若要添加图片水印,此为图片的路径</param>    public void addWaterMark(string oldpath, string newpath,     WaterMarkType wmtType, string sWaterMarkContent)    {     try     {      Image image = Image.FromFile(oldpath);      Bitmap b = new Bitmap(image.Width, image.Height,       PixelFormat.Format24bppRgb);      Graphics g = Graphics.FromImage(b);      g.Clear(Color.White);      g.SmoothingMode = SmoothingMode.HighQuality;      g.InterpolationMode = InterpolationMode.High;      g.DrawImage(image, 0, 0, image.Width, image.Height);      switch (wmtType)      {       case WaterMarkType.TextMark:        //文字水印        this.addWatermarkText(g, sWaterMarkContent, "WM_BOTTOM_RIGHT",         image.Width, image.Height);        break;      }      b.Save(newpath);      b.Dispose();      image.Dispose();     }     catch     {      if(File.Exists(oldpath))      {       File.Delete(oldpath);      }     }     finally     {      if(File.Exists(oldpath))      {       File.Delete(oldpath);      }     }    }    /// <summary>    ///   加水印文字    /// </summary>    /// <param name="picture">imge 对象</param>    /// <param name="_watermarkText">水印文字内容</param>    /// <param name="_watermarkPosition">水印位置</param>    /// <param name="_width">被加水印图片的宽</param>    /// <param name="_height">被加水印图片的高</param>    private void addWatermarkText(Graphics picture, string _watermarkText,     string _watermarkPosition, int _width, int _height)    {     // 确定水印文字的字体大小     int[] sizes = new int[]{32, 30, 28, 26, 24, 22, 20, 18, 16, 14, 12, 10, 8, 6, 4};     Font crFont = null;     SizeF crSize = new SizeF();     for (int i = 0;i < sizes.Length; i++)     {      crFont = new Font("Arial Black", sizes[i], FontStyle.Bold);      crSize = picture.MeasureString(_watermarkText, crFont);      if((ushort)crSize.Width < (ushort)_width)      {       break;      }     }     // 生成水印图片(将文字写到图片中)     Bitmap floatBmp = new Bitmap((int)crSize.Width + 3,           (int)crSize.Height + 3, PixelFormat.Format32bppArgb);     Graphics fg=Graphics.FromImage(floatBmp);     PointF pt=new PointF(0,0);     // 画阴影文字     Brush TransparentBrush0 = new SolidBrush(Color.FromArgb(255, Color.Black));     Brush TransparentBrush1 = new SolidBrush(Color.FromArgb(255, Color.Black));     fg.DrawString(_watermarkText,crFont,TransparentBrush0, pt.X, pt.Y + 1);     fg.DrawString(_watermarkText,crFont,TransparentBrush0, pt.X + 1, pt.Y);     fg.DrawString(_watermarkText,crFont,TransparentBrush1, pt.X + 1, pt.Y + 1);     fg.DrawString(_watermarkText,crFont,TransparentBrush1, pt.X, pt.Y + 2);     fg.DrawString(_watermarkText,crFont,TransparentBrush1, pt.X + 2, pt.Y);     TransparentBrush0.Dispose();     TransparentBrush1.Dispose();     // 画文字     fg.SmoothingMode=System.Drawing.Drawing2D.SmoothingMode.HighQuality;     fg.DrawString(_watermarkText,      crFont, new SolidBrush(Color.White),      pt.X, pt.Y, StringFormat.GenericDefault);     // 保存刚才的操作     fg.Save();     fg.Dispose();     // floatBmp.Save("d:\\WebSite\\DIGITALKM\\ttt.jpg");     // 将水印图片加到原图中     this.addWatermarkImage(      picture,      new Bitmap(floatBmp),      "WM_BOTTOM_RIGHT",      _width,      _height);    }    /// <summary>    ///   加水印图片    /// </summary>    /// <param name="picture">imge 对象</param>    /// <param name="iTheImage">Image对象(以此图片为水印)</param>    /// <param name="_watermarkPosition">水印位置</param>    /// <param name="_width">被加水印图片的宽</param>    /// <param name="_height">被加水印图片的高</param>    private void addWatermarkImage( Graphics picture,Image iTheImage,     string _watermarkPosition,int _width,int _height)    {     Image watermark = new Bitmap(iTheImage);     ImageAttributes imageAttributes = new ImageAttributes();     ColorMap colorMap = new ColorMap();     colorMap.OldColor = Color.FromArgb(255, 0, 255, 0);     colorMap.NewColor = Color.FromArgb(0, 0, 0, 0);     ColorMap[] remapTable = {colorMap};     imageAttributes.SetRemapTable(remapTable, ColorAdjustType.Bitmap);     float[][] colorMatrixElements = {              new float[] {1.0f, 0.0f, 0.0f, 0.0f, 0.0f},              new float[] {0.0f, 1.0f, 0.0f, 0.0f, 0.0f},              new float[] {0.0f, 0.0f, 1.0f, 0.0f, 0.0f},              new float[] {0.0f, 0.0f, 0.0f, 0.3f, 0.0f},              new float[] {0.0f, 0.0f, 0.0f, 0.0f, 1.0f}             };     ColorMatrix colorMatrix = new ColorMatrix(colorMatrixElements);     imageAttributes.SetColorMatrix(colorMatrix, ColorMatrixFlag.Default, ColorAdjustType.Bitmap);     int xpos = 0;     int ypos = 0;     int WatermarkWidth = 0;     int WatermarkHeight = 0;     double bl = 1d;     //计算水印图片的比率     //取背景的1/4宽度来比较     if ((_width > watermark.Width * 4) && (_height > watermark.Height * 4))     {      bl = 1;     }     else if ((_width > watermark.Width * 4) && (_height<watermark.Height * 4))     {      bl = Convert.ToDouble(_height / 4) / Convert.ToDouble(watermark.Height);     }     else if ((_width < watermark.Width * 4) && (_height > watermark.Height * 4))     {      bl = Convert.ToDouble(_width / 4) / Convert.ToDouble(watermark.Width);     }     else     {      if ((_width * watermark.Height) > (_height * watermark.Width))      {       bl = Convert.ToDouble(_height / 4) / Convert.ToDouble(watermark.Height);      }      else      {       bl = Convert.ToDouble(_width / 4) / Convert.ToDouble(watermark.Width);      }     }     WatermarkWidth = Convert.ToInt32(watermark.Width * bl);     WatermarkHeight = Convert.ToInt32(watermark.Height * bl);     switch (_watermarkPosition)     {      case "WM_TOP_LEFT":       xpos = 10;       ypos = 10;       break;      case "WM_TOP_RIGHT":       xpos = _width - WatermarkWidth - 10;       ypos = 10;       break;      case "WM_BOTTOM_RIGHT":       xpos = _width - WatermarkWidth - 10;       ypos = _height -WatermarkHeight - 10;       break;      case "WM_BOTTOM_LEFT":       xpos = 10;       ypos = _height - WatermarkHeight - 10;       break;     }     picture.DrawImage(      watermark,      new Rectangle(xpos, ypos, WatermarkWidth, WatermarkHeight),      0,      0,      watermark.Width,      watermark.Height,      GraphicsUnit.Pixel,      imageAttributes);     watermark.Dispose();     imageAttributes.Dispose();    }    /// <summary>    ///   加水印图片    /// </summary>    /// <param name="picture">imge 对象</param>    /// <param name="WaterMarkPicPath">水印图片的地址</param>    /// <param name="_watermarkPosition">水印位置</param>    /// <param name="_width">被加水印图片的宽</param>    /// <param name="_height">被加水印图片的高</param>    private void addWatermarkImage( Graphics picture,string WaterMarkPicPath,     string _watermarkPosition,int _width,int _height)    {     Image watermark = new Bitmap(WaterMarkPicPath);     this.addWatermarkImage(picture, watermark, _watermarkPosition, _width,      _height);    }    #endregion    #region 生成缩略图    /// <summary>    /// 保存图片    /// </summary>    /// <param name="image">Image 对象</param>    /// <param name="savePath">保存路径</param>    /// <param name="ici">指定格式的编解码参数</param>    private void SaveImage(Image image, string savePath, ImageCodecInfo ici)    {     //设置 原图片 对象的 EncoderParameters 对象     EncoderParameters parameters = new EncoderParameters(1);     parameters.Param[0] = new EncoderParameter(      System.Drawing.Imaging.Encoder.Quality, ((long) 90));     image.Save(savePath, ici, parameters);     parameters.Dispose();    }    /// <summary>    /// 获取图像编码解码器的所有相关信息    /// </summary>    /// <param name="mimeType">包含编码解码器的多用途网际邮件扩充协议 (MIME) 类型的字符串</param>    /// <returns>返回图像编码解码器的所有相关信息</returns>    private ImageCodecInfo GetCodecInfo(string mimeType)    {     ImageCodecInfo[] CodecInfo = ImageCodecInfo.GetImageEncoders();     foreach(ImageCodecInfo ici in CodecInfo)     {      if(ici.MimeType == mimeType)       return ici;     }     return null;    }    /// <summary>    /// 生成缩略图    /// </summary>    /// <param name="sourceImagePath">原图片路径(相对路径)</param>    /// <param name="thumbnailImagePath">生成的缩略图路径,如果为空则保存为原图片路径(相对路径)</param>    /// <param name="thumbnailImageWidth">缩略图的宽度(高度与按源图片比例自动生成)</param>    public void ToThumbnailImages(     string SourceImagePath,     string ThumbnailImagePath,     int ThumbnailImageWidth)    {     Hashtable htmimes = new Hashtable();     htmimes[".jpeg"] = "image/jpeg";     htmimes[".jpg"] = "image/jpeg";     htmimes[".png"] = "image/png";     htmimes[".tif"] = "image/tiff";     htmimes[".tiff"] = "image/tiff";     htmimes[".bmp"] = "image/bmp";     htmimes[".gif"] = "image/gif";     // 取得原图片的后缀     string sExt = SourceImagePath.Substring(      SourceImagePath.LastIndexOf(".")).ToLower();     //从 原图片创建 Image 对象     Image image = Image.FromFile(SourceImagePath);     int num = ((ThumbnailImageWidth / 4) * 3);     int width = image.Width;     int height = image.Height;     //计算图片的比例     if ((((double) width) / ((double) height)) >= 1.3333333333333333f)     {      num = ((height * ThumbnailImageWidth) / width);     }     else     {      ThumbnailImageWidth = ((width * num) / height);     }     if ((ThumbnailImageWidth < 1) || (num < 1))     {      return;     }     //用指定的大小和格式初始化 Bitmap 类的新实例     Bitmap bitmap = new Bitmap(ThumbnailImageWidth, num,      PixelFormat.Format32bppArgb);     //从指定的 Image 对象创建新 Graphics 对象     Graphics graphics = Graphics.FromImage(bitmap);     //清除整个绘图面并以透明背景色填充     graphics.Clear(Color.Transparent);     graphics.SmoothingMode = SmoothingMode.HighQuality;     graphics.InterpolationMode = InterpolationMode.High;     //在指定位置并且按指定大小绘制 原图片 对象     graphics.DrawImage(image, new Rectangle(0, 0, ThumbnailImageWidth, num));     image.Dispose();     try     {      //将此 原图片 以指定格式并用指定的编解码参数保存到指定文件      SaveImage(bitmap, ThumbnailImagePath,       GetCodecInfo((string)htmimes[sExt]));     }     catch(System.Exception e)     {      throw e;     }    }    #endregion } }
[b]代码实例二 [/b]
[u]复制代码[/u] 代码如下:
using System; using System.Collections.Generic; using System.ComponentModel; using System.Data; using System.Drawing; using System.Linq; using System.Text; using System.Windows.Forms; using System.IO; using System.Threading; using System.Drawing.Imaging; /* Author : IT * Date: 2011-11-13 14:52:53 * Blog: www.chenpan.name */ namespace WaterImage { public partial class Form2 : Form { Image imgWeight; public Form2() { InitializeComponent(); } /// <summary> /// 从数据库中加载二进制图片 /// </summary> /// <param name="sender"></param> /// <param name="e"></param> private void button1_Click(object sender, EventArgs e) { string strSql = "Select Top 1 FileContent From Sys_FileSave"; Byte[] byteImage = new Byte[0]; byteImage = (Byte[])(DbHelperSQL.GetSingle(strSql)); MemoryStream stmBLOBData = new MemoryStream(byteImage); imgWeight = Image.FromStream(stmBLOBData); pictureBox1.Image = imgWeight; } /// <summary> /// 在原图片基础上加载文字水印 /// </summary> /// <param name="sender"></param> /// <param name="e"></param> private void button2_Click(object sender, EventArgs e) { Graphics GImage = Graphics.FromImage(imgWeight); addWatermarkText(GImage, "重量为60.00吨", "WM_BOTTOM_RIGHT", imgWeight.Width, imgWeight.Height); pictureBox1.Image = imgWeight; } /// <summary> /// 在原图片基础上加载图片水印 /// </summary> /// <param name="sender"></param> /// <param name="e"></param> private void button3_Click(object sender, EventArgs e) { Graphics GImage = Graphics.FromImage(imgWeight); addWatermarkImage(GImage, @"C:\Documents and Settings\Administrator\桌面\Mark.png", "WM_TOP_LEFT", imgWeight.Width, imgWeight.Height); pictureBox1.Image = imgWeight; } /// <summary> /// 生成图片缩略图 /// </summary> /// <param name="sender"></param> /// <param name="e"></param> private void button4_Click(object sender, EventArgs e) { GreateMiniImage(@"C:\Documents and Settings\Administrator\桌面\Source.jpg", @"C:\Documents and Settings\Administrator\桌面\Small.png", 100, 200); } /// <summary> /// 加水印文字 /// </summary> /// <param name="picture">imge 对象</param> /// <param name="_watermarkText">水印文字内容</param> /// <param name="_watermarkPosition">水印位置</param> /// <param name="_width">被加水印图片的宽</param> /// <param name="_height">被加水印图片的高</param> private void addWatermarkText(Graphics picture, string _watermarkText, string _watermarkPosition, int _width, int _height) { int[] sizes = new int[] { 16, 14, 12, 10, 8, 6, 4 }; Font crFont = null; SizeF crSize = new SizeF(); for (int i = 0; i < 7; i++) { crFont = new Font("arial", sizes[i], FontStyle.Bold); crSize = picture.MeasureString(_watermarkText, crFont); if ((ushort)crSize.Width < (ushort)_width) break; } float xpos = 0; float ypos = 0; switch (_watermarkPosition) { case "WM_TOP_LEFT": xpos = ((float)_width * (float).01) + (crSize.Width / 2); ypos = (float)_height * (float).01; break; case "WM_TOP_RIGHT": xpos = ((float)_width * (float).99) - (crSize.Width / 2); ypos = (float)_height * (float).01; break; case "WM_BOTTOM_RIGHT": xpos = ((float)_width * (float).99) - (crSize.Width / 2); ypos = ((float)_height * (float).99) - crSize.Height; break; case "WM_BOTTOM_LEFT": xpos = ((float)_width * (float).01) + (crSize.Width / 2); ypos = ((float)_height * (float).99) - crSize.Height; break; } StringFormat StrFormat = new StringFormat(); StrFormat.Alignment = StringAlignment.Center; SolidBrush semiTransBrush2 = new SolidBrush(Color.FromArgb(153, 0, 0, 0)); picture.DrawString(_watermarkText, crFont, semiTransBrush2, xpos + 1, ypos + 1, StrFormat); SolidBrush semiTransBrush = new SolidBrush(Color.FromArgb(153, 255, 255, 255)); picture.DrawString(_watermarkText, crFont, semiTransBrush, xpos, ypos, StrFormat); semiTransBrush2.Dispose(); semiTransBrush.Dispose(); } /// <summary> /// 加水印图片 /// </summary> /// <param name="picture">imge 对象</param> /// <param name="WaterMarkPicPath">水印图片的地址</param> /// <param name="_watermarkPosition">水印位置</param> /// <param name="_width">被加水印图片的宽</param> /// <param name="_height">被加水印图片的高</param> private void addWatermarkImage(Graphics picture, string WaterMarkPicPath, string _watermarkPosition, int _width, int _height) { Image watermark = new Bitmap(WaterMarkPicPath); ImageAttributes imageAttributes = new ImageAttributes(); ColorMap colorMap = new ColorMap(); colorMap.OldColor = Color.FromArgb(255, 0, 255, 0); colorMap.NewColor = Color.FromArgb(0, 0, 0, 0); ColorMap[] remapTable = { colorMap }; imageAttributes.SetRemapTable(remapTable, ColorAdjustType.Bitmap); float[][] colorMatrixElements = { new float[] {1.0f, 0.0f, 0.0f, 0.0f, 0.0f}, new float[] {0.0f, 1.0f, 0.0f, 0.0f, 0.0f}, new float[] {0.0f, 0.0f, 1.0f, 0.0f, 0.0f}, new float[] {0.0f, 0.0f, 0.0f, 0.3f, 0.0f}, new float[] {0.0f, 0.0f, 0.0f, 0.0f, 1.0f} }; ColorMatrix colorMatrix = new ColorMatrix(colorMatrixElements); imageAttributes.SetColorMatrix(colorMatrix, ColorMatrixFlag.Default, ColorAdjustType.Bitmap); int xpos = 0; int ypos = 0; int WatermarkWidth = 0; int WatermarkHeight = 0; double bl = 1d; //计算水印图片的比率 //取背景的1/4宽度来比较 if ((_width > watermark.Width * 4) && (_height > watermark.Height * 4)) { bl = 1; } else if ((_width > watermark.Width * 4) && (_height < watermark.Height * 4)) { bl = Convert.ToDouble(_height / 4) / Convert.ToDouble(watermark.Height); } else if ((_width < watermark.Width * 4) && (_height > watermark.Height * 4)) { bl = Convert.ToDouble(_width / 4) / Convert.ToDouble(watermark.Width); } else { if ((_width * watermark.Height) > (_height * watermark.Width)) { bl = Convert.ToDouble(_height / 4) / Convert.ToDouble(watermark.Height); } else { bl = Convert.ToDouble(_width / 4) / Convert.ToDouble(watermark.Width); } } WatermarkWidth = Convert.ToInt32(watermark.Width * bl); WatermarkHeight = Convert.ToInt32(watermark.Height * bl); switch (_watermarkPosition) { case "WM_TOP_LEFT": xpos = 10; ypos = 10; break; case "WM_TOP_RIGHT": xpos = _width - WatermarkWidth - 10; ypos = 10; break; case "WM_BOTTOM_RIGHT": xpos = _width - WatermarkWidth - 10; ypos = _height - WatermarkHeight - 10; break; case "WM_BOTTOM_LEFT": xpos = 10; ypos = _height - WatermarkHeight - 10; break; } picture.DrawImage(watermark, new Rectangle(xpos, ypos, WatermarkWidth, WatermarkHeight), 0, 0, watermark.Width, watermark.Height, GraphicsUnit.Pixel, imageAttributes); watermark.Dispose(); imageAttributes.Dispose(); } /// <summary> /// 生成缩略图 /// </summary> /// <param name="oldpath">原图片地址</param> /// <param name="newpath">新图片地址</param> /// <param name="tWidth">缩略图的宽</param> /// <param name="tHeight">缩略图的高</param> private void GreateMiniImage(string oldpath, string newpath, int tWidth, int tHeight) { try { System.Drawing.Image image = System.Drawing.Image.FromFile(oldpath); double bl = 1d; if ((image.Width <= image.Height) && (tWidth >= tHeight)) { bl = Convert.ToDouble(image.Height) / Convert.ToDouble(tHeight); } else if ((image.Width > image.Height) && (tWidth < tHeight)) { bl = Convert.ToDouble(image.Width) / Convert.ToDouble(tWidth); } else if ((image.Width <= image.Height) && (tWidth <= tHeight)) { if (image.Height / tHeight >= image.Width / tWidth) { bl = Convert.ToDouble(image.Width) / Convert.ToDouble(tWidth); } else { bl = Convert.ToDouble(image.Height) / Convert.ToDouble(tHeight); } } else { if (image.Height / tHeight >= image.Width / tWidth) { bl = Convert.ToDouble(image.Height) / Convert.ToDouble(tHeight); } else { bl = Convert.ToDouble(image.Width) / Convert.ToDouble(tWidth); } } Bitmap b = new Bitmap(image, Convert.ToInt32(image.Width / bl), Convert.ToInt32(image.Height / bl)); b.Save(newpath); b.Dispose(); image.Dispose(); } catch { } } } }
  • 全部评论(0)
联系客服
客服电话:
400-000-3129
微信版

扫一扫进微信版
返回顶部