消息关闭
    暂无新消息!
这是我的加水印的函数,一直在其他地方都能用,到这里却只能第一张能加,第二张开始就出错了
我是这样用的:
 uploadFile.SaveAs(uploadpath + picname);
                   AddWaterPic(pathbase + picname, "/pic/watermark.png", pathbase);
//不

第一张能加,证明代码应该没问题, 是不是出在   AddWaterPic函数上,有什么东西没关,或释放呢,请高人指点,谢谢!



 AddWaterPic函数如下:



 public void AddWaterPic(string strPath, string strPathSyp, string newpath)
        {


            strPath = System.Web.HttpContext.Current.Server.MapPath(strPath);

            strPathSyp = System.Web.HttpContext.Current.Server.MapPath(strPathSyp);

            string newpic = newpath + "tmp2" + strPath.Remove(0, strPath.LastIndexOf("."));
            string strPathSypf = strPath;

            File.Copy((strPath), System.Web.HttpContext.Current.Server.MapPath(newpic), true);



            float transparence = 0.3f;//透明度  越小越透明。
            float[][] floatArray =
                {
                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, transparence, 0.0f },
                new float[] { 0.0f, 0.0f, 0.0f, 0.0f, 1.0f }
            };
            ImageAttributes imageAttributes = new ImageAttributes();
            imageAttributes.SetColorMatrix(new ColorMatrix(floatArray), ColorMatrixFlag.Default, ColorAdjustType.Bitmap);


            System.Drawing.Image image = System.Drawing.Image.FromFile(System.Web.HttpContext.Current.Server.MapPath(newpic));

            Bitmap bm = new Bitmap(image);

            System.Drawing.Image copyImage = System.Drawing.Image.FromFile(strPathSyp);

            System.Drawing.Graphics g = System.Drawing.Graphics.FromImage(bm);

            //如果要使水印居中显示,只要更改bm.Width - copyImage.Width, bm.Height - copyImage.Height,这两个值

            //就可以了,在实际项目中,我用的是Convert.ToInt32(image.Width * 0.3), Convert.ToInt32(image.Height * 0.3)

            // g.DrawImage(copyImage, new System.Drawing.Rectangle(bm.Width - copyImage.Width, bm.Height - copyImage.Height, copyImage.Width, copyImage.Height), 0, 0, copyImage.Width, copyImage.Height, System.Drawing.GraphicsUnit.Pixel);



            Rectangle rect = new Rectangle(image.Width - copyImage.Width, image.Height - copyImage.Height, copyImage.Width, copyImage.Height);
            g.DrawImage(copyImage, rect, 0, 0, copyImage.Width, copyImage.Height, GraphicsUnit.Pixel, imageAttributes);


            g.Dispose();
            copyImage.Dispose();
            bm.Save(strPathSypf);
            bm.Dispose();

            image.Dispose();

            File.Delete(System.Web.HttpContext.Current.Server.MapPath(newpic));


        }
    }



4个回答

︿ 3
如果你一定要先生成临时文件的话
可以选择

using(FileStream fs=new FileStream(//这里面有几个重载,选择read那项))
{
//这里做你的图片操作
}
︿ 0
system.Drawing.Image.FromFile 会锁文件

ps:其实不用生成临时文件,你从网络接过来的原本就是stream,so你直接Image.FromStream 就行