图片的大小和像素都不一样,加水印后的后果非常不理想,有的水印字体很小,而有的非常大,根本就显示不完,请问怎么解决,以下是我加水印的代码:
private void AddWater(string Source, string Dest, string addText)
{
System.Drawing.Image image = System.Drawing.Image.FromFile(Source); 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("Verdana",60);
System.Drawing.Brush b = new System.Drawing.SolidBrush(System.Drawing.Color.Red);
g.DrawString(addText, f, b, 0, 0);
g.Dispose(); image.Save(Dest);
image.Dispose();
}
private void AddWater(string Source, string Dest, string addText)
{
System.Drawing.Image image = System.Drawing.Image.FromFile(Source); 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("Verdana",60);
System.Drawing.Brush b = new System.Drawing.SolidBrush(System.Drawing.Color.Red);
g.DrawString(addText, f, b, 0, 0);
g.Dispose(); image.Save(Dest);
image.Dispose();
}
解决方案 »
- 如何在js中获得checkboxlist选中的值
- 交叉表行列排序
- 请问这种方式的数据库关联表查询如何写呢?
- 如何实现多人在线编辑同一文档
- 服务器出错
- javascript 弹出保存文件路径对话框(在线等)
- mamcached缓存SqL数据
- 怎样在不刷新页面的情况下通过点击一个按钮或checkbox使一个checkboxlist里的项都被选中?
- 请教各位:如何控制web control的按“enter”的事件!
- Visual Studio.Net 2003 现在有没有中文版?
- System.Net.WebRequest.Create(Url);防火墙要开设哪些端口?
- js 怎么读取 datagrid 中的控件内容
这有个处理的图片质量还行;。
==============
看看这个
缩略图水印组件wsImage3.5
if (temp > 500)
font = new Font("Verdana", 100);
else if (temp < 100)
font = new Font("Verdana", 50);
else
font = new Font("Verdana", 75);
我也觉得也只有JGood() 说的这样咯
是这样的,你右键图片,看有一个属性是分辨率,有的是72DPI,有的是96DPI,都不一样,就是这个东西影响了你加水印的位置,所以,才会有楼主所说的问题解决办法就是把上传的图片都转化成统一的分辨率就好了,我现在是转化为96DPI,因为目前这种最多,且图片不大
Dim myImg As System.Drawing.Image = System.Drawing.Image.FromFile(ImgName)
Dim ImgWidth As Integer = myImg.Width
Dim ImgHeight As Integer = myImg.Height Dim grImg As Graphics
Dim bmImg As Bitmap '判断其分辨率,如果不等于96像素,那么新建一个24位的位图,并设置分辨率为96像素
'把原图(新图)载入Graphic对象
If myImg.HorizontalResolution = 96.0F And myImg.VerticalResolution = 96.0F Then
bmImg = New Bitmap(myImg)
grImg = Graphics.FromImage(bmImg)
Else
bmImg = New Bitmap(ImgWidth, ImgHeight, System.Drawing.Imaging.PixelFormat.Format24bppRgb)
bmImg.SetResolution(96, 96)
grImg = Graphics.FromImage(bmImg)
End If
60太绝对了,应根据情况定义值
JGood() 的方法我之前也试过。
等会再试试liujiayu10(www.xybxy.com) 的方法。
If System.IO.File.Exists(ImgName) Then
'载入图片,取得长宽
Dim myImg As System.Drawing.Image = System.Drawing.Image.FromFile(ImgName)
Dim ImgWidth As Integer = myImg.Width
Dim ImgHeight As Integer = myImg.Height Dim grImg As Graphics
Dim bmImg As Bitmap '判断其分辨率,如果不等于96像素,那么新建一个24位的位图,并设置分辨率为96像素
'把原图(新图)载入Graphic对象
If myImg.HorizontalResolution = 96.0F And myImg.VerticalResolution = 96.0F Then
bmImg = New Bitmap(myImg)
grImg = Graphics.FromImage(bmImg)
Else
bmImg = New Bitmap(ImgWidth, ImgHeight, System.Drawing.Imaging.PixelFormat.Format24bppRgb)
bmImg.SetResolution(96, 96)
grImg = Graphics.FromImage(bmImg)
End If '清除整个绘图面并以透明背景色填充
'设置呈现模式为消除锯齿
'在位图(x=0,y=0)的位置,把原图100%的大小绘制在位图上
grImg.Clear(Color.Transparent)
grImg.SmoothingMode = System.Drawing.Drawing2D.SmoothingMode.AntiAlias
grImg.DrawImage(myImg, New Rectangle(0, 0, ImgWidth, ImgHeight), 0, 0, ImgWidth, ImgHeight, GraphicsUnit.Pixel) '新建字体,并设置字体、字号、字型
'设置在位图上画画的位置
Dim crFont As Font = New Font("Arial", 10, FontStyle.Bold)
Dim y As Single = 10.0F
Dim x As Single = 20.0F '先在位图上的原位置向右、向下一个像素的位置写黑色字作为阴影
'再在位图上的原位置写灰色字,以两种字体叠加产生立体效果
Dim TransBrush_yinying As SolidBrush = New SolidBrush(Color.FromArgb(153, 0, 0, 0))
grImg.DrawString(Copyright, crFont, TransBrush_yinying, x + 1, y + 1)
Dim TransBrush_zhuse As SolidBrush = New SolidBrush(Color.FromArgb(153, 255, 255, 255))
grImg.DrawString(Copyright, crFont, TransBrush_zhuse, x, y) '压缩图片,ImgZl为图片压缩质量0-100
Dim ImgZl As Integer = 88
Dim ICI As System.Drawing.Imaging.ImageCodecInfo = System.Drawing.Imaging.ImageCodecInfo.GetImageEncoders(1)
Dim EP As System.Drawing.Imaging.EncoderParameters = New System.Drawing.Imaging.EncoderParameters(1)
EP.Param(0) = New System.Drawing.Imaging.EncoderParameter(System.Drawing.Imaging.Encoder.Quality, ImgZl) '释放占用的资源
myImg.Dispose() '保存新图片,释放释放占用的资源
Dim NewImg As System.Drawing.Image = bmImg
NewImg.Save(ImgName, ICI, EP)
grImg.Dispose()
NewImg.Dispose() End If End Sub '压缩图片为指定的MIIE格式GetEncoderInfo("image/jpeg")
'GetEncoderInfo("image/jpeg")=System.Drawing.Imaging.ImageCodecInfo.GetImageEncoders(1)
Function GetEncoderInfo(ByVal mimeType As String) As System.Drawing.Imaging.ImageCodecInfo
Dim i As Integer
Dim encoders As System.Drawing.Imaging.ImageCodecInfo()
encoders = System.Drawing.Imaging.ImageCodecInfo.GetImageEncoders()
For i = 0 To encoders.Length - 1
If encoders(i).MimeType = mimeType Then
Return encoders(i)
End If
Next
End Function
{
if (System.IO.File.Exists(ImgName))
{
//载入图片,取得长宽
System.Drawing.Image myImg = System.Drawing.Image.FromFile(ImgName);
int ImgWidth = myImg.Width;
int ImgHeight = myImg.Height; Graphics grImg;
Bitmap bmImg; //判断其分辨率,如果不等于96像素,那么新建一个24位的位图,并设置分辨率为96像素
//把原图(新图)载入Graphic对象
if (myImg.HorizontalResolution == 96.0F && myImg.VerticalResolution == 96.0F)
{
bmImg = new Bitmap(myImg);
grImg = Graphics.FromImage(bmImg);
}
else
{
bmImg = new Bitmap(ImgWidth, ImgHeight, System.Drawing.Imaging.PixelFormat.Format24bppRgb);
bmImg.SetResolution(96, 96);
grImg = Graphics.FromImage(bmImg);
} //清除整个绘图面并以透明背景色填充
//设置呈现模式为消除锯齿
//在位图(x=0,y=0)的位置,把原图100%的大小绘制在位图上
grImg.Clear(Color.Transparent);
grImg.SmoothingMode = System.Drawing.Drawing2D.SmoothingMode.AntiAlias;
grImg.DrawImage(myImg, new Rectangle(0, 0, ImgWidth, ImgHeight), 0, 0, ImgWidth, ImgHeight, GraphicsUnit.Pixel); //新建字体,并设置字体、字号、字型
//设置在位图上画画的位置
Font crFont = new Font("Arial", 10, FontStyle.Bold);
Single y = 10.0F;
Single x = 20.0F; //先在位图上的原位置向右、向下一个像素的位置写黑色字作为阴影
//再在位图上的原位置写灰色字,以两种字体叠加产生立体效果
SolidBrush TransBrush_yinying = new SolidBrush(Color.FromArgb(153, 0, 0, 0));
grImg.DrawString(Copyright, crFont, TransBrush_yinying, x + 1, y + 1);
SolidBrush TransBrush_zhuse = new SolidBrush(Color.FromArgb(153, 255, 255, 255));
grImg.DrawString(Copyright, crFont, TransBrush_zhuse, x, y); //压缩图片,ImgZl为图片压缩质量0-100
int ImgZl = 88;
System.Drawing.Imaging.ImageCodecInfo ICI;
ICI = GetEncoderInfo("image/jpeg");
System.Drawing.Imaging.EncoderParameters EP = new System.Drawing.Imaging.EncoderParameters(1);
EP.Param[0] = new System.Drawing.Imaging.EncoderParameter(System.Drawing.Imaging.Encoder.Quality, ImgZl); //释放占用的资源
myImg.Dispose(); //保存新图片,释放释放占用的资源
System.Drawing.Image NewImg = bmImg;
NewImg.Save(ImgName, ICI, EP);
grImg.Dispose();
NewImg.Dispose();
}
}
//压缩图片为指定的MIIE格式GetEncoderInfo("image/jpeg")
//GetEncoderInfo("image/jpeg")=System.Drawing.Imaging.ImageCodecInfo.GetImageEncoders(1)
System.Drawing.Imaging.ImageCodecInfo GetEncoderInfo(string mimeType)
{
System.Drawing.Imaging.ImageCodecInfo[] encoders;
encoders = System.Drawing.Imaging.ImageCodecInfo.GetImageEncoders();
for(int i=0;i<encoders.Length;i++)
{
if(encoders[i].MimeType==mimeType)
{
return encoders[i];
}
}
return null;
}
虽然效果还不是很完美,但已经比以前好多了。
谢谢大家参与。