zoukankan      html  css  js  c++  java
  • 网上搜集的一个比较实用的图片操作类

    namespace System.Images.ImagesHelper
    {
        /**//// <summary>
        ///ImgOperate 的摘要说明
        /// </summary>
        public class ImagesHelper
        {
            图片处理类构造方法#region 图片处理类构造方法
            /**//// <summary>
            /// 图片处理类构造方法
            /// </summary>
            public ImagesHelper()
            {
                //
                //TODO: 在此处添加构造函数逻辑
                //
            }
            #endregion
            用于缩小图片#region 用于缩小图片
            //************************************************************//
            //下面给出三个简单的方法,后面两个方法是扩展
            //************************************************************//
            /**//// <summary>
            ///用于缩小图片
            /// </summary>
            /// <param name="strOldPic">原始图片路径</param>
            /// <param name="strNewPic">新图片路径</param>
            /// <param name="intWidth">新图片宽度</param>
            /// <param name="intHeight">新图片高度</param>
            /// <param name="isDeleteOldPic">是否删除原始图片</param>
            public void ReducePic(string strOldPic, string strNewPic, int intWidth, int intHeight, bool isDeleteOldPic)
            {
                System.Drawing.Bitmap objPic, objNewPic;
                try
                {
                    objPic = new System.Drawing.Bitmap(strOldPic);
                    objNewPic = new System.Drawing.Bitmap(objPic, intWidth, intHeight);
                    objNewPic.Save(strNewPic);
                    objPic.Dispose();
                    objNewPic.Dispose();
                    if (isDeleteOldPic)
                    {
                        if (File.Exists(strOldPic))
                        {
                            File.Delete(strOldPic);
                        }
                    }
    
                }
                catch (Exception exp) { throw exp; }
                finally
                {
                    objPic = null;
                    objNewPic = null;
                }
            }
            /**//// <summary>
            /// 将图片缩放至指定类型指定值
            /// </summary>
            /// <param name="strOldPic">原始图片路径</param>
            /// <param name="strNewPic">新图片路径</param>
            /// <param name="intValue">指定值</param>
            /// <param name="type">缩放类型(W/w为指定宽度,H/h为指定高度)</param>
            /// <param name="isDeleteOldPic">是否删除原始图片</param>
            public  void ReducePic(string strOldPic, string strNewPic, int intValue, string type, bool isDeleteOldPic)
            {
                System.Drawing.Bitmap objPic, objNewPic;
                int intWidth = 0;
                int intHeight = 0;
                try
                {
                    objPic = new System.Drawing.Bitmap(strOldPic);
                    if (type == "W" || type == "w")
                    {
                        intWidth = intValue;
                        intHeight = Convert.ToInt32(((intWidth * 1.0) / (objPic.Width * 1.0)) * objPic.Height);
                    }
                    else if (type == "H" || type == "h")
                    {
                        intHeight = intValue;
                        intWidth = Convert.ToInt32(((intHeight * 1.0) / (objPic.Height * 1.0)) * objPic.Width);
                    }
                    else
                    {
                        throw new Exception("未指定图片缩放类型");
                    }
                    objNewPic = new System.Drawing.Bitmap(objPic, intWidth, intHeight);
                    objNewPic.Save(strNewPic);
                    objPic.Dispose();
                    objNewPic.Dispose();
                    if (isDeleteOldPic)
                    {
                        if (File.Exists(strOldPic))
                        {
                            File.Delete(strOldPic);
                        }
                    }
    
                }
                catch (Exception exp) { throw exp; }
                finally
                {
                    objPic = null;
                    objNewPic = null;
                }
            }
            /**//// <summary>
            /// 用于缩放图片
            /// </summary>
            /// <param name="strOldPic">原始图片路径</param>
            /// <param name="strNewPic">新图片路径</param>
            /// <param name="balance">缩放比例</param>
            /// <param name="isDeleteOldPic">是否删除原始图片</param>
            public  void ReducePic(string strOldPic, string strNewPic, double balance, bool isDeleteOldPic)
            {
                System.Drawing.Bitmap objPic, objNewPic;
                try
                {
                    objPic = new System.Drawing.Bitmap(strOldPic);
                    int intWidth = Convert.ToInt32((objPic.Width) * balance);
                    int intHeight = Convert.ToInt32((objPic.Height) * balance);
                    objNewPic = new System.Drawing.Bitmap(objPic, intWidth, intHeight);
                    objNewPic.Save(strNewPic);
                    objPic.Dispose();
                    objNewPic.Dispose();
                    if (isDeleteOldPic)
                    {
                        if (File.Exists(strOldPic))
                        {
                            File.Delete(strOldPic);
                        }
                    }
    
                }
                catch (Exception exp) { throw exp; }
                finally
                {
                    objPic = null;
                    objNewPic = null;
                }
            }
            /**//// <summary>
            /// 获取图片指定部分
            /// </summary>
            /// <param name="pPath">图片路径</param>
            /// <param name="pSavePath">保存路径</param>
            /// <param name="pPartStartPointX">目标图片开始绘制处的坐标X值(通常为)</param>
            /// <param name="pPartStartPointY">目标图片开始绘制处的坐标Y值(通常为)</param>
            /// <param name="pPartWidth">目标图片的宽度</param>
            /// <param name="pPartHeight">目标图片的高度</param>
            /// <param name="pOrigStartPointX">原始图片开始截取处的坐标X值</param>
            /// <param name="pOrigStartPointY">原始图片开始截取处的坐标Y值</param>
            public void ReducePic(string pPath, string pSavedPath, int pPartStartPointX, int pPartStartPointY, int pPartWidth, int pPartHeight, int pOrigStartPointX, int pOrigStartPointY)
            {
                System.Drawing.Image originalImg = System.Drawing.Image.FromFile(pPath);
                Bitmap partImg = new Bitmap(pPartWidth, pPartHeight);
                Graphics graphics = Graphics.FromImage(partImg);
                Rectangle destRect = new Rectangle(new Point(pPartStartPointX, pPartStartPointY), new Size(pPartWidth, pPartHeight));//目标位置
                Rectangle origRect = new Rectangle(new Point(pOrigStartPointX, pOrigStartPointY), new Size(pPartWidth, pPartHeight));//原图位置(默认从原图中截取的图片大小等于目标图片的大小)
                graphics.DrawImage(originalImg, destRect, origRect, GraphicsUnit.Pixel);
                partImg.Save(pSavedPath, ImageFormat.Jpeg);
            }
            #endregion
            添加水印文字#region 添加水印文字
            /**//// <summary>
            /// 为上传的图片添加水印文字
            /// </summary>
            /// <param name="Path">原始图片路径</param>
            /// <param name="Path_sy">水印图片路径</param>
            /// <param name="WaterText">水印文字</param>
            public  void AddWaterText(string Path, string Path_sy, string WaterText)
            {
                string addText = WaterText;
                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", 10);
                System.Drawing.Brush b = new System.Drawing.SolidBrush(System.Drawing.Color.LightSlateGray);
                g.DrawString(addText, f, b, image.Width - 100, image.Height - 20);
                g.Dispose();
                image.Save(Path_sy);
                image.Dispose();
            }
            #endregion
            为图片增加水印图片#region 为图片增加水印图片
            /**//// <summary>
            /// 在图片上生成图片水印
            /// </summary>
            /// <param name="Path">原服务器图片路径</param>
            /// <param name="Path_syp">生成的带图片水印的图片路径</param>
            /// <param name="Path_sypf">水印图片路径</param>
            public  void AddWaterPic(string Path, string Path_syp, string Path_sypf)
            {
                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(Path_syp);
                image.Dispose();
            }
            #endregion
            获取图片的高度和宽度#region 获取图片的高度和宽度
            /**//// <summary>
            /// 获取图片的高度和宽度
            /// </summary>
            /// <param name="imgurl">img图片的地址</param>
            /// <returns></returns>
            public int[] GetImgWidth(string imgurl)
            {
                System.Drawing.Image image;
                image = System.Drawing.Image.FromFile(imgurl);
                int imgwidth = image.Width;
                int imgHeight = image.Height;
                int[] img = { imgwidth, imgHeight };
                return img;
            }
            #endregion
            压缩图片#region 压缩图片
            /**//// <summary>
            /// 对图片进行压缩
            /// </summary>
            /// <param name="filePath">原始图片路径</param>
            /// <param name="filePath_ystp">压缩后的图片路径</param>
            public void DensityPic(string filePath, string filePath_ystp) //压缩图片 
            {
                Bitmap bmp = new Bitmap(filePath);
                //ImageCoderInfo 
                ImageCodecInfo ici = null;
                //Encoder 
                System.Drawing.Imaging.Encoder ecd = null;
                //EncoderParameter 
                EncoderParameter ept = null;
                //EncoderParameters 
                EncoderParameters eptS = null;
                try
                {
                    ici = this.getImageCoderInfo("image/jpeg");
                    ecd = System.Drawing.Imaging.Encoder.Quality;
                    eptS = new EncoderParameters(1);
                    ept = new EncoderParameter(ecd, 10L);
                    eptS.Param[0] = ept;
                    bmp.Save(filePath_ystp, ici, eptS);
                } 
    
    
                catch (Exception ex)
                {
                    throw new Exception(ex.Message);
                }
                finally
                {
                    bmp.Dispose();
                    ept.Dispose();
                    eptS.Dispose();
                }
            }
            private ImageCodecInfo getImageCoderInfo(string coderType)// 获取图片编码类型信息 
            {
                ImageCodecInfo[] iciS = ImageCodecInfo.GetImageEncoders();
                ImageCodecInfo retIci = null;
                foreach (ImageCodecInfo ici in iciS)
                {
                    if (ici.MimeType.Equals(coderType))
                        retIci = ici;
                }
    
                return retIci;
            }
            #endregion
            获取图片的指定部分#region 获取图片的指定部分
            /**//**/
            /**//// <summary>
            /// 获取图片指定部分
            /// </summary>
            /// <param name="pPath">图片路径</param>
            /// <param name="pSavePath">保存路径</param>
            /// <param name="pPartStartPointX">目标图片开始绘制处的坐标X值(通常为)</param>
            /// <param name="pPartStartPointY">目标图片开始绘制处的坐标Y值(通常为)</param>
            /// <param name="pPartWidth">目标图片的宽度</param>
            /// <param name="pPartHeight">目标图片的高度</param>
            /// <param name="pOrigStartPointX">原始图片开始截取处的坐标X值</param>
            /// <param name="pOrigStartPointY">原始图片开始截取处的坐标Y值</param>
            /// <param name="pFormat">保存格式,通常可以是jpeg</param>
            public void GetPart(string pPath, string pSavedPath, int pPartStartPointX, int pPartStartPointY, int pPartWidth, int pPartHeight, int pOrigStartPointX, int pOrigStartPointY)
            {
                string normalJpgPath = pSavedPath;
    
                using (System.Drawing.Image originalImg = System.Drawing.Image.FromFile(pPath))
                {
                    Bitmap partImg = new Bitmap(pPartWidth, pPartHeight);
                    Graphics graphics = Graphics.FromImage(partImg);
                    Rectangle destRect = new Rectangle(new Point(pPartStartPointX, pPartStartPointY), new Size(pPartWidth, pPartHeight));//目标位置
                    Rectangle origRect = new Rectangle(new Point(pOrigStartPointX, pOrigStartPointY), new Size(pPartWidth, pPartHeight));//原图位置(默认从原图中截取的图片大小等于目标图片的大小)
    
    
                    /**////文字水印  
                    System.Drawing.Graphics G = System.Drawing.Graphics.FromImage(partImg);
                    System.Drawing.Font f = new Font("Lucida Grande", 6);
                    System.Drawing.Brush b = new SolidBrush(Color.Gray);
                    G.Clear(Color.White);
                    graphics.DrawImage(originalImg, destRect, origRect, GraphicsUnit.Pixel);
                    G.DrawString("TianTang.Com", f, b, 0, 0);
                    G.Dispose();
    
                    originalImg.Dispose();
                    if (File.Exists(normalJpgPath))
                    {
                        File.SetAttributes(normalJpgPath, FileAttributes.Normal);
                        File.Delete(normalJpgPath);
                    }
                    partImg.Save(normalJpgPath, ImageFormat.Jpeg);
                }
            }
            #endregion
            获取图片的指定部分#region 获取图片的指定部分
            /**//**/
            /**//// <summary>
            /// 获取按比例缩放的图片指定部分
            /// </summary>
            /// <param name="pPath">图片路径</param>
            /// <param name="pSavePath">保存路径</param>
            /// <param name="pPartStartPointX">目标图片开始绘制处的坐标X值(通常为)</param>
            /// <param name="pPartStartPointY">目标图片开始绘制处的坐标Y值(通常为)</param>
            /// <param name="pPartWidth">目标图片的宽度</param>
            /// <param name="pPartHeight">目标图片的高度</param>
            /// <param name="pOrigStartPointX">原始图片开始截取处的坐标X值</param>
            /// <param name="pOrigStartPointY">原始图片开始截取处的坐标Y值</param>
            /// <param name="imageWidth">缩放后的宽度</param>
            /// <param name="imageHeight">缩放后的高度</param>
            public void GetPart(string pPath, string pSavedPath, int pPartStartPointX, int pPartStartPointY, int pPartWidth, int pPartHeight, int pOrigStartPointX, int pOrigStartPointY, int imageWidth, int imageHeight)
            {
                string normalJpgPath = pSavedPath;
                using (System.Drawing.Image originalImg = System.Drawing.Image.FromFile(pPath))
                {
                    if (originalImg.Width == imageWidth && originalImg.Height == imageHeight)
                    {
                        GetPart(pPath, pSavedPath, pPartStartPointX, pPartStartPointY, pPartWidth, pPartHeight, pOrigStartPointX, pOrigStartPointY);
                        return;
                    }
    
                    System.Drawing.Image.GetThumbnailImageAbort callback = new System.Drawing.Image.GetThumbnailImageAbort(ThumbnailCallback);
                    System.Drawing.Image zoomImg = originalImg.GetThumbnailImage(imageWidth, imageHeight, callback, IntPtr.Zero);//缩放
                    Bitmap partImg = new Bitmap(pPartWidth, pPartHeight);
    
                    Graphics graphics = Graphics.FromImage(partImg);
                    Rectangle destRect = new Rectangle(new Point(pPartStartPointX, pPartStartPointY), new Size(pPartWidth, pPartHeight));//目标位置
                    Rectangle origRect = new Rectangle(new Point(pOrigStartPointX, pOrigStartPointY), new Size(pPartWidth, pPartHeight));//原图位置(默认从原图中截取的图片大小等于目标图片的大小)
    
                    /**////文字水印  
                    System.Drawing.Graphics G = System.Drawing.Graphics.FromImage(partImg);
                    System.Drawing.Font f = new Font("Lucida Grande", 6);
                    System.Drawing.Brush b = new SolidBrush(Color.Gray);
                    G.Clear(Color.White);
    
                    graphics.DrawImage(zoomImg, destRect, origRect, GraphicsUnit.Pixel);
                    G.DrawString("TianTang.Com", f, b, 0, 0);
                    G.Dispose();
    
                    originalImg.Dispose();
                    if (File.Exists(normalJpgPath))
                    {
                        File.SetAttributes(normalJpgPath, FileAttributes.Normal);
                        File.Delete(normalJpgPath);
                    }
                    partImg.Save(normalJpgPath, ImageFormat.Jpeg);
                }
            }
            public bool ThumbnailCallback()
            {
                return false;
            }
            #endregion
        }
    }
    
    

  • 相关阅读:
    给JavaScript新手的24条实用建议
    javascript之HTML(select option)详解
    PHP的正则处理函数总结分析
    多级关联菜单:
    理解json两种结构:数组和对象
    dede标签学习笔记(一)
    Jewel_M PHP定时执行任务的实现
    网站刷新器
    PHP_SELF、 SCRIPT_NAME、 REQUEST_URI区别
    RemoveXSS()
  • 原文地址:https://www.cnblogs.com/MrWby/p/1746726.html
Copyright © 2011-2022 走看看