欧美日韩一区二区三区四区不卡,日韩欧美视频一区二区三区四区,久久精品欧美一区二区三区不卡,国产精品久久久乱弄

咨詢電話:186 7916 6165 咨詢電話:186 7916 6165 (微信同號)    在線QQ:181796286
NEWS BLOG ·
學無止境
關注開優網絡 關注前沿
ASP.NET中的圖像報表FusionCharts
Linq To Xml (增,刪,改,查)

ASP.NET 生成縮略圖、加水印

發表日期:2016-01-30    文章編輯:南昌開優網絡    瀏覽次數:4374    標簽:ASP.NET應用

創建ImageMes.cs 類文件 
 public class ImageMes
    {
         /// <summary>生成縮略圖
        /// 
        /// </summary>
        /// <param name="originalImagePath">源圖路徑</param>
        /// <param name="thumbnailPath">縮略圖路徑</param>
        /// <param name="width">縮略圖寬度</param>
        /// <param name="height">縮略圖高度</param>
        /// <param name="mode">縮放的方式:HW指定高寬縮放(可能變形);W指定寬,高按比例 H指定高,寬按比例 Cut指定高寬裁減(不變形)</param>
        /// <param name="imageType">要縮略圖保存的格式(gif,jpg,bmp,png) 為空或未知類型都視為jpg</param>
        public static void MakeThumbnail(string originalImagePath, string thumbnailPath, int width, int height, string mode, string imageType)
        {
            Image originalImage = Image.FromFile(originalImagePath);
            int towidth = width;
            int toheight = height;
            int x = 0;
            int y = 0;
            int ow = originalImage.Width;
            int oh = originalImage.Height;

            switch (mode)
            {
                case "HW"://指定高寬縮放(可能變形)        
                    break;
                case "W"://指定寬,高按比例          
                    toheight = originalImage.Height * width / originalImage.Width;
                    break;
                case "H"://指定高,寬按比例
                    towidth = originalImage.Width * height / originalImage.Height;
                    break;
                case "Cut"://指定高寬裁減(不變形)        
                    if ((double)originalImage.Width / (double)originalImage.Height > (double)towidth / (double)toheight)
                    {
                        oh = originalImage.Height;
                        ow = originalImage.Height * towidth / toheight;
                        y = 0;
                        x = (originalImage.Width - ow) / 2;
                    }
                    else
                    {
                        ow = originalImage.Width;
                        oh = originalImage.Width * height / towidth;
                        x = 0;
                        y = (originalImage.Height - oh) / 2;
                    }
                    break;
                default:
                    break;
            }
            //新建一個bmp圖片
            Image bitmap = new System.Drawing.Bitmap(towidth, toheight);

            //新建一個畫板
            Graphics g = System.Drawing.Graphics.FromImage(bitmap);

            //設置高質量插值法
            g.InterpolationMode = System.Drawing.Drawing2D.InterpolationMode.High;

            //設置高質量,低速度呈現平滑程度
            g.SmoothingMode = System.Drawing.Drawing2D.SmoothingMode.HighQuality;

            //清空畫布并以透明背景色填充
            g.Clear(Color.Transparent);

            //在指定位置并且按指定大小繪制原圖片的指定部分
            g.DrawImage(originalImage, new Rectangle(0, 0, towidth, toheight),
              new Rectangle(x, y, ow, oh),
              GraphicsUnit.Pixel);

            try
            {
                //以jpg格式保存縮略圖
                switch (imageType.ToLower())
                {
                    case "gif":
                        bitmap.Save(thumbnailPath, System.Drawing.Imaging.ImageFormat.Gif);
                        break;
                    case "jpg":
                        bitmap.Save(thumbnailPath, System.Drawing.Imaging.ImageFormat.Jpeg);
                        break;
                    case "bmp":
                        bitmap.Save(thumbnailPath, System.Drawing.Imaging.ImageFormat.Bmp);
                        break;
                    case "png":
                        bitmap.Save(thumbnailPath, System.Drawing.Imaging.ImageFormat.Png);
                        break;
                    default:
                        bitmap.Save(thumbnailPath, System.Drawing.Imaging.ImageFormat.Jpeg);
                        break;
                }
            }
            catch (System.Exception e)
            {
                throw e;
            }
            finally
            {
                originalImage.Dispose();
                bitmap.Dispose();
                g.Dispose();
            }
        }

        /// <summary>生成縮略圖
        /// 
        /// </summary>
        /// <param name="originalImagePath">源圖路徑(物理路徑)</param>
        /// <param name="thumbnailPath">縮略圖路徑(物理路徑)</param>
        /// <param name="width">縮略圖寬度</param>
        /// <param name="height">縮略圖高度</param>
        /// <param name="mode">生成縮略圖的方式</param>
        public static void MakeThumbnail(string originalImagePath, string thumbnailPath, int width, int height, string mode)
        {
            Image originalImage = Image.FromFile(originalImagePath);

            int towidth = width;
            int toheight = height;

            int x = 0;
            int y = 0;
            int ow = originalImage.Width;
            int oh = originalImage.Height;

            switch (mode)
            {
                case "HW"://指定高寬縮放(可能變形)                
                    break;
                case "W"://指定寬,高按比例                    
                    toheight = originalImage.Height * width / originalImage.Width;
                    break;
                case "H"://指定高,寬按比例
                    towidth = originalImage.Width * height / originalImage.Height;
                    break;
                case "Cut"://指定高寬裁減(不變形)                
                    if ((double)originalImage.Width / (double)originalImage.Height > (double)towidth / (double)toheight)
                    {
                        oh = originalImage.Height;
                        ow = originalImage.Height * towidth / toheight;
                        y = 0;
                        x = (originalImage.Width - ow) / 2;
                    }
                    else
                    {
                        ow = originalImage.Width;
                        oh = originalImage.Width * height / towidth;
                        x = 0;
                        y = (originalImage.Height - oh) / 2;
                    }
                    break;
                default:
                    break;
            }

            //新建一個bmp圖片
            Image bitmap = new System.Drawing.Bitmap(towidth, toheight);

            //新建一個畫板
            Graphics g = System.Drawing.Graphics.FromImage(bitmap);

            //設置高質量插值法
            g.InterpolationMode = System.Drawing.Drawing2D.InterpolationMode.High;

            //設置高質量,低速度呈現平滑程度
            g.SmoothingMode = System.Drawing.Drawing2D.SmoothingMode.HighQuality;

            //清空畫布并以透明背景色填充
            g.Clear(Color.Transparent);

            //在指定位置并且按指定大小繪制原圖片的指定部分
            g.DrawImage(originalImage, new Rectangle(0, 0, towidth, toheight),
               new Rectangle(x, y, ow, oh),
                GraphicsUnit.Pixel);

            try
            {
                //獲取圖片類型 
                string fileExtension = System.IO.Path.GetExtension(originalImagePath).ToLower();
                //按原圖片類型保存縮略圖片,不按原格式圖片會出現模糊,鋸齒等問題. 
                switch (fileExtension)
                {
                    case ".gif": bitmap.Save(thumbnailPath, System.Drawing.Imaging.ImageFormat.Gif); break;
                    case ".jpg": bitmap.Save(thumbnailPath, System.Drawing.Imaging.ImageFormat.Jpeg); break;
                    case ".bmp": bitmap.Save(thumbnailPath, System.Drawing.Imaging.ImageFormat.Bmp); break;
                    case ".png": bitmap.Save(thumbnailPath, System.Drawing.Imaging.ImageFormat.Png); break;
                    default: bitmap.Save(thumbnailPath, System.Drawing.Imaging.ImageFormat.Jpeg); break;
                }
            }
            catch (System.Exception e)
            {
                throw e;
            }
            finally
            {
                originalImage.Dispose();
                bitmap.Dispose();
                g.Dispose();
            }
        }                

        /// <summary>圖片水印
        /// 
        /// </summary>
        /// <param name="imgPath">服務器圖片路徑</param>
        /// <param name="filename">保存文件名</param>
        /// <param name="watermarkFilename">水印文件路徑</param>
        /// <param name="watermarkStatus">圖片水印位置 0=不使用 1=左上 2=中上 3=右上 4=左中  9=右下</param>
        /// <param name="quality">附加水印圖片質量,0-100</param>
        /// <param name="watermarkTransparency">水印的透明度 1--10 10為不透明</param>
        public static void AddImageSignPic(string imgPath, string filename, string watermarkFilename, int watermarkStatus, int quality, int watermarkTransparency)
        {            
            byte[] _ImageBytes = File.ReadAllBytes(imgPath);
            Image img = Image.FromStream(new System.IO.MemoryStream(_ImageBytes));
           
            if (!File.Exists(watermarkFilename))
                return;
            Graphics g = Graphics.FromImage(img);
            //設置高質量插值法
            //g.InterpolationMode = System.Drawing.Drawing2D.InterpolationMode.High;
            //設置高質量,低速度呈現平滑程度
            //g.SmoothingMode = System.Drawing.Drawing2D.SmoothingMode.HighQuality;
            Image watermark = new Bitmap(watermarkFilename);

            if (watermark.Height >= img.Height || watermark.Width >= img.Width)
                return;

            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 transparency = 0.5F;
            if (watermarkTransparency >= 1 && watermarkTransparency <= 10)
                transparency = (watermarkTransparency / 10.0F);


            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,  transparency, 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;

            switch (watermarkStatus)
            {
                case 1:
                    xpos = (int)(img.Width * (float).01);
                    ypos = (int)(img.Height * (float).01);
                    break;
                case 2:
                    xpos = (int)((img.Width * (float).50) - (watermark.Width / 2));
                    ypos = (int)(img.Height * (float).01);
                    break;
                case 3:
                    xpos = (int)((img.Width * (float).99) - (watermark.Width));
                    ypos = (int)(img.Height * (float).01);
                    break;
                case 4:
                    xpos = (int)(img.Width * (float).01);
                    ypos = (int)((img.Height * (float).50) - (watermark.Height / 2));
                    break;
                case 5:
                    xpos = (int)((img.Width * (float).50) - (watermark.Width / 2));
                    ypos = (int)((img.Height * (float).50) - (watermark.Height / 2));
                    break;
                case 6:
                    xpos = (int)((img.Width * (float).99) - (watermark.Width));
                    ypos = (int)((img.Height * (float).50) - (watermark.Height / 2));
                    break;
                case 7:
                    xpos = (int)(img.Width * (float).01);
                    ypos = (int)((img.Height * (float).99) - watermark.Height);
                    break;
                case 8:
                    xpos = (int)((img.Width * (float).50) - (watermark.Width / 2));
                    ypos = (int)((img.Height * (float).99) - watermark.Height);
                    break;
                case 9:
                    xpos = (int)((img.Width * (float).99) - (watermark.Width));
                    ypos = (int)((img.Height * (float).99) - watermark.Height);
                    break;
            }

            g.DrawImage(watermark, new Rectangle(xpos, ypos, watermark.Width, watermark.Height), 0, 0, watermark.Width, watermark.Height, GraphicsUnit.Pixel, imageAttributes);

            ImageCodecInfo[] codecs = ImageCodecInfo.GetImageEncoders();
            ImageCodecInfo ici = null;
            foreach (ImageCodecInfo codec in codecs)
            {
                if (codec.MimeType.IndexOf("jpeg") > -1)
                    ici = codec;
            }
            EncoderParameters encoderParams = new EncoderParameters();
            long[] qualityParam = new long[1];
            if (quality < 0 || quality > 100)
                quality = 80;

            qualityParam[0] = quality;

            EncoderParameter encoderParam = new EncoderParameter(System.Drawing.Imaging.Encoder.Quality, qualityParam);
            encoderParams.Param[0] = encoderParam;

            if (ici != null)
                img.Save(filename, ici, encoderParams);
            else
                img.Save(filename);

            g.Dispose();
            img.Dispose();
            watermark.Dispose();
            imageAttributes.Dispose();
        }       

        /// <summary>文字水印
        /// 
        /// </summary>
        /// <param name="imgPath">服務器圖片路徑</param>
        /// <param name="filename">保存文件名</param>
        /// <param name="watermarkText">水印文字</param>
        /// <param name="watermarkStatus">圖片水印位置 0=不使用 1=左上 2=中上 3=右上 4=左中  9=右下</param>
        /// <param name="quality">附加水印圖片質量,0-100</param>
        /// <param name="fontname">字體</param>
        /// <param name="fontsize">字體大小</param>
        public static void AddImageSignText(string imgPath, string filename, string watermarkText, int watermarkStatus, int quality, string fontname, int fontsize)
        {
            byte[] _ImageBytes = File.ReadAllBytes(imgPath);
            Image img = Image.FromStream(new System.IO.MemoryStream(_ImageBytes));           

            Graphics g = Graphics.FromImage(img);
            Font drawFont = new Font(fontname, fontsize, FontStyle.Regular, GraphicsUnit.Pixel);
            SizeF crSize;
            crSize = g.MeasureString(watermarkText, drawFont);

            float xpos = 0;
            float ypos = 0;

            switch (watermarkStatus)
            {
                case 1:
                    xpos = (float)img.Width * (float).01;
                    ypos = (float)img.Height * (float).01;
                    break;
                case 2:
                    xpos = ((float)img.Width * (float).50) - (crSize.Width / 2);
                    ypos = (float)img.Height * (float).01;
                    break;
                case 3:
                    xpos = ((float)img.Width * (float).99) - crSize.Width;
                    ypos = (float)img.Height * (float).01;
                    break;
                case 4:
                    xpos = (float)img.Width * (float).01;
                    ypos = ((float)img.Height * (float).50) - (crSize.Height / 2);
                    break;
                case 5:
                    xpos = ((float)img.Width * (float).50) - (crSize.Width / 2);
                    ypos = ((float)img.Height * (float).50) - (crSize.Height / 2);
                    break;
                case 6:
                    xpos = ((float)img.Width * (float).99) - crSize.Width;
                    ypos = ((float)img.Height * (float).50) - (crSize.Height / 2);
                    break;
                case 7:
                    xpos = (float)img.Width * (float).01;
                    ypos = ((float)img.Height * (float).99) - crSize.Height;
                    break;
                case 8:
                    xpos = ((float)img.Width * (float).50) - (crSize.Width / 2);
                    ypos = ((float)img.Height * (float).99) - crSize.Height;
                    break;
                case 9:
                    xpos = ((float)img.Width * (float).99) - crSize.Width;
                    ypos = ((float)img.Height * (float).99) - crSize.Height;
                    break;
            }

            g.DrawString(watermarkText, drawFont, new SolidBrush(Color.White), xpos + 1, ypos + 1);
            g.DrawString(watermarkText, drawFont, new SolidBrush(Color.Black), xpos, ypos);

            ImageCodecInfo[] codecs = ImageCodecInfo.GetImageEncoders();
            ImageCodecInfo ici = null;
            foreach (ImageCodecInfo codec in codecs)
            {
                if (codec.MimeType.IndexOf("jpeg") > -1)
                    ici = codec;
            }
            EncoderParameters encoderParams = new EncoderParameters();
            long[] qualityParam = new long[1];
            if (quality < 0 || quality > 100)
                quality = 80;

            qualityParam[0] = quality;

            EncoderParameter encoderParam = new EncoderParameter(System.Drawing.Imaging.Encoder.Quality, qualityParam);
            encoderParams.Param[0] = encoderParam;

            if (ici != null)
                img.Save(filename, ici, encoderParams);
            else
                img.Save(filename);

            g.Dispose();
            img.Dispose();
        }
    }



前臺:
<asp:FileUpload ID="fuimg" runat="server" />
<asp:Button ID="btnUpload" runat="server" Text="上傳" OnClick="btnUpload_Click" />
 <asp:Image ID="img" runat="server" />

后臺:
protected void btnUpload_Click(object sender, EventArgs e)
{
    try
    {
        //上傳圖片,如:20121215/d1d102a0-1c4c-4b44-82bb-c2997770fbbc.jpg
        string fimg = Xiaobin.Utility.Tool.Upload(fuimg, new string[] { ".jpg", ".gif", ".png" }, 1, Server.MapPath("upload/"));

        //通過'/'分割20121215/d1d102a0-1c4c-4b44-82bb-c2997770fbbc.jpg
        string[] ss = fimg.Split('/');

        //縮略圖的地址  upload/20121215/small_d1d102a0-1c4c-4b44-82bb-c2997770fbbc.jpg
        string small_img = Server.MapPath("upload/" + ss[0] + "/small_" + ss[1]);

        //加圖片水印的圖片地址 upload/20121215/photo_d1d102a0-1c4c-4b44-82bb-c2997770fbbc.jpg
        string photo_small_img = Server.MapPath("upload/" + ss[0] + "/photo_" + ss[1]);

         //加文字水印的圖片地址 upload/20121215/text_d1d102a0-1c4c-4b44-82bb-c2997770fbbc.jpg
        string text_small_img = Server.MapPath("upload/" + ss[0] + "/text_" + ss[1]);

        //加圖片水印的logo 盡量用png透明圖片
        string photo_logo = Server.MapPath("logo.png"); 

        //生成縮略圖 寬500 高300 "HW" 強制改變圖片大小可能會變形
        ImageMes.MakeThumbnail(Server.MapPath("upload/" + fimg), small_img, 500, 350, "HW");   

        //生成加文字水印圖片,原圖地址、新圖地址、要加的文本、位置、質量、字體、字體大小
        Xiaobin.Utility.ImageMes.AddImageSignText(small_img, text_small_img, "曉斌CMS", 2, 60, "楷體_GB2312", 20);

        //生成加圖片水印圖片,原圖地址、新圖地址、要加的圖片LOGO、位置、質量、透明度
        Xiaobin.Utility.ImageMes.AddImageSignPic(small_img, photo_small_img, Server.MapPath("/upload/img_100_46.png"), 1, 90, 5);

        //刪除原圖
        System.IO.File.Delete(Server.MapPath("upload/" + fimg));

        //前臺顯示
        img.ToolTip = ss[0] + "/small_" + ss[1];
        img.ImageUrl = "upload/" + ss[0] + "/small_" + ss[1];
    }
    catch (Exception ex)
    {
        Xiaobin.Utility.Tool.Alert(ex.Message, this.Page);
    }
}
主站蜘蛛池模板: 克东县| 廊坊市| 梅河口市| 大田县| 比如县| 策勒县| 佛冈县| 商水县| 肇州县| 张掖市| 桂东县| 鸡泽县| 广汉市| 乌拉特前旗| 深水埗区| 潮州市| 天峻县| 桓台县| 上林县| 正定县| 塔河县| 巨野县| 璧山县| 天气| 乌拉特后旗| 阿坝县| 曲靖市| 曲麻莱县| 禄丰县| 聂荣县| 平舆县| 龙门县| 周口市| 洞头县| 武邑县| 白水县| 长垣县| 天祝| 沾化县| 大城县| 南安市|