2016-06-08 121 views

回答

-1

你不能,今天 - ImageResizer &同行使用JPEG/PNG/GIF编解码器在Windows API,这其中的联系,.NET完整。

我们有一个ongoing Kickstarter for libimageflow来开发一个跨平台的图像库,它可以成为System.Drawing的优越替代品 - 并且可以在所有平台上工作。

libimageflow是一个在这一点上的工作原型;跨平台和多语言。我们还计划创建一个可以在任何地方使用的独立服务器。

+0

用它感谢您拿但这个快速的解答。 –

+0

这并不回答他问的问题。如何让ImageReizer与运行在.net框架上的asp.net核心一起工作? – Mardoxx

0

下面是一个工作PoC,它模拟了ImageResizer + AzureReader2的功能。

Startup.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" }); 
      }); 
     } 
    } 
} 

ImagesController.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}

相关问题