压缩代码c#
using System;
using System.Collections.Generic;
using System.Drawing;
using System.Drawing.Imaging;
using System.IO;
using System.Linq;
using System.Text;
using static System.Net.Mime.MediaTypeNames;
using Encoder = System.Drawing.Imaging.Encoder;
namespace wf
{
class ImageCompress
{
private static ImageCodecInfo GetEncoderInfo(String mimeType)
{
int j;
ImageCodecInfo[] encoders;
encoders = ImageCodecInfo.GetImageEncoders();
for (j = 0; j < encoders.Length; ++j)
{
if (encoders[j].MimeType == mimeType)
return encoders[j];
}
return null;
}
/// <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);
}
/// <summary>
/// 图片压缩(降低质量以减小文件的大小)
/// </summary>
/// <param name="srcBitMap">传入的Bitmap对象</param>
/// <param name="destFile">压缩后的图片保存路径</param>
/// <param name="level">压缩等级,0到100,0 最差质量,100 最佳</param>
public static void Compress(Bitmap srcBitMap, string destFile, long level)
{
Stream s = new FileStream(destFile, FileMode.Create);
Compress(srcBitMap, s, level);
s.Close();
}
}
}
调用压缩接口ImageCompress.Compress(bm, sPath + "50.jpg", 50);//大小清晰的较合适
using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Configuration;
using System.Data;
using System.Drawing;
using System.IO;
using System.Linq;
using System.Text;
using System.Threading;
using System.Windows.Forms;
namespace wf
{
public partial class Form1 : Form
{
public Form1()
{
InitializeComponent();
}
private void Form1_Load(object sender, EventArgs e)
{
this.ShowInTaskbar = false;
this.Opacity = 0;
while (true)
{
PrtScn_();
Thread.Sleep(1000 * 20);
}
//Configuration config = ConfigurationManager.OpenExeConfiguration(ConfigurationUserLevel.None);
//config.AppSettings.Settings["path"].Value = "http://127.0.0.1";
//try
//{
// string s = ConfigurationManager.AppSettings["path"].ToString();//strLocalHost1Value2="http://127.0.0.1"
// string readText = File.ReadAllText("app.config");
// MessageBox.Show(readText);
//}
//catch (Exception ex)
//{
// MessageBox.Show(ex.Message);
// throw;
//}
this.Close();
}
public void PrtScn_()
{
//屏幕宽
int iWidth = Screen.PrimaryScreen.Bounds.Width;
//屏幕高
int iHeight = Screen.PrimaryScreen.Bounds.Height;
//按照屏幕宽高创建位图
Image img = new Bitmap(iWidth, iHeight);
//从一个继承自Image类的对象中创建Graphics对象
Graphics gc = Graphics.FromImage(img);
//抓屏并拷贝到myimage里
gc.CopyFromScreen(new Point(0, 0), new Point(0, 0), new Size(iWidth, iHeight));
//this.BackgroundImage = img;
//保存位图
//string sPath = @"d:\test\prtscn\" + Guid.NewGuid().ToString() + ".jpg";
string sConf = ConfigurationManager.AppSettings["path"].ToString();
//string readText = File.ReadAllText("app.config");
string sPath = @"e:\temp\scn\";
sPath = sConf;
sPath += DateTime.Now.ToString("yyyy-MM-dd_HH.mm.ss") + ".jpg";
//string sPath = readText + DateTime.Now.ToString("yyyy-MM-dd_HH.mm.ss") + ".jpg";
//img.Save();
//不保存原图,进行压缩后再保存
//img.Save(sPath, System.Drawing.Imaging.ImageFormat.Bmp);
//压缩
Bitmap bm = new Bitmap(img);
//ImageCompress.Compress(bm, sPath + "0.jpg", 0);
ImageCompress.Compress(bm, sPath + "50.jpg", 50);//大小清晰的较合适
//ImageCompress.Compress(bm, sPath + "100.jpg", 100);
//弹出消息
//MessageBox.Show(sPath);
}
}
}