C#如何调整图像大小并以尽可能高的质量保存它们-批处理作业

C#如何调整图像大小并以尽可能高的质量保存它们-批处理作业,c#,image,c#-4.0,resize,C#,Image,C# 4.0,Resize,可能重复: 我想在给定文件夹中调整大小并另存为图像。但我想用尽可能高的质量来做。我愿意使用第三方软件 比如paint.net或photoshop 那么,实现这一目标的最佳方式是什么 谢谢。免责声明:以下链接/代码来自我的博客: 你应该看看我网站上的这篇文章 文章中的代码如下所示: //Image Resize Helper Method private static Bitmap ResizeImage(String filename, int maxWidth, int maxHeight)

可能重复:

我想在给定文件夹中调整大小并另存为图像。但我想用尽可能高的质量来做。我愿意使用第三方软件

比如paint.net或photoshop

那么,实现这一目标的最佳方式是什么


谢谢。

免责声明:以下链接/代码来自我的博客:

你应该看看我网站上的这篇文章

文章中的代码如下所示:

//Image Resize Helper Method
private static Bitmap ResizeImage(String filename, int maxWidth, int maxHeight)
{
    using (Image originalImage = Image.FromFile(filename))
    {
        //Caluate new Size
        int newWidth = originalImage.Width;
        int newHeight = originalImage.Height;
        double aspectRatio = (double)originalImage.Width / (double)originalImage.Height;
        if (aspectRatio <= 1 && originalImage.Width > maxWidth)
        {
            newWidth = maxWidth;
            newHeight = (int)Math.Round(newWidth / aspectRatio);
        }
        else if (aspectRatio > 1 && originalImage.Height > maxHeight)
        {
            newHeight = maxHeight;
            newWidth = (int)Math.Round(newHeight * aspectRatio);
        }
        Bitmap newImage = new Bitmap(newWidth, newHeight);
        using (Graphics g = Graphics.FromImage(newImage))
        {
            //--Quality Settings Adjust to fit your application
            g.InterpolationMode = System.Drawing.Drawing2D.InterpolationMode.HighQualityBilinear;
            g.SmoothingMode = System.Drawing.Drawing2D.SmoothingMode.HighQuality;
            g.PixelOffsetMode = System.Drawing.Drawing2D.PixelOffsetMode.HighQuality;
            g.CompositingQuality = System.Drawing.Drawing2D.CompositingQuality.HighQuality;
            g.DrawImage(originalImage, 0, 0, newImage.Width, newImage.Height);
            return newImage;
        }
    }
}
//图像大小调整帮助器方法
私有静态位图大小图像(字符串文件名、int-maxWidth、int-maxHeight)
{
使用(Image originalImage=Image.FromFile(文件名))
{
//计算新尺寸
int newWidth=原始图像宽度;
int newHeight=原始图像高度;
双纵横比=(双)原始图像.宽度/(双)原始图像.高度;
if(aspectRatio maxWidth)
{
newWidth=maxWidth;
newHeight=(int)Math.Round(newWidth/aspectRatio);
}
else if(aspectRatio>1&&originalImage.Height>maxHeight)
{
newHeight=maxHeight;
newWidth=(int)Math.Round(newHeight*aspectRatio);
}
位图newImage=新位图(newWidth、newHeight);
使用(Graphics g=Graphics.FromImage(newImage))
{
//--质量设置会根据您的应用程序进行调整
g、 插值模式=System.Drawing.Drawing2D.InterpolationMode.HighQuality双线性;
g、 SmoothingMode=System.Drawing.Drawing2D.SmoothingMode.HighQuality;
g、 PixelOffsetMode=System.Drawing.Drawing2D.PixelOffsetMode.HighQuality;
g、 合成质量=System.Drawing.Drawing2D.CompositingQuality.HighQuality;
g、 DrawImage(原始图像,0,0,newImage.Width,newImage.Height);
返回新图像;
}
}
}

您可以将其包装在for循环中进行批处理。

您应该了解颜色量化。我已经为此实现了一个库,它运行得非常好。搜索一下,你会发现很多。今天晚些时候我可能会发布一些代码


编辑:实际上,要更好地展示和描述我在下面讨论的信息类型,请参阅和

但我也可以想象,如果有lanczos的话。我用过,它似乎有一个相当不错的C#包装


质量在很大程度上取决于所使用的插值算法和调整大小的比率。在Paint.net和Photoshop中,它们有一个下拉列表来选择它们。每种算法的最佳性能各不相同(缩小、增大、按整数比例调整大小…),并且每种算法的速度也不同。此外,Paint.net还提供了“最佳质量”选项,可以告诉您它决定使用什么(尽管我不确定超级采样指的是什么…),手动对一些图像和目标大小执行此操作,以查看它使用了什么,这可能有助于您选择更快的算法

@SamPlusPlus的答案使用了高质量双线性,IIRC非常适合调整大小和添加少量模糊(这样锐利的线条将被算法消除锯齿),而双三次曲线将保持线条的更锐利。因此,在这两种情况中,双线性通常更适合于升迁,而双三次曲线通常更适合于缩小规模

我相信该算法是最好的全方位算法之一(在任何规模的大小调整方面都做得很好),但也是较慢的算法之一。我强烈建议,如果你将图像缩小7%(100:93的比例很难缩小)

如果你做的是50%,25%,200%,等等,所有的算法都会得到非常相似的结果,速度是唯一的区别


如果输入或输出文件的大小变化很大,我建议寻找一个具有Lanczos大小调整算法的库,因为无论大小调整的类型如何,它都非常好,而且因为您没有提到速度是重要的,只有质量。我没有在C#中使用过这样的库,因此我没有任何直接的建议。

您希望调整哪些格式?你研究过C#的图像类吗?你已经尝试过什么?我只知道经典的图像处理。因此,我不知道如何调整大小。但主要问题是,我想在调整大小时提高photoshop或paint.net的质量。我想调整png图像的大小。所以,最高质量是我的目标。我可以在photoshop上手动批量调整大小,但我真的需要C应用程序:)@Frank van Puffelen一点也不需要。我所追求的最高质量不仅仅是调整大小:)我链接到的问答中的代码看起来是一个很好的起点。首先,将其应用于您的情况(例如将图像格式更改为png)。谢谢,我将尝试与photoshop&paint.netI进行比较。我应该补充一点,您可以使用bitmap.save方法将其保存回不同的文件格式。它允许您指定图像格式和不同的编码器。谢谢你的回答。我只做下装。我看起来质量最好。因此,时间速度在这里并不重要。你知道有没有使用Lanczos的C#应用程序吗?这似乎是我能找到的主要搜索结果:这也有一些与我所说的类似的好信息(但比我所说的更准确),请参阅更多库的编辑。您也可以通过命令行调用imagemagick的convert.exe,或者使用API:关于imagemagick有很多信息,我已经通过命令行使用了很长一段时间。谢谢,我可以使用imagemagick。软件质量如何?调整大小时等于paint.net或photoshop(低维)