程序员懒吧?呵呵。
只要能找到一个好用的,我是绝对不会自己写一个出来的。因为WordPress的图库插件NextGEN Gallery破算法不能压缩太大的文件,PHP执行内存不足,同样的照片跑在同一环境下的Gallery2处理起来很轻松,还能一下执行N张呢…
没办法只好先把照片压缩下在传上去了。找个好几个批量压缩软件都不如意,没办法只好自己写一个了。

界面是这样子的:

[singlepic=15854,700,510]

核心算法其实非常简单:

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

namespace JPGCompact
{
    public partial class MainForm : Form
    {
        /// <summary>
        /// 保存JPG时用
        /// </summary>
        /// <param name="mimeType">文件类型</param>
        /// <returns>得到指定mimeType的ImageCodecInfo</returns>
        private static ImageCodecInfo GetCodecInfo(string mimeType)
        {
            ImageCodecInfo[] CodecInfo = ImageCodecInfo.GetImageEncoders();
            foreach (ImageCodecInfo ici in CodecInfo)
            {
                if (ici.MimeType == mimeType) return ici;
            }
            return null;
        }

        /// <summary>
        /// 保存为JPEG格式,支持压缩质量选项
        /// </summary>
        /// <param name="bmp">原始位图</param>
        /// <param name="FileName">新文件地址</param>
        /// <param name="Qty">压缩质量,越大越好,文件也越大(0-100)</param>
        /// <returns>成功标志</returns>
        public static bool SaveAsJPEG(Bitmap bmp, string FileName, int Qty)
        {
            try
            {
                EncoderParameter p;
                EncoderParameters ps;
                ps = new EncoderParameters(1);
                p = new EncoderParameter(System.Drawing.Imaging.Encoder.Quality, Qty);
                ps.Param[0] = p;
                bmp.Save(FileName, GetCodecInfo("image/jpeg"), ps);
                return true;
            }
            catch
            {
                return false;
            }
        }

        private bool CompressPicture(string sourcePath, string targetPath)
        {
            try
            {
                // 大小比率
                double sizeRate = double.Parse(cbSizeRate.Text) / 100;
                // 品质比率
                int qualityRate = int.Parse(cbQualityRate.Text);

                Image sourceImage = Image.FromFile(sourcePath);
                // 调整图片大小
                Bitmap bmp = new Bitmap(
                    sourceImage,
                    new Size(
                        (int)(sourceImage.Width * sizeRate),
                        (int)(sourceImage.Height * sizeRate)));
                // 压缩图片
                SaveAsJPEG(bmp, targetPath, qualityRate);

                GC.Collect();

                return true;
            }
            catch
            {
                return false;
            }
        }
    }
}

比较有技术含量的是那个Exif信息的读取,一会儿我写一篇说说那个怎么做。

下载地址:http://download.nocoo.us/Download/Archive/JPGCompact.rar