ImageResizer and ASP.NET Core Web Application (.NET Framewor



在哪里可以找到基于 ASP.NET Core Web Application (.NET Framework) 的 ImageResizer (ImageResizing.net) 独立网站的完整示例?

"frameworks": { "net461": { } },

这是一个模拟 ImageResizer + AzureReader2 工作的工作 PoC。

启动.cs

using Microsoft.AspNetCore.Builder;
using Microsoft.AspNetCore.Hosting;
using Microsoft.Extensions.DependencyInjection;
using Microsoft.Extensions.Logging;
namespace ImageResizerSvc
{
    public class Startup
    {
        // This method gets called by the runtime. Use this method to add services to the container.
        // For more information on how to configure your application, visit https://go.microsoft.com/fwlink/?LinkID=398940
        public void ConfigureServices(IServiceCollection services)
        {
            services.AddMvc();
            services.AddSingleton(x =>
            {
                var config = new ImageResizer.Configuration.Config();
                // install plugins, e.g.
                // new PrettyGifs().Install(config);
                return config;
            });
        }
        // This method gets called by the runtime. Use this method to configure the HTTP request pipeline.
        public void Configure(IApplicationBuilder app, IHostingEnvironment env, ILoggerFactory loggerFactory)
        {
            loggerFactory.AddConsole();
            if (env.IsDevelopment())
            {
                app.UseDeveloperExceptionPage();
            }
            app.UseMvc(routes =>
            {
                routes.MapRoute("default", "{controller=Home}/{action=Index}/{id?}");
                routes.MapRoute("imageresizer", "{*path}",
                    defaults: new { controller = "Images", action = "Resizer" });
            });
        }
    }
}

图像控制器.cs

using ImageResizer;
using Microsoft.AspNetCore.Mvc;
using Microsoft.WindowsAzure.Storage;
using System;
using System.IO;
using System.Net;
using System.Threading.Tasks;
namespace ImageResizerSvc.Controllers
{
    public class ImagesController : Controller
    {
        private readonly ImageResizer.Configuration.Config _imageResizerConfig;
        public ImagesController(ImageResizer.Configuration.Config imageResizerConfig)
        {
            _imageResizerConfig = imageResizerConfig ?? throw new ArgumentNullException(nameof(imageResizerConfig));
        }
        public async Task<IActionResult> Resizer()
        {
            // Init storage account
            var connectionString = "UseDevelopmentStorage=true";
            CloudStorageAccount.TryParse(connectionString, out CloudStorageAccount cloudStorageAccount);
            var cloudBlobClient = cloudStorageAccount.CreateCloudBlobClient();
            // Get blob ref
            var storagePath = cloudBlobClient.BaseUri.ToString().TrimEnd('/', '\');
            var blobPath = Request.Path.Value.Trim('/', '\');
            var blobUri = new Uri($"{storagePath}/{blobPath}");
            using (var sourceStream = new MemoryStream(4096))
            {
                try
                {
                    var blob = await cloudBlobClient.GetBlobReferenceFromServerAsync(blobUri);
                    await blob.DownloadToStreamAsync(sourceStream);
                    sourceStream.Seek(0, SeekOrigin.Begin);
                }
                catch (StorageException e)
                {
                    // Pass to client
                    if (Enum.IsDefined(typeof(HttpStatusCode), e.RequestInformation.HttpStatusCode))
                    {
                        return StatusCode(e.RequestInformation.HttpStatusCode, e.RequestInformation.HttpStatusMessage);
                    }
                    throw;
                }
                var destinationStream = new MemoryStream(4096);
                var instructions = new Instructions(Request.QueryString.Value);
                var imageJob = _imageResizerConfig.Build(new ImageJob(sourceStream, destinationStream, instructions));
                destinationStream.Seek(0, SeekOrigin.Begin);
                return File(destinationStream, imageJob.ResultMimeType);
            }
        }
    }
}

然后你可以通过去使用它http://localhost/{container}/{blobPath.ext}?{imageResizer_queryString}

Imageflow.NET 服务器

是相当于ImageResizer的.NET Core,但速度要快得多,生成的图像文件要小得多。请参阅 https://github.com/imazen/imageflow-dotnet-server

如果要做自己的中间件,请直接使用 Imageflow.NET。见 https://github.com/imazen/imageflow-dotnet

[免责声明:我是ImageResizer和Imageflow的作者]