zoukankan      html  css  js  c++  java
  • C#图片加水印图片和文字

    代码
    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;

    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"100200);
            }

            
    /// <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[] { 16141210864 };
                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(153000));
                picture.DrawString(_watermarkText, crFont, semiTransBrush2, xpos 
    + 1, ypos + 1, StrFormat);

                SolidBrush semiTransBrush 
    = new SolidBrush(Color.FromArgb(153255255255));
                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(25502550);
                colorMap.NewColor 
    = Color.FromArgb(0000);
                ColorMap[] remapTable 
    = { colorMap };

                imageAttributes.SetRemapTable(remapTable, ColorAdjustType.Bitmap);

                
    float[][] colorMatrixElements = {
                                                    
    new float[] {1.0f,  0.0f,  0.0f,  0.0f0.0f},
                                                    
    new float[] {0.0f,  1.0f,  0.0f,  0.0f0.0f},
                                                    
    new float[] {0.0f,  0.0f,  1.0f,  0.0f0.0f},
                                                    
    new float[] {0.0f,  0.0f,  0.0f,  0.3f0.0f},
                                                    
    new float[] {0.0f,  0.0f,  0.0f,  0.0f1.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), 00, 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
                {


                }

            }
        }
    }


  • 相关阅读:
    BadUSB 利用
    java 将函数作为参数传递
    odoo12 修行提升篇之 常用的高阶函数 (二)
    odoo12 修行提升篇之 异步定时任务 (一)
    odoo12 修行基础篇之 利用kanban做分析 点击跳转分析模型列表 (九)
    odoo12 修行基础篇之 kanban (八)
    odoo12 修行基础篇之 记录批处理 (七)
    odoo12 修行基础篇之 列表的筛选和分组 (六)
    odoo12 修行基础篇之 添加记录编码 (五)
    odoo12 修行基础篇之 添加工作流和操作记录 (四)
  • 原文地址:https://www.cnblogs.com/zhangpengshou/p/1763465.html
Copyright © 2011-2022 走看看