JPG批量裁剪以生成方形缩略图

Posted

技术标签:

【中文标题】JPG批量裁剪以生成方形缩略图【英文标题】:JPG cropping in batch to generate square thumbnails 【发布时间】:2011-03-04 21:42:34 【问题描述】:

我正在寻找一种用于裁剪图像文件的轻量级批处理工具。 由于纵横比可以是 3:4 或 4:3,所以要围绕中心进行裁剪 这意味着对于较高的图像,将在顶部和底部进行裁剪以生成方形图像。 对于较宽的图像,将在左右两侧进行裁剪以生成方形图像。

有人用过这样的工具吗?我正在使用 .NET 4.0 和 C#

我不是在寻找 ImageMagick 或 nConvert。

【问题讨论】:

【参考方案1】:

这个拳头创建了一个内存位图square,其大小与原始的正方形相匹配。然后将其缩小到thumbSize

string imagefolder = @"C:\Users\russ\Originals";
string thumbfolder = @"C:\Users\russ\Squares";
int thumbSize = 100;

foreach (string file in System.IO.Directory.GetFiles(imagefolder, "*.jpg"))

    using (Image original  = Bitmap.FromFile(file))
    
        Size size = new Size(
            Math.Min(original.Width, original.Height),
            Math.Min(original.Width, original.Height)
        );
        int translateX = (size.Width - original.Width) / 2;
        int translateY = (size.Height - original.Height) / 2;

        using (Bitmap square = new Bitmap(size.Width, size.Height))
        
            using (Graphics g = Graphics.FromImage(square))
            
                 g.DrawImage(original, translateX, translateY, original.Width, original.Height);
            

            using (Bitmap thumb = new Bitmap(thumbSize, thumbSize))
            
                using (Graphics g2 = Graphics.FromImage(thumb))
                
                    g2.DrawImage(square, 0, 0, thumbSize, thumbSize);
                
                string thumbFile = Path.Combine(thumbfolder, Path.GetFileName(file));
                thumb.Save(thumbFile, ImageFormat.Jpeg);
            

        
    

【讨论】:

【参考方案2】:

看看ImageMagick.NET。 Imagemagick 是一组用于 linux 的命令行工具和库,似乎有人将其移植到 windows/.NET。我从未使用过裁剪功能,但可以确定它可以满足您的需求。更多信息和用法似乎是here,该项目的旧页面。

【讨论】:

以上是关于JPG批量裁剪以生成方形缩略图的主要内容,如果未能解决你的问题,请参考以下文章

从纵向缩略图生成方形图像

使用 C# System.Drawing 生成缩略图时居中裁剪图像

生成分辨率相同的缩略图(裁剪)

批量生成缩略图

PHP GD - 如何修改我的缩略图创建器以从中心裁剪肖像图像?

缩略图含裁剪文件