修改图片大小和质量 C#

本文介绍了一种使用C#编程语言实现的批量处理图片大小和质量的方法,通过创建两个类来分别处理图片大小和图片质量,适用于大量图片的快速处理。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

转自:http://bbs.esrichina-bj.cn/ESRI/viewthread.php?tid=129365&extra=page%3D4

有时候我们在做一些事情的时候会用到处理很多张图片,处理的内容就是修改成同样大小的,当图片少的时候很简单,但是当图片很多,成百上千的时候就手都处理比较慢,如此就会想到批处理,于是乎就有了下面这些代码:

首先,看看实现的效果吧:

只是为了演示效果,随便找了张照片,总共87张照片
1.jpg

这是程序运行时的效果:
2.jpg

处理完成后的效果,将所有的图片定义成了同样大小的了:
3.jpg

这是完成后图片的属性:
4.jpg

下面才是关键的:
我的程序是在控制台运行的,我先新建了一个类:
  1. using System;
  2. using System.IO;
  3. using System.Collections;
  4. using System.Drawing;//not in this
  5. using System.Drawing.Drawing2D;
  6. using System.Drawing.Imaging;//in this ImageFormat.Jpeg


  7. namespace ResizePhoto
  8. {
  9.     public class ResizePic
  10.     {
  11.         /// <summary>
  12.         /// 修改图片大小
  13.         /// </summary>
  14.         /// <param name="szdir"></param>
  15.         /// <param name="width"></param>
  16.         /// <param name="height"></param>
  17.         public void resize_pic(string szdir, int width, int height)
  18.         {
  19.             int i = 0;
  20.             Image img = null;
  21.             Image bmcpy = null;
  22.             Graphics gh = null;
  23.             string szsavedir = Directory.CreateDirectory(szdir + "\\resized").FullName.ToString();
  24.             string[] szfiles = Directory.GetFiles(szdir, "*.jpg");
  25.             foreach (string szfile in szfiles)
  26.             {
  27.                 img = Image.FromFile(szfile);
  28.                 bmcpy = new Bitmap(width, height);
  29.                 gh = Graphics.FromImage(bmcpy);
  30.                 gh.DrawImage(img, new Rectangle(0, 0, width, height));
  31.                 bmcpy.Save(szsavedir + "\\" + i.ToString() + ".jpg", ImageFormat.Jpeg);
  32.                 i++;
  33.                 Console.WriteLine("第" + i.ToString() + "照片已经处理完毕,总共" + szfiles.Length + "张图片");
  34.             }
  35.             gh.Dispose();
  36.             bmcpy.Dispose();
  37.             img.Dispose();
  38.             Console.WriteLine("{0}张图片已经处理完毕", i);
  39.             Console.ReadKey(true);
  40.         }

  41.         /// <summary>
  42.         /// 改变图片质量
  43.         /// </summary>
  44.         /// <param name="szdir"></param>
  45.         /// <param name="lqulity"></param>
  46.         public void rebdqulity_pic(string szdir, long lqulity)
  47.         {
  48.             int i = 0;
  49.             Bitmap myBitmap;
  50.             ImageCodecInfo myImageCodecInfo;
  51.             Encoder myEncoder;
  52.             EncoderParameter myEncoderParameter;
  53.             EncoderParameters myEncoderParameters;

  54.             // Get an ImageCodecInfo object that represents the JPEG codec.
  55.             myImageCodecInfo = GetEncoderInfo("image/jpeg");
  56.             myEncoder = Encoder.Quality;
  57.             myEncoderParameters = new EncoderParameters(1);

  58.             myEncoderParameter = new EncoderParameter(myEncoder, lqulity);
  59.             myEncoderParameters.Param[0] = myEncoderParameter;
  60.             string szsavedir = Directory.CreateDirectory(szdir + "\\quality").FullName.ToString();
  61.             string[] szfiles = Directory.GetFiles(szdir, "*.jpg");
  62.             foreach (string szfile in szfiles)
  63.             {
  64.                 myBitmap = new Bitmap(szfile);
  65.                 myBitmap.Save(szsavedir + @"\quli" + i.ToString() + ".jpg", myImageCodecInfo, myEncoderParameters);
  66.                 i++;
  67.             }
  68.         }

  69.         private static ImageCodecInfo GetEncoderInfo(String mimeType)
  70.         {
  71.             int j;
  72.             ImageCodecInfo[] encoders;
  73.             encoders = ImageCodecInfo.GetImageEncoders();
  74.             for (j = 0; j < encoders.Length; ++j)
  75.             {
  76.                 if (encoders[j].MimeType == mimeType)
  77.                     return encoders[j];
  78.             }
  79.             return null;
  80.         }
  81.     }
  82. }
复制代码
接着在控制台程序调用这个类:
  1. static void Main(string[] args)
  2.         {
  3.             ResizePic resizepic = new ResizePic();
  4.             string strDir = @"test";
  5.             int width = 390;
  6.             int height = 567;
  7.             long quality = 500;
  8.             resizepic.resize_pic(strDir,width,height);
  9.             resizepic.rebdqulity_pic(strDir, quality);
  10.         }
复制代码
程序比较简单,还望能够帮到有用之人……

ResizePhoto.zip (68.18 KB)
这是程序源码,有需要的清下……
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值