Каков наилучший класс для изменения размера и оптимизации изображений на веб-страницах во время загрузки? - PullRequest
2 голосов
/ 05 апреля 2011

Я ищу класс (с c #), который проверяет размеры моего изображения (ширина и высота) (или размер изображения в килобайтах) и, если они не совпадают с моими любимыми размерами, измените их размер (среднее значение с помощью Constrain и относительной ширины) & height новый размер как в фотошопе размер изображения = чтобы мы не потеряли внешний вид изображения)

Есть много классов для этой работы / но какой из них лучше?

спасибо в будущем заранее

Ответы [ 3 ]

8 голосов
/ 05 апреля 2011

Это метод, который я использую для изменения размера, когда я указываю желаемую ширину:

private Image ResizeImage(Image original, int targetWidth)
{
    double percent = (double)original.Width / targetWidth;
    int destWidth = (int)(original.Width / percent);
    int destHeight = (int)(original.Height / percent);

    Bitmap b = new Bitmap(destWidth, destHeight);
    Graphics g = Graphics.FromImage((Image)b);
    try
    {
        g.InterpolationMode = InterpolationMode.HighQualityBicubic;
        g.SmoothingMode = SmoothingMode.HighQuality;
        g.PixelOffsetMode = PixelOffsetMode.HighQuality;
        g.CompositingQuality = CompositingQuality.HighQuality;

        g.DrawImage(original, 0, 0, destWidth, destHeight);
    }
    finally
    {
        g.Dispose();
    }

    return (Image)b;
}
2 голосов
/ 05 апреля 2011

Этот , кажется, очень высоко ценится вокруг этих частей.

Другие ответы на этот вопрос включают ссылки на несколько других вариантов, включая Imagemagick .

0 голосов
/ 07 ноября 2014
public static class clsImageResize
{
    public static int TnewWidth { get; set; }
    public static int TnewHeight { get; set; }
    public static string TfilePath { get; set; }

    public static void Resize(string filePath, int newWidth, int newHeight)
    {
        TfilePath = filePath;
        TnewWidth = newWidth;
        TnewHeight = newHeight;
        Bitmap image = new Bitmap(TfilePath);
        //Image m = Image.FromFile(TfilePath);
        Save(image, TnewWidth, TnewHeight, 8, TfilePath);
    }

    private static void Save(Bitmap image, int maxWidth, int maxHeight, int quality, string filePath)
    {
        // Get the image's original width and height
        int originalWidth = image.Width;
        int originalHeight = image.Height;

        // To preserve the aspect ratio
        float ratioX = (float)maxWidth / (float)originalWidth;
        float ratioY = (float)maxHeight / (float)originalHeight;
        float ratio = Math.Min(ratioX, ratioY);

        // New width and height based on aspect ratio
        int newWidth = (int)(originalWidth * ratio);
        int newHeight = (int)(originalHeight * ratio);

        // Convert other formats (including CMYK) to RGB.
        Bitmap newImage = new Bitmap(newWidth, newHeight, PixelFormat.Format24bppRgb);

        // Draws the image in the specified size with quality mode set to HighQuality
        using (Graphics graphics = Graphics.FromImage(newImage))
        {
            graphics.CompositingQuality = CompositingQuality.HighQuality;
            graphics.InterpolationMode = InterpolationMode.HighQualityBicubic;
            graphics.SmoothingMode = SmoothingMode.HighQuality;
            graphics.DrawImage(image, 0, 0, newWidth, newHeight);
        }

        // Get an ImageCodecInfo object that represents the JPEG codec.
        ImageCodecInfo imageCodecInfo = GetEncoderInfo(ImageFormat.Jpeg);

        // Create an Encoder object for the Quality parameter.
        Encoder encoder = Encoder.Quality;

        // Create an EncoderParameters object. 
        EncoderParameters encoderParameters = new EncoderParameters(1);

        image.Dispose();
        // Save the image as a JPEG file with quality level.
        EncoderParameter encoderParameter = new EncoderParameter(encoder, quality);
        encoderParameters.Param[0] = encoderParameter;
        newImage.Save(filePath, imageCodecInfo, encoderParameters);
    }

    private static ImageCodecInfo GetEncoderInfo(ImageFormat format)
    {
        return ImageCodecInfo.GetImageDecoders().SingleOrDefault(c => c.FormatID == format.Guid);
    }
}
...