c# 改变图片大小 我想用C# 将一个4M 的图片 变为一个只有几百 kb 的jpeg格式的图片,请大侠们指点一二! 解决方案 » 免费领取超大流量手机卡,每月29元包185G流量+100分钟通话, 中国电信官方发货 Bitmap image = new Bitmap(图片路径);image.Save(System.Drawing.Imaging.ImageFormat.Jpeg); var img = Image.FromFile(@"图片路径");var thumbnail = img.GetThumbnailImage(400, 300, null, IntPtr.Zero);thumbnail.Save(@"缩略图路径"); 图片缩略图Image.GetThumbnailImage 方法:返回此 Image 的缩略图。public Image GetThumbnailImage( int thumbWidth, int thumbHeight, Image..::.GetThumbnailImageAbort callback, IntPtr callbackData)Image thumbImg = Image.FromFile("").GetThumbnailImage(100, 120, null, new IntPtr());Image img = Image.FromFile(path);Bitmap bitmap = new Bitmap(100,100);graphics g = graphics.fromimage(bitmap);g.InterpolationMode = System.Drawing.Drawing2D.InterpolationMode.High;g.SmoothingMode = System.Drawing.Drawing2D.SmoothingMode.HighQuality;g.Clear(Color.Transparent); g.drawimage(img,new rectangle(0,0,100,100),new rectangle(0,0,img.width,img.height))bitmap.save(newpat,imageformat.jpeg)http://topic.csdn.net/u/20100525/15/7b9f9fe3-e862-48b5-86e2-3b72a9525690.html private ImageCodecInfo GetEncoder(ImageFormat format)//获取特定的图像编解码信息 { ImageCodecInfo[] codecs = ImageCodecInfo.GetImageDecoders(); foreach (ImageCodecInfo codec in codecs) { if (codec.FormatID == format.Guid) { return codec; } } return null; }private void button2_Click(object sender, EventArgs e) { System.Drawing.Imaging.Encoder encoder = System.Drawing.Imaging.Encoder.Quality;//获取品质(压缩率)编码 EncoderParameter mycoder = new EncoderParameter(encoder, 0);//0压缩率最大,100品质最高 EncoderParameters myCoders = new EncoderParameters(1);//参数数组,大小为1 myCoders.Param[0] = mycoder;//添加一个参数 ImageCodecInfo jpgInfo = GetEncoder(ImageFormat.Jpeg);//获取JPG格式编解码信息 Image bmp = Image.FromFile("F:\\x.jpg"); bmp.Save("F:\\y.jpg", jpgInfo, myCoders);//以指定品质率的JPG格式保存 } EncoderParameter mycoder = new EncoderParameter(encoder, 0);上面的最后一个参数是长整数,后面要加个L, 不然寻找重载函数的时候找不到目标(我的错)经试验, 最后一个参数用30L最好,图象大小不到原来的一半,品质基本无失真,楼主可变换数字大小多试试 private byte[] formatImg(string img) { FileStream stream = new FileStream(img, FileMode.Open); Bitmap oldbmp = new Bitmap(stream); stream.Close(); MemoryStream memoryStream = new MemoryStream(); Bitmap newbmp = new Bitmap(oldbmp.Width, oldbmp.Height); Graphics g = Graphics.FromImage(oldbmp); g.InterpolationMode = System.Drawing.Drawing2D.InterpolationMode.High; g.SmoothingMode = System.Drawing.Drawing2D.SmoothingMode.HighQuality; g.Clear(Color.White); g.DrawImage(oldbmp, new Rectangle(0, 0, newbmp.Width, newbmp.Height), 0, 0, oldbmp.Width, oldbmp.Height, GraphicsUnit.Pixel); g.Dispose(); oldbmp.Dispose(); newbmp.Save(memoryStream, System.Drawing.Imaging.ImageFormat.Jpeg); memoryStream.Flush(); byte[] butter = memoryStream.GetBuffer(); memoryStream.Close(); newbmp.Dispose(); return butter; }然后我用File.WriteBytes("path",byte)但是打开的图片是黑色的?没有图像? Image和Bitmap都有Save方法直接使用,不知你转来转去要干啥 请问如何获取下面这个需要登录的系统里面的网页? 求助:关于闹钟时间框 发给QQ信箱的信,他收不到 C#程序设计都该学什么?! 自己创建的类layer,如果我想在别的地方使用,using 怎么写 C#中关于进程、线程的基本知识,保证你答不上来! 请教高手,怎么避免指定的文件夹被删除或更改 各位大侠,告诉一些比较好的你们常去的。net网站! 需求C#或C++ 高手相助 急!二次筛选 用dataview 在线等 C#调用ATL com控件被阻死,是什么原因? 求数据解析方案
var thumbnail = img.GetThumbnailImage(400, 300, null, IntPtr.Zero);
thumbnail.Save(@"缩略图路径");
public Image GetThumbnailImage(
int thumbWidth,
int thumbHeight,
Image..::.GetThumbnailImageAbort callback,
IntPtr callbackData
)
Image thumbImg = Image.FromFile("").GetThumbnailImage(100, 120, null, new IntPtr());Image img = Image.FromFile(path);
Bitmap bitmap = new Bitmap(100,100);
graphics g = graphics.fromimage(bitmap);
g.InterpolationMode = System.Drawing.Drawing2D.InterpolationMode.High;
g.SmoothingMode = System.Drawing.Drawing2D.SmoothingMode.HighQuality;
g.Clear(Color.Transparent);
g.drawimage(img,new rectangle(0,0,100,100),new rectangle(0,0,img.width,img.height))
bitmap.save(newpat,imageformat.jpeg)http://topic.csdn.net/u/20100525/15/7b9f9fe3-e862-48b5-86e2-3b72a9525690.html
private ImageCodecInfo GetEncoder(ImageFormat format)//获取特定的图像编解码信息
{
ImageCodecInfo[] codecs = ImageCodecInfo.GetImageDecoders(); foreach (ImageCodecInfo codec in codecs)
{
if (codec.FormatID == format.Guid)
{
return codec;
}
}
return null;
}
private void button2_Click(object sender, EventArgs e)
{
System.Drawing.Imaging.Encoder encoder = System.Drawing.Imaging.Encoder.Quality;//获取品质(压缩率)编码
EncoderParameter mycoder = new EncoderParameter(encoder, 0);//0压缩率最大,100品质最高
EncoderParameters myCoders = new EncoderParameters(1);//参数数组,大小为1
myCoders.Param[0] = mycoder;//添加一个参数
ImageCodecInfo jpgInfo = GetEncoder(ImageFormat.Jpeg);//获取JPG格式编解码信息
Image bmp = Image.FromFile("F:\\x.jpg");
bmp.Save("F:\\y.jpg", jpgInfo, myCoders);//以指定品质率的JPG格式保存
}
上面的最后一个参数是长整数,后面要加个L, 不然寻找重载函数的时候找不到目标(我的错)
经试验, 最后一个参数用30L最好,图象大小不到原来的一半,品质基本无失真,楼主可变换数字大小多试试
{
FileStream stream = new FileStream(img, FileMode.Open);
Bitmap oldbmp = new Bitmap(stream);
stream.Close();
MemoryStream memoryStream = new MemoryStream();
Bitmap newbmp = new Bitmap(oldbmp.Width, oldbmp.Height);
Graphics g = Graphics.FromImage(oldbmp);
g.InterpolationMode = System.Drawing.Drawing2D.InterpolationMode.High;
g.SmoothingMode = System.Drawing.Drawing2D.SmoothingMode.HighQuality;
g.Clear(Color.White);
g.DrawImage(oldbmp, new Rectangle(0, 0, newbmp.Width, newbmp.Height), 0, 0, oldbmp.Width, oldbmp.Height, GraphicsUnit.Pixel);
g.Dispose();
oldbmp.Dispose();
newbmp.Save(memoryStream, System.Drawing.Imaging.ImageFormat.Jpeg);
memoryStream.Flush();
byte[] butter = memoryStream.GetBuffer();
memoryStream.Close();
newbmp.Dispose();
return butter;
}
然后我用File.WriteBytes("path",byte)
但是打开的图片是黑色的?没有图像?