Изменение размера изображения - PullRequest
2 голосов
/ 15 ноября 2009

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

Например, если пространство, в которое необходимо изменить размер изображения, составляет 100 по ширине и 100 по высоте, а изображение имеет размер 150 на 90, то его ширина должна быть уменьшена. Если изображение 80 на 160, то высота должна быть уменьшена.

Итак, я спрашиваю, как можно изменить приведенный ниже код, чтобы он уменьшал изображение по соотношению сторон, чтобы соответствовать параметрам ширины и высоты? Спасибо.

jQuery.fn.resizeHeightMaintainRatio = function(newHeight){
if (this.aspectRatio == undefined) 
this.aspectRatio = parseInt($(this).width() / $(this).height());
$(this).height(newHeight); 
$(this).width(newHeight * this.aspectRatio);
}

Я отредактировал код еще раз, так как при дальнейшей проверке ни моя обновленная версия, ни версия Дэна, похоже, не работали должным образом. Соотношение сторон было потеряно, так что вот еще один. Я попробовал это на одном изображении и пока все хорошо. Вот оно,

        jQuery.fn.resizeMaintainRatio = function(newHeight, newWidth){
            widthRatio = parseInt($(this).width() / newWidth);
            heightRatio = parseInt($(this).height() / newHeight);

            if(heightRatio > widthRatio)
            {

                this.aspectRatio = parseInt($(this).css("width") / $(this).css("height"));

                $(this).css("height", newHeight);
                $(this).css("width", newHeight * this.aspectRatio);

            }
            else{

                this.aspectRatio = parseInt($(this).css("height") / $(this).css("width"));

                $(this).css("width", newWidth);
                $(this).css("height", newWidth * this.aspectRatio);

            }

        }

ПРИМЕЧАНИЕ СНОВА: после дальнейшего использования приведенный выше код работает очень странно, попробуйте вместо этого - http://plugins.jquery.com/project/kepresize

Ответы [ 3 ]

3 голосов
/ 15 ноября 2009

Следующий код определит, какая сторона должна быть масштабирована (работает с не квадратными прямоугольниками, для которых просто проверка ширины и высоты не подойдет) и масштабируется в соответствии с этим.

Это также увеличит изображение, если оно меньше, чем поле newWidth * newHeight. Если вы не хотите увеличивать его, где я переключаю соотношение, проверьте, если ширина ИЛИ высота> 1, то и только тогда делайте масштаб.

Отказ от ответственности: код не был выполнен, но концепция должна быть правильной.

РЕДАКТИРОВАТЬ Обновлено с исправлениями OP.

jQuery.fn.resizeHeightMaintainRatio = function(newHeight, newWidth){
   widthRatio = parseInt($(this).width() / newWidth);
   heightRatio = parseInt($(this).height() / newHeight);
   if(widthRatio < 1 && heightRatio < 1){
      widthRatio = heightRatio;
      heightRatio = widthRatio;
   }
   if(widthRatio > heightRatio){
      $(this).width(newWidth); 
      $(this).height(newHeight / widthRatio);
   } else
   {
      $(this).height(newHeight); 
      $(this).width(newWidth / heightRatio);
   }
}
1 голос
/ 15 ноября 2009

Вы должны проверить на $(this).width() > $(this).height() Если это правда, вызовите width-версию этого кода, в противном случае назовите эту точную версию.

0 голосов
/ 13 апреля 2011

Там нет учета количества копий и наклеек, а! Я также хотел знать это, и все, что я видел, было бесконечными примерами масштабирования ширины ИЛИ высоты .. кто бы хотел, чтобы другой переполнился?!

  • Изменение ширины и высоты без необходимости петли
  • Не превышает исходные размеры изображений
  • Используется математика, которая работает должным образом, т.е. ширина / аспект для высоты и высота * аспект для ширины, поэтому изображения фактически масштабируются должным образом вверх и вниз: /

Должно быть достаточно простым, чтобы конвертировать в javascript или другие языки

//////////////

private void ResizeImage(Image img, double maxWidth, double maxHeight)
{
    double srcWidth = img.Source.Width;
    double srcHeight = img.Source.Height;

    double resizeWidth = srcWidth;
    double resizeHeight = srcHeight;

    double aspect = resizeWidth / resizeHeight;

    if (resizeWidth > maxWidth)
    {
        resizeWidth = maxWidth;
        resizeHeight = resizeWidth / aspect;
    }
    if (resizeHeight > maxHeight)
    {
        aspect = resizeWidth / resizeHeight;
        resizeHeight = maxHeight;
        resizeWidth = resizeHeight * aspect;
    }

    img.Width = resizeWidth;
    img.Height = resizeHeight;
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...