当前位置:编程学习 > C#/ASP.NET >>

.net保存远程图片并生成缩略图,添加水印

一个<input type="text" name="fileurl" value="" />
它的值是一张图片的地址:如http://c.csdn.net/bbs/t/5/i/pic_logo.gif
提交到后台。
要怎么处理?
private bool RemoteFileExists(string fileUrl)
    {
        bool result = false;//下载结果
        HttpWebResponse response = null;
        HttpWebRequest req = null;
        try
        {
            req = WebRequest.Create(fileUrl) as HttpWebRequest;
            response = req.GetResponse() as HttpWebResponse;             // 报异常无法解析次域名
            result = response.StatusCode == HttpStatusCode.OK ? true : false;
        }
        catch (Exception ex)
        {
            result = false;
        }
        finally
        {
            if (response != null)
            {
                response.Close();
            }
            if (req != null)
            {
                req.Abort();
            }

        }
        return result;
    }


报异常无法解析次域名

System.Drawing.Image originalImage = System.Drawing.Image.FromFile(fileurl);

报错:不支持的URI格式 --------------------编程问答-------------------- --------------------编程问答-------------------- 在线等 --------------------编程问答-------------------- 解析域名,要等待服务器的响应吧。你让程序休息一两秒看看。 --------------------编程问答-------------------- --------------------编程问答-------------------- --------------------编程问答-------------------- --------------------编程问答-------------------- 期待高手来哦,哈哈 --------------------编程问答-------------------- 围观,看看高手解答 --------------------编程问答-------------------- 加水印,应该在服务器上有要加水印的图片,然后可以使用aspjpeg这件组件添加水印。 --------------------编程问答-------------------- 没弄过,帮顶下 --------------------编程问答--------------------
引用 9 楼 leexiaochong 的回复:
加水印,应该在服务器上有要加水印的图片,然后可以使用aspjpeg这件组件添加水印。

对啊,把text改成FileUpload,先将图片传至服务器
/// <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)
        {
            System.Drawing.Image originalImage = System.Drawing.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图片
            System.Drawing.Image bitmap = new System.Drawing.Bitmap(towidth, toheight);

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

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

            //设置高质量,低速度呈现平滑程度
            g.SmoothingMode = System.Drawing.Drawing2D.SmoothingMode.HighQuality;

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

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

            try
            {
                //以jpg格式保存缩略图
                bitmap.Save(thumbnailPath, System.Drawing.Imaging.ImageFormat.Jpeg);
            }
            catch (System.Exception e)
            {
                throw e;
            }
            finally
            {
                originalImage.Dispose();
                bitmap.Dispose();
                g.Dispose();
            }
        }

/// <summary>
        /// 在图片上增加文字水印
        /// </summary>
        /// <param name="Path">原服务器图片路径</param>
        /// <param name="Path_sy">生成的带文字水印的图片路径</param>
        public static void AddWater(string Path, string Path_sy)
        {
            string addText = "我要加水印的文字";
            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("Arial", 9);
            System.Drawing.Brush b = new System.Drawing.SolidBrush(System.Drawing.Color.Black);

            g.DrawString(addText, f, b, 1, 90);
            g.Dispose();

            image.Save(Path_sy);
            image.Dispose();
        }

        /**/
        /// <summary>
        /// 在图片上生成图片水印
        /// </summary>
        /// <param name="Path">原服务器图片路径</param>
        /// <param name="Path_syp">生成的带图片水印的图片路径</param>
        /// <param name="Path_sypf">水印图片路径</param>
        public static 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();
        }
--------------------编程问答-------------------- 围观,看看高手解答 --------------------编程问答--------------------
引用 11 楼 xgrils 的回复:
引用 9 楼 leexiaochong 的回复:
加水印,应该在服务器上有要加水印的图片,然后可以使用aspjpeg这件组件添加水印。

对啊,把text改成FileUpload,先将图片传至服务器
/// <summary>
  /// 生成缩略图
  /// </summary>
  /// <param name="originalImagePath">源图路径(物理路径)</……

up --------------------编程问答-------------------- 这是个图片处理的问题
给你一些常用方法:
图片
  public static void DrawImage(Image image, Image drawImage, float x, float y, int width, int height)
        {
            using (Graphics gra = Graphics.FromImage(image))
            {
                gra.DrawImage(drawImage, x, y, width, height);
            }
        }

        public static void DrawImage(Image image, Image drawImage, float x, float y)
        {
            using (Graphics gra = Graphics.FromImage(image))
            {
                gra.DrawImage(drawImage, x, y);
            }
        }
文字
        public static void DrawString(Image image, string s, PointF point, Color color, FontFamily family, int size)
        {
            SolidBrush bru = new SolidBrush(color);
            Font font = new Font(family, size, FontStyle.Bold);
            using (Graphics gra = Graphics.FromImage(image))
            {
                gra.DrawString(s, font, bru, point);
            }
        }

        public static Image DrawString(string path, string s, PointF point, Color color, FontFamily family, int size)
        {
            Image image = Image.FromFile(path);
            DrawHelper.DrawString(image, s, point, color, family, size);
            return image;
        }

黑白     
   public static void GrayImage(Bitmap image)
        {
            Color color;
            int iColor = 0;
            for (int i = 0; i < image.Width; i++)
            {
                for (int j = 0; j < image.Height; j++)
                {
                    color = image.GetPixel(i, j);
                    iColor = (((int)color.R) + ((int)color.R) + ((int)color.R)) / 3; ;
                    color = Color.FromArgb(iColor, iColor, iColor);
                    image.SetPixel(i, j, color);
                }
            }
        }
图片大小
        public static Image ChangeImage(Image image, int width, int height)
        {
            Image.GetThumbnailImageAbort call = null;
            Image small = image.GetThumbnailImage(width, height, call, new System.IntPtr());
            return small;
        }

页面用法:
    private void Draw()
    {
        int height = 600, width = 600;
        Bitmap image = new Bitmap(width, height);
        Graphics g = Graphics.FromImage(image);
        g.FillRectangle(Brushes.White, new Rectangle(0, 0, 600, 600));
        Pen pen = new Pen(Color.Red, 2);
        pen.DashPattern = new float[] { 5, 5 };
        pen.DashStyle = DashStyle.Custom;
        g.DrawLine(pen, new Point(0, 100), new Point(600, 100));
        g.DrawString("Kevien", new Font(new FontFamily("宋体"), 12, FontStyle.Bold | FontStyle.Underline), Brushes.Blue, new PointF(0, 20));
        System.IO.MemoryStream ms = new System.IO.MemoryStream();
        image.Save(ms, System.Drawing.Imaging.ImageFormat.Jpeg);
        Response.ClearContent();
        Response.ContentType = "image/Jpeg";
        Response.BinaryWrite(ms.ToArray());
    }
补充:.NET技术 ,  ASP.NET
CopyRight © 2012 站长网 编程知识问答 www.zzzyk.com All Rights Reserved
部份技术文章来自网络,