ФорумПрограммированиеPHP для идиотов → Создание аватарки 50х50

Создание аватарки 50х50

  • Ivan

    Сообщения: 1316 Репутация: N Группа: Адекваты

    Spritz 11 апреля 2012 г. 13:35

    Для приведения изображения к нужной ширине без разработанности картинки, я использовал следующую формулу:
    H = (h/w)W


    W - ширина, к которой надо привести
    H - нужная высота изображения
    h,w - оригинальные высота и ширина изображения

    Но теперь мне нужно изображение аватарки именно 50х50, как будет поступить разумнее? В голове пока крутится один вариант - просчитывать размеры высоты до тех пор, пока она не будет больше или равно 50, а затем обрезать уже 50х50 от уменьшенного изображения

    $W = 50;
    while ($H < 50) {
    $H = $h / $w * $W++;
    }
  • Sinkler

    Сообщения: 7958 Репутация: N Группа: в ухо

    Spritz 11 апреля 2012 г. 13:37, спустя 1 минуту 52 секунды

    вот вы любите мудрить
    http://debugger.ru/articles/thumbnails
  • phpdude

    Сообщения: 26646 Репутация: N Группа: в ухо

    Spritz 11 апреля 2012 г. 13:38, спустя 1 минуту 2 секунды

    crop center thumbnail
    Сапожник без сапог
  • Ivan

    Сообщения: 1316 Репутация: N Группа: Адекваты

    Spritz 11 апреля 2012 г. 13:42, спустя 4 минуты 2 секунды


    crop center thumbnail


    Почему именно центр?
  • Ivan

    Сообщения: 1316 Репутация: N Группа: Адекваты

    Spritz 11 апреля 2012 г. 13:50, спустя 7 минут 46 секунд

    Вот пример на javascript

    var aspectWidth = 50, needleWidth = 50, needleHeight = 0;

    /* демо-данные */
    var width = 2816, height = 2112;

    /* расчет */
    while (needleHeight < 50)
    needleHeight = height / width * aspectWidth++;

    alert('Needle height: ' + needleHeight + '; Aspect width: ' + aspectWidth);


    Выводит Needle height: 50.25; Aspect width: 68

    Уменьшаем изображение до этих размеров, и затем с левого верхнего края отрезаем квадрат 50х50
  • Ivan

    Сообщения: 1316 Репутация: N Группа: Адекваты

    Spritz 11 апреля 2012 г. 13:55, спустя 5 минут 25 секунд

    Пример на моей аватарке:
  • artoodetoo

    Сообщения: 5147 Репутация: N Группа: в ухо

    Spritz 11 апреля 2012 г. 13:58, спустя 3 минуты 6 секунд

    почему с левого верхнего? ))) на свою аву посмотри и прикинь откуда лучше вырезать
    Спустя 24 сек.
    ну ты понял
    ιιlllιlllι унц-унц
  • Ivan

    Сообщения: 1316 Репутация: N Группа: Адекваты

    Spritz 11 апреля 2012 г. 14:05, спустя 6 минут 38 секунд

    Кто так поиздевался над моей аватркой?
  • phpdude

    Сообщения: 26646 Репутация: N Группа: в ухо

    Spritz 11 апреля 2012 г. 14:06, спустя 1 минуту 21 секунду

    Почему именно центр?

    ну а как ты себе представляешь картинки из любых размеров сделать 50x50? :)

    ии ты при загрузке будешь проверять размер, чтобы они были квадратные? )
    Спустя 36 сек.

    Кто так поиздевался над моей аватркой?
    ахаххах, четсно не я)
    Сапожник без сапог
  • master

    Сообщения: 3244 Репутация: N Группа: Джедаи

    Spritz 11 апреля 2012 г. 14:08, спустя 1 минуту 47 секунд

    http://ru-php.livejournal.com/1424646.html
    не всё полезно, что в swap полезло
  • artoodetoo

    Сообщения: 5147 Репутация: N Группа: в ухо

    Spritz 11 апреля 2012 г. 14:17, спустя 8 минут 30 секунд

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

    ок. это я поиздевался для иллюстрации. исходная ава в твоей подписи.

    вот ништяковая функция для масштабирования. может обрезать, может не обрезать:

    function makeThumbnail($srcFile, $dstFile, $thumbWidth, $thumbHeight, $crop = FALSE)
    {
    $rgb = 0xFFFFFF;
    $quality = 80;
    $size = @getimagesize($srcFile);
    $offsetX = $offsetY = 0;

    if ($size === FALSE) return FALSE;

    $format = strtolower(substr($size['mime'], strpos($size['mime'], '/') + 1));
    $icfunc = 'imagecreatefrom' . $format;
    if (!function_exists($icfunc)) return FALSE;

    $origImg = $icfunc($srcFile);
    if (($size[0] <= $thumbWidth) && ($size[1] <= $thumbHeight)) {
    // use original size
    $width = $size[0];
    $height = $size[1];
    } else {
    $width = $thumbWidth;
    $height = $thumbHeight;

    // calculate fit ratio
    $ratioX = $size[0] / $thumbWidth;
    $ratioY = $size[1] / $thumbHeight;

    if ($ratioX < $ratioY) {
    if ($crop) {
    $offsetY = ($size[1] - $thumbHeight * $ratioX) / 2;
    $size[1] = $thumbHeight * $ratioX;
    } else {
    $width = $size[0] / $ratioY;
    $height = $thumbHeight;
    }
    } else {
    if ($crop) {
    $offsetX = ($size[0] - $thumbWidth * $ratioY) / 2;
    $size[0] = $thumbWidth * $ratioY;
    } else {
    $width = $thumbWidth;
    $height = $size[1] / $ratioX;
    }
    }
    }

    $thumImg = imagecreatetruecolor($width, $height);
    imagefill($thumImg, 0, 0, $rgb);
    imagecopyresampled($thumImg, $origImg, 0, 0, $offsetX, $offsetY, $width, $height, $size[0], $size[1]);

    imagejpeg($thumImg, $dstFile, $quality);
    imagedestroy($origImg);
    imagedestroy($thumImg);

    return TRUE;
    }


    ιιlllιlllι унц-унц
  • master

    Сообщения: 3244 Репутация: N Группа: Джедаи

    Spritz 11 апреля 2012 г. 14:16, спустя 23 часа 59 минут 26 секунд

    Аватарки нужно рисовать отдельно
    не всё полезно, что в swap полезло
  • Ivan

    Сообщения: 1316 Репутация: N Группа: Адекваты

    Spritz 11 апреля 2012 г. 14:21, спустя 4 минуты 49 секунд

    Вот так правильнее будет:



    var needleWidth = 50;

    /* демо-данные: аватарка дуда */
    var width = 87, height = 150;

    /* расчет */
    var aspectWidth = needleWidth - 1, needleHeight = 0;
    while (needleHeight < needleWidth)
       needleHeight = Math.floor(height / width * ++aspectWidth);
     
    alert('Needle height: ' + needleHeight + '; Aspect width: ' + aspectWidth);


    Needle height: 86; Aspect width: 50

    Обрезаем до 50х86:



    Теперь если взять слева сверху, то получим:



    А если с центра, то получим:



    Вывод какой?
  • artoodetoo

    Сообщения: 5147 Репутация: N Группа: в ухо

    Spritz 11 апреля 2012 г. 14:22, спустя 52 секунды

    Вывод какой?

    дуд плохой?
    ιιlllιlllι унц-унц
  • master

    Сообщения: 3244 Репутация: N Группа: Джедаи

    Spritz 11 апреля 2012 г. 14:22, спустя 14 секунд

    отучайтесь работать с GD/GD2, чё вы как дети
    не всё полезно, что в swap полезло

Пожалуйста, авторизуйтесь, чтобы написать комментарий!