.net给图片增加水印和生成图片缩略图

简介: .net给图片增加水印和生成图片缩略图

找了半天废了点功夫,记录一下,同时也为后来的兄弟指引一下,这种现成的东西别浪费时间了。

图片加水印

using System;
using System.Collections.Generic;
using System.Drawing.Imaging;
using System.Drawing;
using System.Text;
namespace Yadinghao.Framework.Utils
{
    public class ImageWaterMarkUtils
    {
        /// <summary>
        /// 添加水印
        /// </summary>
        /// <param name="imgPath">原图片地址</param>
        /// <param name="sImgPath">加水印厚图片地址</param>
        /// <param name="text">文字</param>
        /// <param name="size">大小-30</param>
        /// <param name="location">012左中右</param>
        /// <param name="c">颜色</param>
        /// <returns>成功,失败 </returns>
        public static bool AddWaterMarkText(string imgPath, string sImgPath, string text, int size, int location, Color c)
        {
            using (Image image = Image.FromFile(imgPath))
            {
                try
                {
                    Bitmap bitmap = new Bitmap(image);
                    int width = bitmap.Width, height = bitmap.Height;
                    Graphics g = Graphics.FromImage(bitmap);
                    g.DrawImage(bitmap, 0, 0);
                    g.InterpolationMode = System.Drawing.Drawing2D.InterpolationMode.High;
                    g.SmoothingMode = System.Drawing.Drawing2D.SmoothingMode.HighQuality;
                    g.DrawImage(image, new Rectangle(0, 0, width, height), 0, 0, width, height, GraphicsUnit.Pixel);
                    Font crFont = new Font("微软雅黑", size, FontStyle.Bold);
                    SizeF crSize = new SizeF();
                    crSize = g.MeasureString(text, crFont);//文字大小
                    //背景位置(去掉了. 如果想用可以自己调一调 位置.)
                    //graphics.FillRectangle(new SolidBrush(Color.FromArgb(200, 255, 255, 255)), (width - crSize.Width) / 2, (height - crSize.Height) / 2, crSize.Width, crSize.Height);
                    SolidBrush semiTransBrush = new SolidBrush(Color.FromArgb(120, c.R, c.G, c.B));
                    //将原点移动 到图片中点
                    if (location == 0)
                    {
                        g.TranslateTransform(10, 10);
                    }
                    else if (location == 1)
                    {
                        g.TranslateTransform((width - crSize.Width) / 2, 10);
                    }
                    else
                    {
                        g.TranslateTransform(width - crSize.Width - 10, 10);
                    }
                    g.DrawString(text, crFont, semiTransBrush, new PointF(0, 0));
                    //保存文件
                    bitmap.Save(sImgPath, ImageFormat.Jpeg);
                    return true;
                }
                catch (Exception e)
                {
                    return false;
                }
            }
        }
    }
}


调用

 ImageWaterMarkUtils.AddWaterMarkText("D:\Yadinghao\Image\js.jpg", "D:\Yadinghao\Image\TT\js.jpg","亚丁号",18,2,Color.Red);

生成图片缩略图:

 

public static void ImageThumb(string originalImagePath, string thumbnailPath, int width, int height, ThumbnailMode mode)
        {
            System.Drawing.Image img_OriginalImage = null;
            ImageFormat tFormat = null;
            try
            {
                img_OriginalImage = (Bitmap)System.Drawing.Image.FromFile(originalImagePath);
                tFormat = img_OriginalImage.RawFormat;
            }
            catch (Exception ex)
            {
                if (img_OriginalImage != null)
                {
                    img_OriginalImage.Dispose();
                }
                throw new Exception("压缩图片:"   originalImagePath   "失败!
"   ex.Message);
            }
            int i_ToWidth = width;
            int i_ToHeight = height;
            int x = 0;
            int y = 0;
            int i_OriginalWidth = img_OriginalImage.Width;
            int i_OriginalHeight = img_OriginalImage.Height;
            switch (mode)
            {
                case ThumbnailMode.Width:
                    i_ToHeight = img_OriginalImage.Height * width / img_OriginalImage.Width;
                    break;
                case ThumbnailMode.Height:
                    i_ToWidth = img_OriginalImage.Width * height / img_OriginalImage.Height;
                    break;
                case ThumbnailMode.Cut:
                    if ((double)img_OriginalImage.Width / (double)img_OriginalImage.Height > (double)i_ToWidth / (double)i_ToHeight)
                    {
                        i_OriginalHeight = img_OriginalImage.Height;
                        i_OriginalWidth = img_OriginalImage.Height * i_ToWidth / i_ToHeight;
                        y = 0;
                        x = (img_OriginalImage.Width - i_OriginalWidth) / 2;
                    }
                    else
                    {
                        i_OriginalWidth = img_OriginalImage.Width;
                        i_OriginalHeight = img_OriginalImage.Width * height / i_ToWidth;
                        x = 0;
                        y = (img_OriginalImage.Height - i_OriginalHeight) / 2;
                    }
                    break;
                default:
                    break;
            }
            //新建一个BMP图片
            System.Drawing.Image img_BitMap = new System.Drawing.Bitmap(i_ToWidth, i_ToHeight);
            //新建一个画板
            System.Drawing.Graphics gp = Graphics.FromImage(img_BitMap);
            //设置高质量插值法
            gp.InterpolationMode = System.Drawing.Drawing2D.InterpolationMode.HighQualityBicubic;
            //设置高质量、低速度呈现平滑程度
            gp.SmoothingMode = System.Drawing.Drawing2D.SmoothingMode.HighQuality;
            gp.CompositingQuality = CompositingQuality.HighQuality;
            //清空画布并以透明背景色填充
            gp.Clear(Color.Transparent);
            //指定位置并按大小绘制原图片的指定部分
            gp.DrawImage(img_OriginalImage, new Rectangle(0, 0, i_ToWidth, i_ToHeight), new Rectangle(x, y, i_OriginalWidth, i_OriginalHeight), GraphicsUnit.Pixel);
            try
            {
                EncoderParameters ep = new EncoderParameters();
                long[] qy = new long[1];
                qy[0] = 100;//设置压缩的比例1-100  
                EncoderParameter eParam = new EncoderParameter(System.Drawing.Imaging.Encoder.Quality, qy);
                ep.Param[0] = eParam;
                ImageCodecInfo[] arrayICI = ImageCodecInfo.GetImageEncoders();
                ImageCodecInfo jpegICIinfo = null;
                for (int i = 0; i < arrayICI.Length; i  )
                {
                    if (arrayICI[i].FormatDescription.Equals("JPEG"))
                    {
                        jpegICIinfo = arrayICI[i];
                        break;
                    }
                }
                if (jpegICIinfo != null && Equals(tFormat, ImageFormat.Jpeg))
                {
                    //以JPG格式保存图片
                    img_BitMap.Save(thumbnailPath, jpegICIinfo, ep);
                    //Const.iSuccessCount  ;
                }
                else
                {
                    img_BitMap.Save(thumbnailPath, tFormat);
                    //Const.iSuccessCount  ;
                }
            }
            catch (Exception ex)
            {
                Console.WriteLine("复制图片:"   originalImagePath   "失败!
"   ex.Message   ex.StackTrace);
            }
            finally
            {
                if (img_OriginalImage != null)
                {
                    img_OriginalImage.Dispose();
                }
                if (img_BitMap != null)
                {
                    img_BitMap.Dispose();
                }
                if (gp != null)
                {
                    gp.Dispose();
                }
                //GC.Collect();
            }
        }
        public enum ThumbnailMode
        {
            /// <summary>
            /// 指定宽度,高度按照比例缩放
            /// </summary>
            Width = 0,
            /// <summary>
            /// 指定高度,宽度按照比例缩放
            /// </summary>
            Height = 1,
            /// <summary>
            /// 按照指定的高度和宽度剪裁
            /// </summary>
            Cut = 2,
            /// <summary>
            /// 指定宽度,高度按照比例缩放
            /// </summary>
            None = 3
        }

调用:

ImageThumbUtils.ImageThumb("D:\Yadinghao\Image\apk.jpg", "D:\Yadinghao\Image\TT\apk.jpg", 220, 150, ImageThumbUtils.ThumbnailMode.Cut);


好了大家直接使用就可以了。

目录
相关文章
|
测试技术 C# Windows
C# WPF 显示图片和视频显示 EmuguCv、AForge.Net测试
原文:C# WPF 显示图片和视频显示 EmuguCv、AForge.Net测试 WPF 没有用到 PictureBox, 而是用Image代替. 下面我试着加载显示一个图片 。 XAML CS Attempt 1: ImageMy_Image=newImage(Openfile.
1767 0
|
9月前
|
API
.NET指定图片地址下载并转换Base64字符串
.NET指定图片地址下载并转换Base64字符串
|
安全 数据安全/隐私保护
Glide显示不出图片,监听报javax.net.ssl.SSLHandshakeException: java.security.cert.CertPathValidatorException:
Glide框架是当前比较流行的图片加载框架,使用起来也很简单,肯定有人在使用的时候加载不出图片的,情况有多种,下面讲一下加载不出来捕获到的Exception:javax.net.ssl.SSLHandshakeException: java.security.cert.CertPathValidatorException: 。出现这种情况基本上都是加载https出现的
649 0
Glide显示不出图片,监听报javax.net.ssl.SSLHandshakeException: java.security.cert.CertPathValidatorException:
|
C#
C#/VB.NET 操作Word批注(二)——如何插入图片、读取、回复Word批注内容
序 在前面的文章C# 如何插入、修改、删除Word批注一文中介绍了如何操作Word批注的一些方法,在本篇文章中继续介绍操作Word批注的方法。分以下三种情况来介绍: 1. 插入图片到Word批注 2. 读取Word批注 3.
1458 0
|
数据安全/隐私保护 存储
.NET 图片解密为BASE64
#region 图片加密          ///           /// 加密本地文件          ///           /// 读取文件的路径          /// 要输出的文件路径          /// 密钥          ///           ...
853 0
|
Web App开发 C#
C# .NET 根据Url链接保存Image图片到本地磁盘
原文:C# .NET 根据Url链接保存Image图片到本地磁盘 根据一个Image的Url链接可以在浏览器中显示一个图片,如果要通过代码将图片保存在本地磁盘可以通过以下方式: 1、首先获取图片的二进制数组。
2427 0
|
Shell C# 图形学
.net 图片无损压缩
命名空间: using System.Drawing.Imaging; using System.Drawing; using System.Drawing.Drawing2D; #region GetPicThumbnail /// /// 无损压缩图片 ...
1463 0