2009-10-01 7 views
3

Нам нужна возможность изящно изменить размер любой фотографии/изображения на точную ширину/высоту без искажения изображения. Мы можем использовать стороннее решение, или мы можем использовать встроенную функциональность .NET для этого. Я думал, что это должно быть легким решением, без необходимости программирования сложного алгоритма.Изменение размера изображения ASP.NET

Пример сценарий (Мы хотим, чтобы все добавления быть изменены до 200x100 пикселей)
пейзажа фото с размерами в 1250x800:
Изменения размера ширины в 200px будет пропорционально поставить высоту в 128px, так что дополнительный 28px будет обрезано сверху и снизу.

Пейзажная фотография с размерами 1250x500:
Изменение размера до 200px пропорционально помещает вершину на 80 пикселей, поэтому нам нужно будет поймать это и изменить размер по высоте в первую очередь. Положив высоту на 100 пикселей, пропорционально установите ширину в 250 пикселей. Дополнительные 50px нужно будет обрезать с боков фотографии.

Портретное фото с размерами в 800x950:
Изменение размера ширины 200px бы пропорционально поставить высоту в 238px, так что дополнительные 138px будут обрезаны из верхней и нижней части.

+1

Вы желая на самом деле изменить изображение и сохранить его в этих новых измерениях или просто отображать в IMG тег с этими новыми размерами и пусть масштаб браузера это? –

+0

Вы действительно хотите, чтобы новое изображение было ровно 200X100 или вы просто хотите, чтобы изображение размером с размерность было размером 200x100? – wcm

+1

Я бы подумал, что лучше добавить пробелы вместо обрезки, чтобы достичь размера. Таким образом, вы не потеряете ничего важного в изображении. – mxmissile

ответ

1

Вы можете сделать это с помощью Bitmap class, например:

using (Bitmap original= new Bitmap(...)) { //A stream or a filename 
    //Calculate the desired size using original.Height and original.Width 

    Bitmap newImage = new Bitmap(newWidth, newHeight); 

    using(Graphics g = Graphics.FromImage(newImage) { 

Вызов this overload из g.DrawImage сделать обрезанную часть исходного изображения на новое изображение.

} 
} 
0

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

Изменение размера изображения 1250x800 до 156.25x100. Полученное изображение затем может быть центрировано в пределах кадра 200x100. Если это пользователь, выполняющий задачу, у вас может быть опция предварительного просмотра, которая позволяет им увидеть, подходит ли их масштабированное изображение в пределах требуемых границ.

0

GDI + отлично работает в ASP.NET. (WPF раньше, но не сейчас).

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

Кроме того, я обнаружил, что подход стека на основе работал хорошо для представления преобразований:

http://www.hackification.com/2008/10/29/stack-based-processing-part-2/

0

Я столкнулся с этим точно такую ​​же вещь, когда-то давно. Вот статья, которую я использовал high quality image resize with .net. Изображения JPG работают лучше всего. Не было хороших результатов с изображениями GIF.

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

Это ваш выбор как для обрезки, так и для пробелов. Я решил делать урожай, потому что мне не нравилось пустое пространство. Выглядит уродливо. Он работает хорошо в большинстве случаев, если у вас есть центрированное изображение и обрезано либо сверху & внизу, либо слева & справа.

Вот короткая статья о cropping image.

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

+0

Ваш код будет очень благодарен. Благодаря! –

0

Вы можете видеть на этом сообщении кто-то только что созданный образец приложения для изменения размера изображения.

Они также предоставляют Rescue Image Resizer для справки.

Sample Image Resizer in C#
Image Resizer Class C#

Смежные вопросы