Как вы выровняете загруженную фотографию без отступов с пробелами в C #? - PullRequest
3 голосов
/ 06 августа 2010

На моем сайте пользователи могут загружать фотографии. В настоящее время я сжимаю и изменяю размер фотографии, чтобы убедиться, что они не являются большими файлами. Но это создает фотографии разных размеров ... что делает сайт немного "некрасивым", на мой взгляд.

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

Ответы [ 4 ]

3 голосов
/ 06 августа 2010

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

  public Bitmap CreateThumbnail(Bitmap RawImage)
    {
        int width = RawImage.Width;
        int height = RawImage.Height;

        Size ThumbnailDimensions = new Size();
        ThumbnailDimensions.Width = 100;
        ThumbnailDimensions.Height = 100;

        Rectangle cropArea = new Rectangle();
        if (width > height)
        {               
            cropArea.Width = height;
            cropArea.Height = height;
            cropArea.X = 0;
            cropArea.Y = 0;                
        }
        else if (width < height)
        {
            cropArea.Width = width;
            cropArea.Height = width;
            cropArea.X = 0;
            cropArea.Y = 0;
        }
        if(width != height) Bitmap thumbnail = CropImage(RawImage, cropArea);

        thumbnail = ResizeImage(thumbnail, ThumbnailDimensions);
        return thumbnail;
    }

Это просто обрезка из верхнего левого угла, а затем изменение размера до размеров моего эскиза.

2 голосов
/ 06 августа 2010

Я полагаю, вам нужно взять самое короткое измерение ( w или h ) и использовать его в качестве вашего измерения для создания обрезанного изображения, по сути, вы можете обрезать имасштабировать изображение.Посмотрите эту статью в качестве примера обрезки изображения.Также проверьте этот вопрос переполнения стека относительно качества изображения.

0 голосов
/ 06 августа 2010

Чтобы превратить прямоугольник в квадрат, вам нужно либо дополнить его, изменить размер без сохранения соотношения сторон или обрезать (или комбинации).

Вот код для обрезки

http://snippets.dzone.com/posts/show/1484

(я работаю на Atalasoft - в нашем DotImage Photo SDK), это

AtalaImage img = new AtalaImage("filename.jpg");
AtalaImage img2 = new CropCommand( /*point and size of crop */).Apply(img).Image;
img2.Save("filename", new JpegEncoder(quality), null);
0 голосов
/ 06 августа 2010

Вместо обрезки я бы сделал div или что-то еще, чтобы вы поместили их в фиксированный квадратный размер. Масштабируйте изображение, чтобы оно поместилось внутри этого квадрата.

Как бы вы решили обрезать его? Сверху слева? Нижний правый? Центр

...