.net core 跨平台获取多个图片地址,压缩成zip文件流
时间: 2023-11-25 14:06:52 浏览: 44
好的,针对你的问题,我可以提供以下的思路:
1. 使用 .NET Core 的 System.IO 和 System.IO.Compression 命名空间来实现文件读写和压缩功能。
2. 使用 HttpClient 类获取多个图片的地址,可以使用 Task.WhenAll() 方法来异步并行获取多个图片。
3. 使用 ImageSharp 或者 Magick.NET 等 .NET Core 图像处理库来压缩图片。你可以根据需要选择其中一个库进行使用,这里以 ImageSharp 为例,示例代码如下:
```csharp
using SixLabors.ImageSharp;
using SixLabors.ImageSharp.Processing;
public async Task<Stream> CompressImagesAsync(IEnumerable<string> imageUrls)
{
var outputStream = new MemoryStream();
using (var zipArchive = new ZipArchive(outputStream, ZipArchiveMode.Create, true))
{
foreach (var imageUrl in imageUrls)
{
using (var httpClient = new HttpClient())
{
var imageBytes = await httpClient.GetByteArrayAsync(imageUrl);
using (var imageStream = new MemoryStream(imageBytes))
{
var image = Image.Load(imageStream);
image.Mutate(x => x.Resize(new ResizeOptions
{
Size = new Size(800, 600),
Mode = ResizeMode.Max
}));
var entry = zipArchive.CreateEntry(Path.GetFileName(imageUrl));
using (var entryStream = entry.Open())
{
image.Save(entryStream, new JpegEncoder());
}
}
}
}
}
outputStream.Seek(0, SeekOrigin.Begin);
return outputStream;
}
```
该方法输入参数为多个图片的 URL 地址集合,返回值为压缩后的 Zip 文件流。
4. 最后,你可以将压缩后的 Zip 文件流返回给客户端,供客户端进行下载操作。
希望以上的思路对你有所帮助!