gpt4 book ai didi

.net - 如何在 webapi 中手动优化文件夹中的多个图像(减小文件大小)?

转载 作者:行者123 更新时间:2023-12-02 22:28:41 25 4
gpt4 key购买 nike

大家好我正在使用 webapi 我需要优化来自此处文件夹的图像我已经将图像上传到一个文件夹 在上传到目标文件夹之前我需要减少总图像的图像大小(以 KB 为单位) 我正在将 单个图像优化为 3 种不同的尺寸'(大、缩略图、中)',但图像尺寸增加了 和保存在一个文件夹中现在我需要优化那些图像,你能帮帮我吗我怎么能那样做。实际上我是 webapi 的新手。任何人都可以有任何想法请帮助我,但我需要做一件事 this manually提前谢谢你

这是我的 Controller

public Task<HttpResponseMessage> Post()
{
if (!Request.Content.IsMimeMultipartContent("form-data"))
{
throw new HttpResponseException(HttpStatusCode.UnsupportedMediaType);
}

var uploadFolder = HostingEnvironment.MapPath("~/App_Sprites/UploadFolder");
uploadFolder = Path.Combine(uploadFolder, DateTime.Now.ToString("yyyyMMddhhmmssfff"));
Directory.CreateDirectory(uploadFolder);
var streamProvider = new PreserveFilenameMultipartFileStreamProvider(uploadFolder);

return Request.Content.ReadAsMultipartAsync(streamProvider).ContinueWith(t =>
{
foreach (var uploadedFile in Directory.GetFiles(uploadFolder))
{
var thumbnail = Path.Combine(uploadFolder, "thumb-" + Path.GetFileName(uploadedFile));
var medium = Path.Combine(uploadFolder, "medium-" + Path.GetFileName(uploadedFile));
var large = Path.Combine(uploadFolder, "large-" + Path.GetFileName(uploadedFile));
ImageTools.Resize(uploadedFile, thumbnail, 80, 80);
ImageTools.Resize(uploadedFile, medium, 48, 48);
ImageTools.Resize(uploadedFile, large, 128, 128);
}
return Request.CreateResponse(HttpStatusCode.Accepted);
});
}
}

abd 这是我的类文件

 public class ImageTools
{
public static void Resize(string original, string output, int width, int height)
{
using (var image = Image.FromFile(original))
using (var thumbnail = new Bitmap(width, height))
using (var graphics = Graphics.FromImage(thumbnail))
{
graphics.InterpolationMode = InterpolationMode.HighQualityBicubic;
graphics.SmoothingMode = SmoothingMode.HighQuality;
graphics.PixelOffsetMode = PixelOffsetMode.HighQuality;
graphics.CompositingQuality = CompositingQuality.HighQuality;

graphics.DrawImage(image, 0, 0, width, height);

ImageCodecInfo[] info = ImageCodecInfo.GetImageEncoders();
EncoderParameters encoderParameters;
encoderParameters = new EncoderParameters(1);
encoderParameters.Param[0] = new EncoderParameter(Encoder.Quality, 100L);
thumbnail.Save(output, info[1], encoderParameters);
}
}
}

类文件

 public class PreserveFilenameMultipartFileStreamProvider : MultipartFileStreamProvider
{
public PreserveFilenameMultipartFileStreamProvider(string rootPath)
: base(rootPath)
{
}

public override string GetLocalFileName(HttpContentHeaders headers)
{
return headers.ContentDisposition.FileName.Replace("\"", "");
}
}

这是我的布局页面

@using (Html.BeginRouteForm("DefaultApi", new { httproute = "", controller = "Upload" }, FormMethod.Post, new { enctype = "multipart/form-data" }))
{
<input type="file" name="image" multiple="multiple" accept="image/*" />
<button type="submit">Upload</button>
}

我已经创建了一个文件夹,现在图像保存在文件夹中,但文件大小增加了 kb,但我们需要减少,请帮助我

最佳答案

您应该为 QualityLevel 添加一个参数到您的 Resize 方法,并使用此参数更改不同的渲染。

您在将质量设置为完整的情况下调整图像大小,这不是很有效。

您应该尝试指定另一种文件格式,我不知道您使用的是哪种文件格式,但是 .PNG 用于小图像,.JPG 用于大图像帮助。 (.GIF如果你真的需要额外的字节)

一些图像处理应该在使用图像之前完成,但我想你在这里真的没有选择。

关于.net - 如何在 webapi 中手动优化文件夹中的多个图像(减小文件大小)?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/12596287/

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