C#制作图片压缩工具

最近做的项目当中,需要将视频采集卡采集过来的图片进行压缩处理,原有一张JPG默认320*240大小为300KB,经过压缩之后为6KB,压缩50倍!

 先放上截图吧:

 

可以添加单个文件,支持多选,也可以添加文件夹,自动遍历文件夹中的图片,当然,还有很多不完善的地方,只是个例子而已!呵呵!

 贴出所有完整代码吧,一看就懂!呵呵,用到了皮肤加载,就在构造函数当中!不好意思有点懒,代码都没有注释!

using  System;
using  System.Collections.Generic;
using  System.ComponentModel;
using  System.Data;
using  System.Drawing;
using  System.Text;
using  System.Windows.Forms;
using  System.IO;
using  SKINPPDOTNETLib;

namespace  EcanPicTools
{
    
public   partial   class  frmMain : Form
    {
        Image img;
        Bitmap bmp;
        Graphics grap;
        
int  width, height;

        SKINPPDOTNETLib.SkinPPDotNetClass myskin 
=   new  SkinPPDotNetClass();
        
public  frmMain()
        {
            InitializeComponent();
            
this .txtbili.KeyPress  +=   new  KeyPressEventHandler(txt_KeyPress);
            
this .txtWidth.KeyPress  +=   new  KeyPressEventHandler(txt_KeyPress);
            
this .txtHeight.KeyPress  +=   new  KeyPressEventHandler(txt_KeyPress);
            Control.CheckForIllegalCrossThreadCalls 
=   false ;
            myskin.LoadSkin(Application.StartupPath 
+   @" \spring.ssk " true );
        }

        
private   void  frmMain_Load( object  sender, EventArgs e)
        {
            init();
        }

        
private   void  init()
        {
            
this .Text  =   " 图片压缩工具(作者:刘典武)---普通模式 " ;
            labTransparent.Text 
=   " 透明值:100% " ;
            txtWidth.Enabled 
=   false ;
            txtHeight.Enabled 
=   false ;
            rbtnbili.Checked 
=   true ;
            txtbili.Focus();
        }

        
private   void  txt_KeyPress( object  sender, KeyPressEventArgs e)
        {
            
if  ((e.KeyChar  <   48   ||  e.KeyChar  >   57 &&  (e.KeyChar  !=   8 ))
            {
                e.Handled 
=   true ;
            }
            
base .OnKeyPress(e);
        }

        
private   void  yasuo( string  frompath,  string  topath)
        {
            
try
            {
                img 
=  Image.FromFile(frompath);

                
if  (rbtnbili.Checked)
                {
                    width 
=  Convert.ToInt32(img.Width  *  (Convert.ToDouble(txtbili.Text)  /   100 ));
                    height 
=  Convert.ToInt32(img.Height  *  (Convert.ToDouble(txtbili.Text)  /   100 ));
                }
                
else
                {
                    width 
=  Convert.ToInt32(txtWidth.Text.Trim());
                    height 
=  Convert.ToInt32(txtHeight.Text.Trim());
                }

                bmp 
=   new  Bitmap(width, height);
                grap 
=  Graphics.FromImage(bmp);
                grap.SmoothingMode 
=  System.Drawing.Drawing2D.SmoothingMode.HighQuality;
                grap.InterpolationMode 
=  System.Drawing.Drawing2D.InterpolationMode.HighQualityBicubic;
                grap.DrawImage(img, 
new  Rectangle( 0 0 , width, height));

                bmp.Save(topath, System.Drawing.Imaging.ImageFormat.Jpeg);
                bmp.Dispose();
                img.Dispose();
                grap.Dispose();
            }
            
catch  (Exception ex) { MessageBox.Show(ex.Message,  " 错误 " , MessageBoxButtons.OK, MessageBoxIcon.Error); }
            
finally  { }
        }

        
private   void  btnStart_Click( object  sender, EventArgs e)
        {
            
if  (lboxPicPath.Items.Count  <=   0 )
            {
                MessageBox.Show(
" 你还没有选择要压缩的图片! " " 提示 " , MessageBoxButtons.OK, MessageBoxIcon.Information);
                
return ;
            }
            
if  (txtSavePath.Text  ==   "" )
            {
                MessageBox.Show(
" 你还没有选择要保存的文件夹路径! " " 提示 " , MessageBoxButtons.OK, MessageBoxIcon.Information);
                
return ;
            }

            pbar.Maximum 
=  lboxPicPath.Items.Count;
            pbar.Value 
=   0 ;

            
if  (rbtnbili.Checked  &&  txtbili.Text  ==   "" )
            {
                MessageBox.Show(
" 请填好比例值! " " 提示 " , MessageBoxButtons.OK, MessageBoxIcon.Information);
                txtbili.Focus();
                
return ;
            }
            
else   if  (rbtnkg.Checked  &&  (txtHeight.Text  ==   ""   ||  txtWidth.Text  ==   "" ))
            {
                MessageBox.Show(
" 请填好宽高值! " " 提示 " , MessageBoxButtons.OK, MessageBoxIcon.Information);
                txtWidth.Focus();
                
return ;
            }

            
for  ( int  i  =   0 ; i  <  lboxPicPath.Items.Count; i ++ )
            {
                pbar.Value 
=  i  +   1 ;
                
this .yasuo(lboxPicPath.Items[i].ToString(), txtSavePath.Text  +   " \\ "   +  Path.GetFileName(lboxPicPath.Items[i].ToString()));
                labInfo.Text 
=   " 已经压缩图片张数: "   +  Convert.ToString(i  +   1 );
            }
            MessageBox.Show(
" 恭喜,压缩图片成功! " " 提示 " , MessageBoxButtons.OK, MessageBoxIcon.Information);
        }

        
private   void  btnShow_Click( object  sender, EventArgs e)
        {
            FolderBrowserDialog fbd 
=   new  FolderBrowserDialog();
            
if  (fbd.ShowDialog()  ==  DialogResult.OK)
            {
                
this .getFile(fbd.SelectedPath);
            }
        }

        
private   void  getFile( string  path)
        {
            DirectoryInfo pic 
=   new  DirectoryInfo(path);
            
foreach  (FileInfo file  in  pic.GetFiles( " *.* " ))
            {
                lboxPicPath.Items.Add(file.FullName);
            }
        }

        
private   void  btnShowSavePath_Click( object  sender, EventArgs e)
        {
            FolderBrowserDialog fbd 
=   new  FolderBrowserDialog();
            fbd.Description 
=   " 请选择保存输出图像路径 " ;
            fbd.ShowNewFolderButton 
=   true ;

            
if  (fbd.ShowDialog()  ==  DialogResult.OK)
            {
                
if  (fbd.SelectedPath.ToString()  !=   "" )
                {
                    txtSavePath.Text 
=  fbd.SelectedPath;
                }
            }
        }

        
private   void  btnSelect_Click( object  sender, EventArgs e)
        {
            OpenFileDialog open 
=   new  OpenFileDialog();
            open.Title 
=   " 请选择要压缩的图片 " ;
            open.Filter 
=   " 图片文件(*.jpg,*.bmp,*.png,*.gif)|*.jpg;*.bmp;*.png;*.gif " ;
            open.Multiselect 
=   true ;
            
if  (open.ShowDialog()  ==  DialogResult.OK)
            {
                
foreach  ( string  file  in  open.FileNames)
                {
                    lboxPicPath.Items.Add(file);
                }
            }
        }

        
private   void  picTop_Click( object  sender, EventArgs e)
        {
            
if  ( this .TopMost)
            {
                
this .TopMost  =   false ;
                
this .Text  =   " 图片压缩工具(作者:刘典武)---普通模式 " ;
            }
            
else
            {
                
this .TopMost  =   true ;
                
this .Text  =   " 图片压缩工具(作者:刘典武)---置顶模式 " ;
            }
        }

        
private   void  tbarTransparent_Scroll( object  sender, EventArgs e)
        {
            labTransparent.Text 
=   " 透明值: "   +  Convert.ToString( 100   -  tbarTransparent.Value)  +   " % " ;

            
this .Opacity  =   1   -  ( float )(tbarTransparent.Value)  /   100 ;
        }

        
private   void  btnDelete_Click( object  sender, EventArgs e)
        {
            
if  (lboxPicPath.SelectedItems.Count  >   0 )
            {
                
for  ( int  i  =  lboxPicPath.SelectedItems.Count  -   1 ; i  >=   0 ; i -- )
                {
                    lboxPicPath.Items.Remove(lboxPicPath.SelectedItems[i]);
                }
            }
            
else
            {
                MessageBox.Show(
" 请选择要移除的文件 " " 提示 " , MessageBoxButtons.OK, MessageBoxIcon.Information);
            }
        }

        
private   void  rbtnbili_CheckedChanged( object  sender, EventArgs e)
        {
            txtbili.Enabled 
=  rbtnbili.Checked;
            
if  (rbtnbili.Checked)
            {
                txtbili.Focus();
            }
        }

        
private   void  rbtnkg_CheckedChanged( object  sender, EventArgs e)
        {
            txtWidth.Enabled 
=  rbtnkg.Checked;
            txtHeight.Enabled 
=  rbtnkg.Checked;
            
if  (rbtnkg.Checked)
            {
                txtWidth.Focus();
            }
        }

    }
}


 源文件下载:点击这里下载

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值