您的位置:首页 > 编程语言 > C#

修改图片大小和质量 C#

2013-06-27 14:46 274 查看

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

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

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

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



这是程序运行时的效果:



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



这是完成后图片的属性:



下面才是关键的:

我的程序是在控制台运行的,我先新建了一个类:

using System;

using System.IO;

using System.Collections;

using System.Drawing;//not in this

using System.Drawing.Drawing2D;

using System.Drawing.Imaging;//in this ImageFormat.Jpeg

namespace ResizePhoto

{

public class ResizePic

{

/// <summary>

/// 修改图片大小

/// </summary>

/// <param name="szdir"></param>

/// <param name="width"></param>

/// <param name="height"></param>

public void resize_pic(string szdir, int width, int height)

{

int i = 0;

Image img = null;

Image bmcpy = null;

Graphics gh = null;

string szsavedir = Directory.CreateDirectory(szdir + "\\resized").FullName.ToString();

string[] szfiles = Directory.GetFiles(szdir, "*.jpg");

foreach (string szfile in szfiles)

{

img = Image.FromFile(szfile);

bmcpy = new Bitmap(width, height);

gh = Graphics.FromImage(bmcpy);

gh.DrawImage(img, new Rectangle(0, 0, width, height));

bmcpy.Save(szsavedir + "\\" + i.ToString() + ".jpg", ImageFormat.Jpeg);

i++;

Console.WriteLine("第" + i.ToString() + "照片已经处理完毕,总共" + szfiles.Length + "张图片");

}

gh.Dispose();

bmcpy.Dispose();

img.Dispose();

Console.WriteLine("{0}张图片已经处理完毕", i);

Console.ReadKey(true);

}

/// <summary>

/// 改变图片质量

/// </summary>

/// <param name="szdir"></param>

/// <param name="lqulity"></param>

public void rebdqulity_pic(string szdir, long lqulity)

{

int i = 0;

Bitmap myBitmap;

ImageCodecInfo myImageCodecInfo;

Encoder myEncoder;

EncoderParameter myEncoderParameter;

EncoderParameters myEncoderParameters;

// Get an ImageCodecInfo object that represents the JPEG codec.

myImageCodecInfo = GetEncoderInfo("image/jpeg");

myEncoder = Encoder.Quality;

myEncoderParameters = new EncoderParameters(1);

myEncoderParameter = new EncoderParameter(myEncoder, lqulity);

myEncoderParameters.Param[0] = myEncoderParameter;

string szsavedir = Directory.CreateDirectory(szdir + "\\quality").FullName.ToString();

string[] szfiles = Directory.GetFiles(szdir, "*.jpg");

foreach (string szfile in szfiles)

{

myBitmap = new Bitmap(szfile);

myBitmap.Save(szsavedir + @"\quli" + i.ToString() + ".jpg", myImageCodecInfo, myEncoderParameters);

i++;

}

}

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;

}

}

}

复制代码
接着在控制台程序调用这个类:

static void Main(string[] args)

{

ResizePic resizepic = new ResizePic();

string strDir = @"test";

int width = 390;

int height = 567;

long quality = 500;

resizepic.resize_pic(strDir,width,height);

resizepic.rebdqulity_pic(strDir, quality);

}

复制代码
程序比较简单,还望能够帮到有用之人……



ResizePhoto.zip
(68.18 KB)

这是程序源码,有需要的清下……
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: