加水印问题
static public string MakePic(string UploadPath, string FileName){
string strNewFileName = "";
try
{
string[] str = strExtension(FileName);
//提供一个回调方法,用于确定Image对象在执行生成缩略图操作时何时提前取消执行
//如果此方法确定 GetThumbnailImage 方法应提前停止执行,则返回 true;否则返回 false
System.Drawing.Image.GetThumbnailImageAbort callb = null;
//定义image类的对象
System.Drawing.Image image, smallImage, shuiyinImg, FlagImage;
//为上传的图片建立引用
image = System.Drawing.Image.FromFile(System.Web.HttpContext.Current.Server.MapPath(UploadPath + "/" + str[0] + str[1]));
/*************加水印开始*********************************************/
shuiyinImg = System.Drawing.Image.FromFile(System.Web.HttpContext.Current.Server.MapPath("~/UploadPic/Flag81_42.png"));
Graphics g = Graphics.FromImage(image);
g.DrawImage(shuiyinImg, new Rectangle(image.Width - shuiyinImg.Width, image.Height - shuiyinImg.Height,
shuiyinImg.Width, shuiyinImg.Height), 0, 0, shuiyinImg.Width, shuiyinImg.Height, GraphicsUnit.Pixel);
g.Dispose();
string path1 = System.Web.HttpContext.Current.Server.MapPath(UploadPath + "/F" + str[0] + str[1]);
image.Save(path1);
image.Dispose();
/************加水印的过程结束*********************************************/
//删除原图,删除加水印后的原图
// if (File.Exists(strNewFileName))
//{
// File.Delete(strNewFileName);
// }
strNewFileName = "F" + str[0] + str[1];
}
catch
{
}
return strNewFileName;
}
#endregion
我上传的图片用上面的代码已经成功加上了水印,但是图片质量发生严重的改变, 图片的大小也小了3分1. 找了好多资料,不知道如何解决! --------------------编程问答-------------------- image是原始图片,watermark是水印
g.DrawImage(watermark, new Rectangle(image.Width - watermark.Width, image.Height - watermark.Height, watermark.Width, watermark.Height), 0, 0, watermark.Width, watermark.Height, GraphicsUnit.Pixel); --------------------编程问答-------------------- 本地图片的图片水印实现 参考下我写的这个
本地图片的图片水印实现
using System.Drawing;
using System.Drawing.Imaging;
using System.IO;
public void ImageMark()
{
//添加水印后的图片的暂存路径
string newPath = MapPath(@"~//Images/BookCovers/") + filename + "_new" + ".jpg";
//需要水印的图片路径
string Path = Server.MapPath(".") + "/Images/BookCovers/" + filename + ".jpg";
System.Drawing.Image image = System.Drawing.Image.FromFile(Path);
//获得水印图片
System.Drawing.Image copyimage = System.Drawing.Image.FromFile(Server.MapPath(".") + "/Images/WaterMark.jpg");
Graphics g = Graphics.FromImage(image);
g.DrawImage(copyimage, new Rectangle(image.Width - copyimage.Width, image.Height - copyimage.Height, copyimage.Width, copyimage.Height), 0, 0, copyimage.Width, copyimage.Height, GraphicsUnit.Pixel);
g.Dispose();
image.Save(newPath, ImageFormat.Jpeg);
image.Dispose();
//删除原图
File.Delete(Path);
//得到新图
System.Drawing.Image NewImage = System.Drawing.Image.FromFile(newPath);
//保存新图至原位置
NewImage.Save(Path, ImageFormat.Jpeg);
NewImage.Dispose();
//删除暂存图
File.Delete(newPath);
}
注1:filename为图片文件名,文件名的获得方法自行选择.
注2:保存图片需用绝对路径.
--------------------编程问答--------------------
很强大,这个,收藏了。 --------------------编程问答-------------------- 我试过了楼上几位的方法,还是不行.加水印之后的图片质量比没加水印的图片质量要差很多,文件的大小也相差一倍 --------------------编程问答-------------------- 应该没问题啊,我以前做的没发现这样的问题 --------------------编程问答-------------------- 是啊 --------------------编程问答-------------------- 你可能试一下400K 以上的图片再上传加下水印,质量就变了. 水印文件的格式是PNG的
补充:.NET技术 , ASP.NET