zoukankan      html  css  js  c++  java
  • c#目录以及子目录下图片批量缩放,像素不变,图像大小改变

    采用多线程,整体效果

    图像根目录黏贴或者手工选择,点击开始,进行目录底下图片筛查。采用多线程,点击开始按钮,开启线程,这样UI不会卡住

    private void button2_Click(object sender, EventArgs e)
    {
    var foldPath = textBox1.Text.Trim();
    if (string.IsNullOrEmpty(foldPath))
    {
    return;
    }
    ImageZoomThread(foldPath);
    }
    

      

    线程方法:

    private void ImageZoomThread(string foldPath)
            {
                ThreadStart threadStart = delegate { listBox1.Items.Clear(); ZoomImage(foldPath); };
    
                Thread thread = new Thread(threadStart);
    
                thread.IsBackground = true;
    
                thread.Start();
            }
    

      

    缩放图像,核心代码:

     private void ZoomImage(string foldPath)
            {
                DirectoryInfo dir = new DirectoryInfo(foldPath);
                FileInfo[] files = dir.GetFiles("*.jpg");
                DirectoryInfo[] dii = dir.GetDirectories();  
    
                foreach (var file in files)
                {
                    listBox1.Items.Add(file.FullName);
                        listBox1.SelectedIndex = -1;
                        ChangeImageSize(file.FullName, file.FullName.Replace(".jpg", "_zoom.jpg"));
                }
    
                //获取子文件夹内的文件列表,递归遍历  
                foreach (DirectoryInfo d in dii)
                {
                    ZoomImage(d.FullName);
                }  
            }
    
            /// <summary>
            /// 压缩图片
            /// </summary>
            /// <param name="filePath">要压缩的图片的路径</param>
            /// <param name="newfilePath">压缩后的图片的路径</param>
            public void ChangeImageSize(string filePath, string newfilePath)
            {
                Bitmap bmp = null;
                ImageCodecInfo ici = null;
                System.Drawing.Imaging.Encoder ecd = null;
                EncoderParameter ept = null;
                EncoderParameters eptS = null;
                try
                {
                    ici = this.getImageCoderInfo("image/jpeg");
                    ecd = System.Drawing.Imaging.Encoder.Quality;
                    eptS = new EncoderParameters(1);
                    ept = new EncoderParameter(ecd, 35L);
                    eptS.Param[0] = ept;
                    if (File.Exists(newfilePath))
                    {
                        File.Delete(newfilePath);
                    }
                   bmp = new Bitmap(filePath);
                    
                    bmp.Save(newfilePath, ici, eptS);
                    if (bmp != null)
                        bmp.Dispose();
                    ept.Dispose();
                    eptS.Dispose();
                }
                catch (Exception ex)
                {
                    //throw new Exception(ex.Message);
                }
                finally
                {
                    
                }
            }
    
            /// <summary>
            /// 获取图片编码类型信息
            /// </summary>
            /// <param name="coderType">编码类型</param>
            /// <returns>ImageCodecInfo</returns>
            private ImageCodecInfo getImageCoderInfo(string coderType)
            {
                ImageCodecInfo[] iciS = ImageCodecInfo.GetImageEncoders();
                ImageCodecInfo retIci = null;
                foreach (ImageCodecInfo ici in iciS)
                {
                    if (ici.MimeType.Equals(coderType))
                        retIci = ici;
                }
                return retIci;
            }
    

      

  • 相关阅读:
    二月12日
    十日冲刺
    十日冲刺
    十日冲刺
    十日冲刺
    十日冲刺
    十日冲刺
    十日冲刺
    一周进度条博客
    十天冲刺
  • 原文地址:https://www.cnblogs.com/y114113/p/7641706.html
Copyright © 2011-2022 走看看