读书人

图片加文字后质量变差的有关问题

发布时间: 2012-03-05 11:54:02 作者: rapoo

图片加文字后质量变差的问题
用以下办法给图片加文字,原来有10k的图片变成6K了,请指教

System.Drawing.Image image = System.Drawing.Image.FromFile( "d:\\img\\error.jpg ");
Graphics g = Graphics.FromImage(image);
g.InterpolationMode = System.Drawing.Drawing2D.InterpolationMode.High;
g.SmoothingMode = System.Drawing.Drawing2D.SmoothingMode.HighQuality;
g.DrawImage(image, 0, 0, image.Width, image.Height);
Font f = new Font( "宋体 ",3);
Brush b;
b = new SolidBrush(Color.Red);
string addText = "ABCD ";
g.DrawString(addText, f, b, 90, 170);
g.Dispose();
image.Save( "d:\\img\\okfff1.jpg ");

[解决办法]
帮顶!
[解决办法]
抢个首发!
[解决办法]
直接保存不是高质量的
参考下面(Stream参数可以换为路径直接保存文件):
/// <summary>
/// 图片压缩(改变质量以调整文件的大小)
/// </summary>
/// <param name= "srcBitmap "> 传入的Bitmap对象 </param>
/// <param name= "destStream "> 压缩后的Stream对象 </param>
/// <param name= "level "> 压缩等级,0到100,0 最差质量,100 最佳 </param>
public static void Compress(Bitmap srcBitmap,Stream destStream,long level)
{
ImageCodecInfo myImageCodecInfo;
Encoder myEncoder;
EncoderParameter myEncoderParameter;
EncoderParameters myEncoderParameters;

// Get an ImageCodecInfo object that represents the JPEG codec.
myImageCodecInfo = GetEncoderInfo( "image/jpeg ");

// Create an Encoder object based on the GUID

// for the Quality parameter category.
myEncoder = Encoder.Quality;

// Create an EncoderParameters object.
// An EncoderParameters object has an array of EncoderParameter
// objects. In this case, there is only one

// EncoderParameter object in the array.
myEncoderParameters = new EncoderParameters(1);

// Save the bitmap as a JPEG file with 给定的 quality level
myEncoderParameter = new EncoderParameter(myEncoder, level);
myEncoderParameters.Param[0] = myEncoderParameter;
srcBitmap.Save(destStream, myImageCodecInfo, myEncoderParameters);
}
[解决办法]
指定一个适当的质量就可以了
[解决办法]
只是加字的话,以下方法即可,源文件压缩得还行.
public void AttachLogoOnBitmap(string file, string logo, int logoType, int x, int y)
{
try
{
if (file == null || file == string.Empty || logo == null || logo == string.Empty)
{
return;
}
MemoryStream s = new MemoryStream();
Image img = Image.FromFile(file);
Graphics graphics = Graphics.FromImage(img);
graphics.SmoothingMode = SmoothingMode.HighQuality;


switch (logoType)
{
case 1: //Text
int nlen = System.Text.Encoding.Default.GetByteCount(logo);
graphics.DrawString(logo, new Font( "Arial Black ", 13, GraphicsUnit.Pixel), Brushes.White, new Point(x, y));
break;
case 2: //Image
Image img2 = Image.FromFile(logo);
Rectangle rect = new Rectangle(x, y, img2.Width, img2.Height);
ImageAttributes attr = new ImageAttributes();
graphics.DrawImage(img2, rect, 0, 0, img2.Width, img2.Height, GraphicsUnit.Pixel, attr);
break;
default:
break;
}
img.Save(s, img.RawFormat);
graphics.Dispose();
img.Dispose();
FileStream fi = new FileStream(file, FileMode.Open, FileAccess.ReadWrite);
s.WriteTo(fi);
s.Close();
fi.Close();
}
catch { }
}
[解决办法]
PS:
我用的传入参数是Bitmap(Image的派生类)
你改为Image是一样的
[解决办法]
一个 临时 的 办法
先保存为 .png文件

然后再 另存为.jpeg
当然都要选择高清晰

读书人网 >C#

热点推荐