zoukankan      html  css  js  c++  java
  • IO帮助类

    using System;
    using System.IO;
    using System.Web;
    using System.Drawing;
    using System.Drawing.Imaging;
    using System.Drawing.Drawing2D;
    using System.Xml.Serialization;
    
    namespace ZMM.Core
    {
        /// <summary>
        /// IO帮助类
        /// </summary>
        public class IOHelper
        {
            //是否已经加载了JPEG编码解码器
            private static bool _isloadjpegcodec = false;
            //当前系统安装的JPEG编码解码器
            private static ImageCodecInfo _jpegcodec = null;
    
            /// <summary>
            /// 获得文件物理路径
            /// </summary>
            /// <returns></returns>
            public static string GetMapPath(string path)
            {
                if (HttpContext.Current != null)
                {
                    return HttpContext.Current.Server.MapPath(path);
                }
                else
                {
                    return System.Web.Hosting.HostingEnvironment.MapPath(path);
                }
            }
    
            #region  序列化
    
            /// <summary>
            /// XML序列化
            /// </summary>
            /// <param name="obj">序列对象</param>
            /// <param name="filePath">XML文件路径</param>
            /// <returns>是否成功</returns>
            public static bool SerializeToXml(object obj, string filePath)
            {
                bool result = false;
    
                FileStream fs = null;
                try
                {
                    fs = new FileStream(filePath, FileMode.Create, FileAccess.Write, FileShare.ReadWrite);
                    XmlSerializer serializer = new XmlSerializer(obj.GetType());
                    serializer.Serialize(fs, obj);
                    result = true;
                }
                catch (Exception ex)
                {
                    throw ex;
                }
                finally
                {
                    if (fs != null)
                        fs.Close();
                }
                return result;
    
            }
    
            /// <summary>
            /// XML反序列化
            /// </summary>
            /// <param name="type">目标类型(Type类型)</param>
            /// <param name="filePath">XML文件路径</param>
            /// <returns>序列对象</returns>
            public static object DeserializeFromXML(Type type, string filePath)
            {
                FileStream fs = null;
                try
                {
                    fs = new FileStream(filePath, FileMode.Open, FileAccess.Read, FileShare.ReadWrite);
                    XmlSerializer serializer = new XmlSerializer(type);
                    return serializer.Deserialize(fs);
                }
                catch (Exception ex)
                {
                    throw ex;
                }
                finally
                {
                    if (fs != null)
                        fs.Close();
                }
            }
    
            #endregion
    
            #region  水印,缩略图
    
            /// <summary>
            /// 获得当前系统安装的JPEG编码解码器
            /// </summary>
            /// <returns></returns>
            public static ImageCodecInfo GetJPEGCodec()
            {
                if (_isloadjpegcodec == true)
                    return _jpegcodec;
    
                ImageCodecInfo[] codecsList = ImageCodecInfo.GetImageEncoders();
                foreach (ImageCodecInfo codec in codecsList)
                {
                    if (codec.MimeType.IndexOf("jpeg") > -1)
                    {
                        _jpegcodec = codec;
                        break;
                    }
    
                }
                _isloadjpegcodec = true;
                return _jpegcodec;
            }
    
            /// <summary>
            /// 生成缩略图
            /// </summary>
            /// <param name="imagePath">图片路径</param>
            /// <param name="thumbPath">缩略图路径</param>
            /// <param name="width">缩略图宽度</param>
            /// <param name="height">缩略图高度</param>
            /// <param name="mode">生成缩略图的方式</param>   
            public static void GenerateThumb(string imagePath, string thumbPath, int width, int height, string mode)
            {
                Image image = Image.FromFile(imagePath);
    
                string extension = imagePath.Substring(imagePath.LastIndexOf(".")).ToLower();
                ImageFormat imageFormat = null;
                switch (extension)
                {
                    case ".jpg":
                    case ".jpeg":
                        imageFormat = ImageFormat.Jpeg;
                        break;
                    case ".bmp":
                        imageFormat = ImageFormat.Bmp;
                        break;
                    case ".png":
                        imageFormat = ImageFormat.Png;
                        break;
                    case ".gif":
                        imageFormat = ImageFormat.Gif;
                        break;
                    default:
                        imageFormat = ImageFormat.Jpeg;
                        break;
                }
    
                int toWidth = width > 0 ? width : image.Width;
                int toHeight = height > 0 ? height : image.Height;
    
                int x = 0;
                int y = 0;
                int ow = image.Width;
                int oh = image.Height;
    
                switch (mode)
                {
                    case "HW"://指定高宽缩放(可能变形)           
                        break;
                    case "W"://指定宽,高按比例             
                        toHeight = image.Height * width / image.Width;
                        break;
                    case "H"://指定高,宽按比例
                        toWidth = image.Width * height / image.Height;
                        break;
                    case "Cut"://指定高宽裁减(不变形)           
                        if ((double)image.Width / (double)image.Height > (double)toWidth / (double)toHeight)
                        {
                            oh = image.Height;
                            ow = image.Height * toWidth / toHeight;
                            y = 0;
                            x = (image.Width - ow) / 2;
                        }
                        else
                        {
                            ow = image.Width;
                            oh = image.Width * height / toWidth;
                            x = 0;
                            y = (image.Height - oh) / 2;
                        }
                        break;
                    default:
                        break;
                }
    
                //新建一个bmp
                Image bitmap = new Bitmap(toWidth, toHeight);
    
                //新建一个画板
                Graphics g = Graphics.FromImage(bitmap);
    
                //设置高质量插值法
                g.InterpolationMode = InterpolationMode.High;
    
                //设置高质量,低速度呈现平滑程度
                g.SmoothingMode = SmoothingMode.HighQuality;
    
                //清空画布并以透明背景色填充
                g.Clear(Color.Transparent);
    
                //在指定位置并且按指定大小绘制原图片的指定部分
                g.DrawImage(image,
                            new Rectangle(0, 0, toWidth, toHeight),
                            new Rectangle(x, y, ow, oh),
                            GraphicsUnit.Pixel);
    
                try
                {
                    bitmap.Save(thumbPath, imageFormat);
                }
                catch (Exception ex)
                {
                    throw ex;
                }
                finally
                {
                    if (g != null)
                        g.Dispose();
                    if (bitmap != null)
                        bitmap.Dispose();
                    if (image != null)
                        image.Dispose();
                }
            }
    
            /// <summary>
            /// 生成图片水印
            /// </summary>
            /// <param name="originalPath">源图路径</param>
            /// <param name="watermarkPath">水印图片路径</param>
            /// <param name="targetPath">保存路径</param>
            /// <param name="position">位置</param>
            /// <param name="opacity">透明度</param>
            /// <param name="quality">质量</param>
            public static void GenerateImageWatermark(string originalPath, string watermarkPath, string targetPath, int position, int opacity, int quality)
            {
                Image originalImage = null;
                Image watermarkImage = null;
                //图片属性
                ImageAttributes attributes = null;
                //画板
                Graphics g = null;
                try
                {
    
                    originalImage = Image.FromFile(originalPath);
                    watermarkImage = new Bitmap(watermarkPath);
    
                    if (watermarkImage.Height >= originalImage.Height || watermarkImage.Width >= originalImage.Width)
                    {
                        originalImage.Save(targetPath);
                        return;
                    }
    
                    if (quality < 0 || quality > 100)
                        quality = 80;
    
                    //水印透明度
                    float iii;
                    if (opacity > 0 && opacity <= 10)
                        iii = (float)(opacity / 10.0F);
                    else
                        iii = 0.5F;
    
                    //水印位置
                    int x = 0;
                    int y = 0;
                    switch (position)
                    {
                        case 1:
                            x = (int)(originalImage.Width * (float).01);
                            y = (int)(originalImage.Height * (float).01);
                            break;
                        case 2:
                            x = (int)((originalImage.Width * (float).50) - (watermarkImage.Width / 2));
                            y = (int)(originalImage.Height * (float).01);
                            break;
                        case 3:
                            x = (int)((originalImage.Width * (float).99) - (watermarkImage.Width));
                            y = (int)(originalImage.Height * (float).01);
                            break;
                        case 4:
                            x = (int)(originalImage.Width * (float).01);
                            y = (int)((originalImage.Height * (float).50) - (watermarkImage.Height / 2));
                            break;
                        case 5:
                            x = (int)((originalImage.Width * (float).50) - (watermarkImage.Width / 2));
                            y = (int)((originalImage.Height * (float).50) - (watermarkImage.Height / 2));
                            break;
                        case 6:
                            x = (int)((originalImage.Width * (float).99) - (watermarkImage.Width));
                            y = (int)((originalImage.Height * (float).50) - (watermarkImage.Height / 2));
                            break;
                        case 7:
                            x = (int)(originalImage.Width * (float).01);
                            y = (int)((originalImage.Height * (float).99) - watermarkImage.Height);
                            break;
                        case 8:
                            x = (int)((originalImage.Width * (float).50) - (watermarkImage.Width / 2));
                            y = (int)((originalImage.Height * (float).99) - watermarkImage.Height);
                            break;
                        case 9:
                            x = (int)((originalImage.Width * (float).99) - (watermarkImage.Width));
                            y = (int)((originalImage.Height * (float).99) - watermarkImage.Height);
                            break;
                    }
    
                    //颜色映射表
                    ColorMap colorMap = new ColorMap();
                    colorMap.OldColor = Color.FromArgb(255, 0, 255, 0);
                    colorMap.NewColor = Color.FromArgb(0, 0, 0, 0);
                    ColorMap[] newColorMap = { colorMap };
    
                    //颜色变换矩阵,iii是设置透明度的范围0到1中的单精度类型
                    float[][] newColorMatrix ={ 
                                                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,  iii, 0.0f},
                                                new float[] {0.0f,  0.0f,  0.0f,  0.0f, 1.0f}
                                               };
                    //定义一个 5 x 5 矩阵
                    ColorMatrix matrix = new ColorMatrix(newColorMatrix);
    
                    //图片属性
                    attributes = new ImageAttributes();
                    attributes.SetRemapTable(newColorMap, ColorAdjustType.Bitmap);
                    attributes.SetColorMatrix(matrix, ColorMatrixFlag.Default, ColorAdjustType.Bitmap);
    
                    //画板
                    g = Graphics.FromImage(originalImage);
                    //绘制水印
                    g.DrawImage(watermarkImage, new Rectangle(x, y, watermarkImage.Width, watermarkImage.Height), 0, 0, watermarkImage.Width, watermarkImage.Height, GraphicsUnit.Pixel, attributes);
                    //保存图片
                    EncoderParameters encoderParams = new EncoderParameters();
                    encoderParams.Param[0] = new EncoderParameter(Encoder.Quality, new long[] { quality });
                    if (GetJPEGCodec() != null)
                        originalImage.Save(targetPath, _jpegcodec, encoderParams);
                    else
                        originalImage.Save(targetPath);
                }
                catch (Exception ex)
                {
                    throw ex;
                }
                finally
                {
                    if (g != null)
                        g.Dispose();
                    if (attributes != null)
                        attributes.Dispose();
                    if (watermarkImage != null)
                        watermarkImage.Dispose();
                    if (originalImage != null)
                        originalImage.Dispose();
                }
            }
    
            /// <summary>
            /// 生成文字水印
            /// </summary>
            /// <param name="originalPath">源图路径</param>
            /// <param name="targetPath">保存路径</param>
            /// <param name="text">水印文字</param>
            /// <param name="textSize">文字大小</param>
            /// <param name="textFont">文字字体</param>
            /// <param name="position">位置</param>
            /// <param name="quality">质量</param>
            public static void GenerateTextWatermark(string originalPath, string targetPath, string text, int textSize, string textFont, int position, int quality)
            {
                Image originalImage = null;
                //画板
                Graphics g = null;
                try
                {
                    originalImage = Image.FromFile(originalPath);
                    //画板
                    g = Graphics.FromImage(originalImage);
                    if (quality < 0 || quality > 100)
                        quality = 80;
    
                    Font font = new Font(textFont, textSize, FontStyle.Regular, GraphicsUnit.Pixel);
                    SizeF sizePair = g.MeasureString(text, font);
    
                    float x = 0;
                    float y = 0;
    
                    switch (position)
                    {
                        case 1:
                            x = (float)originalImage.Width * (float).01;
                            y = (float)originalImage.Height * (float).01;
                            break;
                        case 2:
                            x = ((float)originalImage.Width * (float).50) - (sizePair.Width / 2);
                            y = (float)originalImage.Height * (float).01;
                            break;
                        case 3:
                            x = ((float)originalImage.Width * (float).99) - sizePair.Width;
                            y = (float)originalImage.Height * (float).01;
                            break;
                        case 4:
                            x = (float)originalImage.Width * (float).01;
                            y = ((float)originalImage.Height * (float).50) - (sizePair.Height / 2);
                            break;
                        case 5:
                            x = ((float)originalImage.Width * (float).50) - (sizePair.Width / 2);
                            y = ((float)originalImage.Height * (float).50) - (sizePair.Height / 2);
                            break;
                        case 6:
                            x = ((float)originalImage.Width * (float).99) - sizePair.Width;
                            y = ((float)originalImage.Height * (float).50) - (sizePair.Height / 2);
                            break;
                        case 7:
                            x = (float)originalImage.Width * (float).01;
                            y = ((float)originalImage.Height * (float).99) - sizePair.Height;
                            break;
                        case 8:
                            x = ((float)originalImage.Width * (float).50) - (sizePair.Width / 2);
                            y = ((float)originalImage.Height * (float).99) - sizePair.Height;
                            break;
                        case 9:
                            x = ((float)originalImage.Width * (float).99) - sizePair.Width;
                            y = ((float)originalImage.Height * (float).99) - sizePair.Height;
                            break;
                    }
    
                    g.DrawString(text, font, new SolidBrush(Color.White), x + 1, y + 1);
                    g.DrawString(text, font, new SolidBrush(Color.Black), x, y);
    
                    //保存图片
                    EncoderParameters encoderParams = new EncoderParameters();
                    encoderParams.Param[0] = new EncoderParameter(Encoder.Quality, new long[] { quality });
                    if (GetJPEGCodec() != null)
                        originalImage.Save(targetPath, _jpegcodec, encoderParams);
                    else
                        originalImage.Save(targetPath);
                }
                catch (Exception ex)
                {
                    throw ex;
                }
                finally
                {
                    if (g != null)
                        g.Dispose();
                    if (originalImage != null)
                        originalImage.Dispose();
                }
            }
    
            #endregion
        }
    }
  • 相关阅读:
    IOSUITextField类
    IOSUITableView设置背景图片,方式与众不同。
    IOS图标知识详情(转载自http://luoyl.info/blog/2012/03/iphoneipadicons/)
    IOSCreate UIActionSheet 'otherButtons' by passing in array
    Offset文件名(绝对偏移量)
    单例模式(Singleton)Holder
    在 spring 中一共定义了七种事务传播属性
    UML,各种关系合集
    Java,线程池,ThreadPoolExecutor
    EasyMock
  • 原文地址:https://www.cnblogs.com/zhangmm96/p/9804610.html
Copyright © 2011-2022 走看看