2016-06-08 5 views

Répondre

-1

Vous ne pouvez pas, aujourd'hui - ImageResizer & pairs utilisent l'API Windows pour les codecs jpeg/png/gif, ce qui les lie à .NET pleine.

Nous avons un ongoing Kickstarter for libimageflow pour développer une bibliothèque d'imagerie multi-plateforme qui peut être un remplacement supérieur pour System.Drawing - et peut fonctionner sur toutes les plates-formes.

libimageflow est un prototype à ce stade; multi-plateforme et multi-langue. Nous prévoyons également de créer un serveur autonome que vous pouvez utiliser n'importe où.

+0

Merci Nathanael pour cette réponse rapide. –

+0

Cela ne répond pas à ce qu'il demande. Comment pouvez-vous faire fonctionner ImageReizer avec le noyau asp.net fonctionnant sur le framework .net? – Mardoxx

0

est ici un POC de travail qui simule ce faire 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); 
      } 
     } 
    } 
} 

Ensuite, vous pouvez l'utiliser en allant http://localhost/{container}/{blobPath.ext}?{imageResizer_queryString}