C#处理jpg图片问题,如何在图片上打一个半透明的logo

pellet 2005-01-18 06:02:53
就是上传图片自动打水印的问题

现在我已经可以打上文字的水印,或者不透明矩形图片的水印
用一个Graphics的DrawImage方法在一个位图上绘制另一个位图来绘制图片水印,或者用Graphics的DrawString方法绘制字符串

现在需要做出类似于下面这张图片的水印效果
http://classpic7.chinaren.com/album/pic/2/204/2815032345890204002/110588758144180.jpg
1,水印图片背景透明(即指定某种颜色透明不会遮盖住大图)
2,水印图片半透明

请高手来指点,讨论一下吧!
...全文
946 12 打赏 收藏 转发到动态 举报
写回复
用AI写文章
12 条回复
切换为时间正序
请发表友善的回复…
发表回复
nga96 2005-01-19
  • 打赏
  • 举报
回复
呵,图片的也行。
DRAWIMAGE方法有个重载,带有attribe的那个,就能画水印的效果啦,兄弟。
你找一个看
CSTerry 2005-01-19
  • 打赏
  • 举报
回复
文字的比较好解决,刷子可以定义透明度的,把这句改了就行了
Brush b = new SolidBrush(Color.FromArgb(128,0, 0, 255));
CSTerry 2005-01-19
  • 打赏
  • 举报
回复
估计要像jun_01(无名小卒)说的那样画了
pellet 2005-01-19
  • 打赏
  • 举报
回复
brbrm(般若波若密),webserv2(GIS)(CAU)

谢谢,不过第二个问题,使水印图片半透明,依然有待解决
FJGoodGood 2005-01-18
  • 打赏
  • 举报
回复
楼上的不是半透明的吧
webserv2 2005-01-18
  • 打赏
  • 举报
回复
参考一下加水印的办法,上传是最基本的了:

if(UploadFile.PostedFile.FileName.Trim()!="")
{
//上传文件
string extension = Path.GetExtension(UploadFile.PostedFile.FileName).ToUpper();
string fileName = DateTime.Now.Year.ToString() + DateTime.Now.Month.ToString() + DateTime.Now.Day.ToString() + DateTime.Now.Hour.ToString() + DateTime.Now.Minute.ToString() + DateTime.Now.Second.ToString();
string path = Server.MapPath(".") + "/UploadFile/" + fileName + extension;
UploadFile.PostedFile.SaveAs(path);

//加文字水印,注意,这里的代码和以下加图片水印的代码不能共存
System.Drawing.Image image = System.Drawing.Image.FromFile(path);
Graphics g = Graphics.FromImage(image);
g.DrawImage(image, 0, 0, image.Width, image.Height);
Font f = new Font("Verdana", 32);
Brush b = new SolidBrush(Color.White);
string addText = AddText.Value.Trim();
g.DrawString(addText, f, b, 10, 10);
g.Dispose();

//加图片水印
System.Drawing.Image image = System.Drawing.Image.FromFile(path);
System.Drawing.Image copyImage = System.Drawing.Image.FromFile( Server.MapPath(".") + "/Alex.gif");
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();

//保存加水印过后的图片,删除原始图片
string newPath = Server.MapPath(".") + "/UploadFile/" + fileName + "_new" + extension;
image.Save(newPath);
image.Dispose();
if(File.Exists(path))
{
File.Delete(path);
}

Response.Redirect(newPath);
}

FJGoodGood 2005-01-18
  • 打赏
  • 举报
回复
挺有意思,个人感觉 jun_01(无名小卒) 的方法可行。
egxsun 2005-01-18
  • 打赏
  • 举报
回复
上面的可以吧
brbrm 2005-01-18
  • 打赏
  • 举报
回复
你的LOGO是GIF格式的吧?转换到透明格式后直接画上去不可以吗?
Bitmap bmp = Bitmap.FromFile("..."); //原图片
Bitmap gif = Bitmap.FromFile("..."); //Logo

Graph g = Bitmap.FromImage(bmp);
g.DrawImage(bmp, bmp.Width, bmp.Height);
g.DrawImage(gif, bmp.Width, bmp.Height);
pellet 2005-01-18
  • 打赏
  • 举报
回复
楼上的,什么叫"一个点一个点的画呗"?
能给点代码么?
jun_01 2005-01-18
  • 打赏
  • 举报
回复
一个点一个点画呗,然后把他们重叠的象素的rgb值平均一下
seaonce 2005-01-18
  • 打赏
  • 举报
回复
楼主得到答案了告诉俺一声,谢谢
seaonce@hotmail.com

110,544

社区成员

发帖
与我相关
我的任务
社区描述
.NET技术 C#
社区管理员
  • C#
  • Web++
  • by_封爱
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告

让您成为最强悍的C#开发者

试试用AI创作助手写篇文章吧