• Создание миниатюр на PHP

    by  • 03.12.2009 • php, программирование • Комментарии [6]

    Часто бывает нужным создание пропорционально уменьшенных миниатюр фотографий или больших картинок (thumbnail). В основном это применяется для галерей, но порой нужно переслать кому-то много фотографий, а интернет-канал не шибко широкий. Вот для этих целей и подойдет мой маленький скрипт на PHP, уменьшающий изображения из указанной папки и сохраняя полученные картинки в папку со скриптом (пути легко настраиваются).
    Пока мы умеем работать только с jpg, на этот скрипт послужит, скорее всего, началом к созданию галереи на jQuery и PHP, как единого целого. Хватит слов, перейдем к делу.
    Создаем скрипт

    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    <?php
    $width = 300;
    $height = 200;
    //задаем размеры миниатюр
    foreach (glob("./imgs/*.jpg") as $filename) {
        $i++; //будущее название миниатюры
        $size = getimagesize($filename); //размер изображения
        $format = strtolower(substr($size['mime'], strpos($size['mime'], '/') + 1));
       //mime-тип
        $icFunc = "imagecreatefrom" . $format;
       //создаем изображение на основе mime-типа
        $xRatio = $width / $size[0];
        $yRatio = $height / $size[1];
        //высчитываем пропорции и определяем наибольшую сторону
       //чтобы было пропорционально
        $ratio = min($xRatio, $yRatio);
        $use_x_ratio = ($xRatio == $ratio);

        $new_width = $use_x_ratio ? $width : floor($size[0] * $ratio);
        $new_height = !$use_x_ratio ? $height : floor($size[1] * $ratio);
        $new_left = $use_x_ratio ? 0 : floor(($width - $new_width) / 2);
        $new_top = !$use_x_ratio ? 0 : floor(($height - $new_height) / 2);
        //непосредственно сам ресайз
        $isrc = $icFunc($filename);
        $idest = imagecreatetruecolor($width, $height);
        imagecopyresampled($idest, $isrc, $new_left, $new_top, 0, 0,
       $new_width, $new_height, $size[0], $size[1]);
        //создаем изображение и записываем его в файл
       //!!!ОБЯЗАТЕЛЬНО: папка, куда сохраняем должна доступна быть для записи
        imagejpeg($idest, "$i.jpg", 100);
        imagedestroy($isrc);
        imagedestroy($idest);
        echo "<img src=\"$i.jpg\" />";
       //выводим череду миниатюр, полученныз из больших картинок
        }
    ?>

    После нам нужно найти кучу фотографий большого объема и сохранить их в папку imgs, расширение у файлов должно быть jpg.
    Запускаем скрипт и вуаля, получаем в папке со скриптом миниатюры, размеры которых легко задаются в начале скрипта PHP.
    Результат выполнения скрипта можно узреть тут. Все получено из фотографий более чем 3хмегабайтного размера.

    Комментарии к "Создание миниатюр на PHP"

    1. alex
      02.04.2010 at 13:25

      скрипт искажает миниатюру до неузнаваемости! как сделать, чтобы пропорционально уменьшал?

    2. admin
      03.04.2010 at 21:29

      у меня вроде нормально уменьшает, приведите пример неправильно работающего кода
      спасибо

    3. 27.04.2010 at 14:17

      Интересно а как можно уменьшить изображение не пропорыционально а чтобы был один размер у мини картинок и при том не искажались пропорции

    4. admin
      31.05.2010 at 17:03

      для этого нужно заполнять чем-нибудь получающиеся границы

    5. 28.12.2010 at 19:41

      $new_height = !$use_y_ratio ? $height : floor($size[1] * $ratio);
      нужно исправить на
      $new_height = !$use_x_ratio ? $height : floor($size[1] * $ratio);

      а заливку делать надо либо белым
      $idest = imagecreatetruecolor($width, $height);
      imagefill($idest, 0, 0, 0xffffff);
      либо любым другим цветом

    Добавить комментарий

    Ваш e-mail не будет опубликован. Обязательные поля помечены *