Перейти к содержанию
Форум поддержки пользователей VamShop

Ресайз картинок при загрузке (VamShop)


Рекомендуемые сообщения

Обнаружил, что картинки ресайзятся не по масштабу указанному в настройках.

Т.е. стоит масштаб ширина=100 высота=75, а реально получаются больше.

Ресайз происходит, но не выдерживается заданный масштаб.

Причем есть варианты, когда все происходит как надо, но в большинстве - по высоте картинки превышают заданный лимит.

Что это может быть? И где можно посмотреть скрипт ресайза?

Ссылка на сообщение
Поделиться на другие сайты

Наверное это как-то с пропорциями картинок связано, т.е. картинка пропорционально режется, а не тупо 100 на 75, что б картинки выглядели прилично, если пропорцию не будет соблюдаться и если например ориришинальная картинка 300 пикселей на 700 пикселей, т.е. сильно вытянута по высоту, в таком случае, тупая нарезка до 100 на 75 будет выглядеть ужасно.

Ссылка на сообщение
Поделиться на другие сайты

Я знаю, что такое ресайз. Понятно: пропорции сохраняются.

Но приличный скрипт ресайза определяет размеры картинки и если картинка "вытянута" по высоте, он ее конвертирует и за основу берет лимит по высоте, в случае если "растянута" по ширине, - лимит по ширине.

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

Так, обнаружил закономерность: "растянутые" по ширине картинки ресайзятся нормально, а вот - по высоте не хотят. Напрашивается вывод: скрипт ресайза - неполноценен...

Щас полезу, посмотрю. О результатах сообщу.

Нашел недостаток:

в файле function/trumbnails_add_funcs.php

в функцию vam_get_image_size необходимо добавить условие:

if (vam_not_null($width) && vam_not_null($height)) {

  $srcratio = $image_size[0] / $image_size[1];

    if ($ratio < $src_ratio) {

    $height = $width / $src_ratio;

}

else {

    $width = $height * $src_ratio;

}

            }

функция полностью:

  function vam_get_image_size($src, $width, $height) {

      if ( (CONFIG_CALCULATE_IMAGE_SIZE == 'true')  ) {

        if ($image_size = @getimagesize($src)) {

      if (vam_not_null($width) && vam_not_null($height)) {

  $srcratio = $image_size[0] / $image_size[1];

    if ($ratio < $src_ratio) {

    $height = $width / $src_ratio;

}

else {

    $width = $height * $src_ratio;

}

            }  elseif (!vam_not_null($width) && vam_not_null($height)) {

              $ratio = $height / $image_size[1];

              $width = $image_size[0] * $ratio;

            } elseif (vam_not_null($width) && !vam_not_null($height)) {

              $ratio = $width / $image_size[0];

              $height = $image_size[1] * $ratio;

            } elseif (!vam_not_null($width) && !vam_not_null($height) or $width > $image_size[0] or $height > $image_size[1]) {

              $width = $image_size[0];

              $height = $image_size[1];

            }

        }

      }

Вот теперь ресайз при закачке работает как надо.

Похоже, Vam, ты упустил это условие по запарке, хотя по логике оно должно быть первым.

Ссылка на сообщение
Поделиться на другие сайты

dionis kudinov

Спасибо большое за решение проблемы.

Добавил данное исправление в исходный код, со следующим патчем будет и это Ваше исправление.

Ссылка на сообщение
Поделиться на другие сайты

Нашел недостаток:

в файле function/trumbnails_add_funcs.php

в функцию vam_get_image_size необходимо добавить условие:

if (vam_not_null($width) && vam_not_null($height)) {

  $srcratio = $image_size[0] / $image_size[1];

    if ($ratio < $src_ratio) {

    $height = $width / $src_ratio;

}

else {

    $width = $height * $src_ratio;

}

            }

А чему в момент if ($ratio < $src_ratio) { равен $ratio? null?

Ссылка на сообщение
Поделиться на другие сайты

Ну вот, хором и решили задачку.

ABerezin, конечно же надо добавить строчку $ratio = $width / $height;

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

Кстати, по невнимательности допустил ошибку: вместо $src_ratio написал $srcratio - исправте у себя плиз.

Погонял скрипт с разными картинками: длинными, высокими и тд - вроде на этот раз без глюков.

Но как знать, никогда не говори никогда.

Последний <<релиз>>

  function vam_get_image_size($src, $width, $height) {

      if ( (CONFIG_CALCULATE_IMAGE_SIZE == 'true')  ) {

        if ($image_size = @getimagesize($src)) {

      if (vam_not_null($width) && vam_not_null($height)) {

  $ratio = $width / $height;

  $src_ratio = $image_size[0] / $image_size[1];

    if ($ratio < $src_ratio) {

    $height = $width / $src_ratio;

}

else {

    $width = $height * $src_ratio;

}

            }  elseif (!vam_not_null($width) && vam_not_null($height)) {

              $ratio = $height / $image_size[1];

              $width = $image_size[0] * $ratio;

            } elseif (vam_not_null($width) && !vam_not_null($height)) {

              $ratio = $width / $image_size[0];

              $height = $image_size[1] * $ratio;

            } elseif (!vam_not_null($width) && !vam_not_null($height) or $width > $image_size[0] or $height > $image_size[1]) {

              $width = $image_size[0];

              $height = $image_size[1];

            }

        }

      }

Ссылка на сообщение
Поделиться на другие сайты
×
×
  • Создать...