Что я могу сделать, чтобы изменить размер изображения, передав параметр width в запросе? - PullRequest
0 голосов
/ 09 декабря 2018

Мне нужны мои сжатые изображения, но я не хочу сжимать их при загрузке и не хочу изменять ширину и высоту, используя CSS или подобные вещи.Я хочу назвать изображение как:

<img src="/images/exaple.png?width200px">

и мое изображение размером 2000px x 1000px будет 200px x 100px на моей странице.

Я нашел только программы, за которые вы должны заплатитьи, кроме того, у меня нет сервера Linux для установки этой программы, так как я работаю в Windows.

1 Ответ

0 голосов
/ 09 декабря 2018

Сначала я делаю ширину как переменную, добавляя =

<img src="/images/exaple.png?width=200px">

Затем вам нужно обработать статический файл изображения, используя asp.net.
Статические файлы, такие как изображения, не передаются изasp.net, если вы не объявите его на обработчиках web.config

<httpHandlers>
    <add verb="*" path="*.bmp" type="ImageHandler.HttpImageHandler,ImageHandler"/>
    <add verb="*" path="*.jpg" type="ImageHandler.HttpImageHandler,ImageHandler"/>
    <add verb="*" path="*.gif" type="ImageHandler.HttpImageHandler,ImageHandler"/>
    <add verb="*" path="*.png" type="ImageHandler.HttpImageHandler,ImageHandler"/>
</httpHandlers>

И, наконец, вам нужно создать обработчик

using System;
using System.Web;
using System.IO;
using System.Drawing;
using System.Drawing.Imaging;

namespace ImageHandler{
    public class HttpImageHandler: IHttpHandler{
    int Width = 0;
    int Height = 0;

    public void ProcessRequest(System.Web.HttpContext context)
    {
      if(context.Request.Params["height"] != null){
        try{
           Height = int.Parse(context.Request.Params["height"]);
        }catch{
           Height = 0;
        }
      }

      if(context.Request.Params["width"] != null){
        try{
           Width = int.Parse(context.Request.Params["width"]);
        }catch{
           Width = 0;
        }
      }

      if (Width <= 0 && Height <=0)
      {               
        context.Response.Clear();
        context.Response.ContentType = 
        getContentType(context.Request.PhysicalPath);
        context.Response.WriteFile(context.Request.PhysicalPath);
        context.Response.End();
      }
      else 
      {
        context.Response.Clear();
        context.Response.ContentType = 
        getContentType(context.Request.PhysicalPath);
        byte[] buffer = 
        getResizedImage(context.Request.PhysicalPath,Width,Height);
        context.Response.OutputStream.Write
        (buffer, 0, buffer.Length);
        context.Response.End();
      }
    }

    public bool IsReusable{
        get{
            return false;
        }
    }

    byte[] getResizedImage(String path ,int width,int height)
    {
        Bitmap imgIn = new Bitmap(path);
        double y  = imgIn.Height;
        double x  = imgIn.Width;

        double factor = 1;
        if(width > 0){
            factor = width/x;
        }else if (height>0){
            factor = height/y;
        }
        System.IO.MemoryStream outStream = 
        new System.IO.MemoryStream();
        Bitmap imgOut = 
        new Bitmap((int)(x * factor),(int)(y * factor));
        Graphics g = Graphics.FromImage(imgOut);
        g.Clear(Color.White);
        g.DrawImage(imgIn,new Rectangle(0,0,(int)(factor * x),
        (int)(factor * y)),
        new Rectangle(0,0,(int)x,(int)y),GraphicsUnit.Pixel);

        imgOut.Save(outStream, getImageFormat(path));
        return outStream.ToArray();
    }  

    string getContentType(String path){
        switch (Path.GetExtension(path)) {
            case ".bmp": return "Image/bmp";
            case ".gif": return "Image/gif";
            case ".jpg": return "Image/jpeg";
            case ".png": return "Image/png";
            default :  break;
        }
        return "";
    }

    ImageFormat getImageFormat(String path){
        switch (Path.GetExtension(path)) {
            case ".bmp": return ImageFormat.Bmp;
            case ".gif": return ImageFormat.Gif;
            case ".jpg": return ImageFormat.Jpeg;
            case ".png": return ImageFormat.Png;
            default :  break;
        }
        return ImageFormat.Jpeg;
    }
    }
}

Ссылка: Обработчики HTTP для изображений в ASP.NET

Другие примеры: https://www.c -sharpcorner.com / UploadFile / dacca2 / работа с изображением в httphandler /

http://www.wrox.com/WileyCDA/Section/Two-ASP-NET-HttpHandler-Image-Hacks.id-291916.html

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...