gpt4 book ai didi

c# - 如何使用 asp.net 压缩图像而不损失图像质量

转载 作者:太空宇宙 更新时间:2023-11-03 16:35:15 25 4
gpt4 key购买 nike

我必须使用 java 脚本上传多张图片。所以我需要在不降低图像质量的情况下压缩这些图像。

我必须将所有图像存储在物理文件夹“上传”中。

HttpFileCollection hfc = Request.Files;
for (int i = 0; i < hfc.Count; i++) {
HttpPostedFile hpf = hfc[i];
if (hpf.ContentLength > 0) {
hpf.SaveAs(Server.MapPath("~/uploads/") +System.IO.Path.GetFileName(hpf.FileName));
}
}

所以我需要在上传到物理文件夹时压缩图像而不降低图像质量

最佳答案

我建议将图像转换为 PNG,然后使用内置的 ZIP 压缩。

public static void SaveToPNG(Bitmap SourceImage, string DestinationPath)
{
SourceImage.Save(DestinationPath, ImageFormat.Png);
CompressFile(DestinationPath, true);
}

private static string CompressFile(string SourceFile, bool DeleteSourceFile)
{
string TargetZipFileName = Path.ChangeExtension(SourceFile, ".zip");

using (ZipArchive archive = ZipFile.Open(TargetZipFileName, ZipArchiveMode.Create))
{
archive.CreateEntryFromFile(SourceFile, Path.GetFileName(SourceFile),CompressionLevel.Optimal);
}

if(DeleteSourceFile == true)
{
File.Delete(SourceFile);
}
return TargetZipFileName;
}

或者如果您不介意有一点不明显的损失,那么您可以将其转换为高质量的 JPG,然后将其压缩。在 100% 的质量下,您的用户可能不会注意到任何差异,质量越低,图像就会越小,但这会破坏您的“无质量损失”条件。

private static ImageCodecInfo __JPEGCodecInfo = null;
private static ImageCodecInfo _JPEGCodecInfo
{
get
{
if (__JPEGCodecInfo == null)
{
__JPEGCodecInfo = ImageCodecInfo.GetImageEncoders().ToList().Find(delegate (ImageCodecInfo codec) { return codec.FormatID == ImageFormat.Jpeg.Guid; });
}
return __JPEGCodecInfo;
}
}
public static void SaveToJPEG(Bitmap SourceImage, string DestinationPath, long Quality)
{
EncoderParameters parameters = new EncoderParameters(1);

parameters.Param[0] = new EncoderParameter(Encoder.Quality, Quality);

SourceImage.Save(DestinationPath, _JPEGCodecInfo, parameters);

CompressFile(DestinationPath, true);
}

private static string CompressFile(string SourceFile, bool DeleteSourceFile)
{
string TargetZipFileName = Path.ChangeExtension(SourceFile, ".zip");

using (ZipArchive archive = ZipFile.Open(TargetZipFileName, ZipArchiveMode.Create))
{
archive.CreateEntryFromFile(SourceFile, Path.GetFileName(SourceFile),CompressionLevel.Optimal);
}

if(DeleteSourceFile == true)
{
File.Delete(SourceFile);
}
return TargetZipFileName;
}

关于c# - 如何使用 asp.net 压缩图像而不损失图像质量,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/9310534/

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