gpt4 book ai didi

c# - 在 C# 中使用 jpegtran、jpegoptim 或其他 jpeg 优化/压缩

转载 作者:太空狗 更新时间:2023-10-30 00:59:03 32 4
gpt4 key购买 nike

我有 100 种(也许 1000 种)产品,每个产品的 10-30 张图片都放在我放在一起的在线商店中。我需要在不降低图像质量的情况下尽可能优化图像的文件大小。

我没有直接使用 jpegtran、jpegoptim 或任何其他 jpeg 优化器,但我注意到 punypng 在较大的 jpeg 图像上无损地将文件大小缩小了大约 4-6%。

元数据在上传期间(通过跳转器)已经从图像中剥离,因此这不再是一个选项/问题。

有什么方法可以让 jpeg 优化器之一从 C# 代码运行?

注意:我正在使用带有 IIS7 和 .Net 3.5 的共享 Godaddy 托管

最佳答案

可能已经晚了 7 年,但我在尝试解决这个问题时遇到了这个问题。我最终设法做到了,这就是解决方案。对于 PNG,您首先需要使用 NuGet 安装 nQuant。

包括:

using System.Web.Hosting;
using System.IO;
using System.Diagnostics;
using nQuant;
using System.Drawing;
using System.Drawing.Imaging;

方法:

    public void optimizeImages()
{
string folder =
Path.Combine(HostingEnvironment.ApplicationPhysicalPath, @"assets\temp");
var files = Directory.EnumerateFiles(folder);

foreach (var file in files)
{
switch (Path.GetExtension(file).ToLower())
{
case ".jpg":
case ".jpeg":
optimizeJPEG(file);
break;
case ".png":
optimizePNG(file);
break;
}

}

}

private void optimizeJPEG(string file)
{
string pathToExe = HostingEnvironment.MapPath("~\\adminassets\\exe\\") + "jpegtran.exe";

var proc = new Process
{
StartInfo =
{
Arguments = "-optimize \"" + file + "\" \"" + file + "\"",
FileName = pathToExe,
UseShellExecute = false,
CreateNoWindow = false,
WindowStyle = ProcessWindowStyle.Hidden,
RedirectStandardError = true,
RedirectStandardOutput = true
}
};

Process jpegTranProcess = proc;

jpegTranProcess.Start();
jpegTranProcess.WaitForExit();
}

private void optimizePNG(string file)
{
string tempFile = Path.GetDirectoryName(file) + @"\temp-" + Path.GetFileName(file);
int alphaTransparency = 10;
int alphaFader = 70;
var quantizer = new WuQuantizer();
using (var bitmap = new Bitmap(file))
{
using (var quantized = quantizer.QuantizeImage(bitmap, alphaTransparency, alphaFader))
{
quantized.Save(tempFile, ImageFormat.Png);

}

}
System.IO.File.Delete(file);
System.IO.File.Move(tempFile, file);
}

它将从/assets/temp 文件夹中获取所有文件并优化 jpeg 和 PNG。我关注了this question对于png部分。我从几个来源抓取的 jpeg 部分。包括PicJamImage Optimizer .我使用它的方式是将用户的所有文件上传到临时文件夹,运行此方法,将文件上传到 azure blob 存储,然后删除本地文件。我下载了 jpegtran here .

关于c# - 在 C# 中使用 jpegtran、jpegoptim 或其他 jpeg 优化/压缩,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/1493532/

32 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com