Как создать thumbnail при загрузке фотографи

karen12

Постоялец
Регистрация
26 Фев 2012
Сообщения
108
Реакции
4
Имеется скрипт загрузки фото из dropzone в оригинальном размере. Как создать еще и мини фото (thumbnail), при загрузке??
Код:
//ob_start();

if(!empty($_FILES)){
   
    $image_code = $_POST['eid'];
    $targetDir = "../uploads/";
    $fileName = $_FILES['file']['name'];
    $targetFile = $targetDir.$fileName;
   
   
move_uploaded_file($_FILES['file']['tmp_name'],$targetFile);

echo listfiles();
}

function listfiles(){
    $files = array();

$dir = opendir('../uploads/');
while ($file = readdir($dir)) {
    if ($file == '.' || $file == '..') {
        continue;
    }

    $files[] = $file;
}

return json_encode($files);
}
 
Запили ресайзилку, функция imagecopyresampled(), в сети полно готовых решений, но мне интереснее было бы самому сделать.
Там код на 5 строк.
 
Размер изменяем пропорционально, как я понимаю?
Использую эту функцию, в комментах все есть

В $tmp_path - путь к папке с файлом
PHP:
// Функция изменения размера
// Изменяет размер изображения в зависимости от type:
//    type = 1 - эскиз
//     type = 2 - большое изображение
//    rotate - поворот на количество градусов (желательно использовать значение 90, 180, 270)
//    quality - качество изображения (по умолчанию 75%)
function resize($file, $type = 1, $rotate = null, $quality = null)
{
    global $tmp_path;

    // Ограничение по ширине в пикселях
    $max_thumb_size = 200;
    $max_size = 600;

    // Качество изображения по умолчанию
    if ($quality == null)
        $quality = 75;

    // Cоздаём исходное изображение на основе исходного файла
    if ($file['type'] == 'image/jpeg')
        $source = imagecreatefromjpeg($file['tmp_name']);
    elseif ($file['type'] == 'image/png')
        $source = imagecreatefrompng($file['tmp_name']);
    elseif ($file['type'] == 'image/gif')
        $source = imagecreatefromgif($file['tmp_name']);
    else
        return false;
      
    // Поворачиваем изображение
    if ($rotate != null)
        $src = imagerotate($source, $rotate, 0);
    else
        $src = $source;

    // Определяем ширину и высоту изображения
    $w_src = imagesx($src);
    $h_src = imagesy($src);

    // В зависимости от типа (эскиз или большое изображение) устанавливаем ограничение по ширине.
    if ($type == 1)
        $w = $max_thumb_size;
    elseif ($type == 2)
        $w = $max_size;

    // Создаём пустую картинку
    $dest = imagecreatetruecolor($w, $w);

    // Вырезаем квадратную серединку по x, если фото горизонтальное
    if ($w_src > $h_src)
        imagecopyresampled($dest, $src, 0, 0, round((max($w_src, $h_src) - min($w_src, $h_src))/2), 0, $w, $w, min($w_src, $h_src), min($w_src, $h_src));
    // Вырезаем квадратную серединку по y, если фото горизонтальное
    elseif ($w_src < $h_src)
        imagecopyresampled($dest, $src, 0, 0, 0, round((max($w_src, $h_src) - min($w_src, $h_src))/2), $w, $w, min($w_src, $h_src), min($w_src, $h_src));
    // Квадратная картинка масштабируется без вырезок
    elseif ($w_src == $h_src)
        imagecopyresampled($dest, $src, 0, 0, 0, 0, $w, $w, $w_src, $w_src);

    // Вывод картинки и очистка памяти
    imagejpeg($dest, $tmp_path . $file['name'], $quality);
    imagedestroy($dest);
    imagedestroy($src);
      
    return $file['name'];
}
 
Может не туда пишу, но тему свою тему создать не могу.
Подскажите как вытащить с сервера оригинальное изображение на примере этой ссылке - Для просмотра ссылки Войди или Зарегистрируйся

Спасибо.
 
  • Заблокирован
  • #5
если постоянно пользоваться, то лучше создать библиотеку,
а можно использовать просто скрипт, разместить где то у себя на сервере или не у себя и использовать
phpThumb
и уже так
<img src="phpThumb.php?src=/path/image.jpg&w=100&hash=xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx">

в итоге, загрузить изображение, сделает все настройки и в итоге будет выдано преобразованное изображение в браузер
 
Назад
Сверху