Поздравляю! Вы попали в архивный блог! Все новые материалы публикуются на hmdw.meX
Просмотров: 3478

Мультизагрузчик изображений на базе swfupload

Выкладываю сюда мультизагрузчик изображений на основе swfipload. Изначально это был пример с сайта simplecoding.org, но я его немного модифицировал добавив ресайз картинок  в превьюшки размером по 500 пикселей в ширину. Индивидуальные настройки скрипта можете проводить в файле upload.php и js/main.js

Листинг файла upload.php:

<?php
$uploadDir = 'img/'; //папка для хранения файлов
$dir = '/i/'; //базовый путь к скрипту
$mwidth = 500; //ширина превью в пикселях
$allowedExt = array('jpg', 'jpeg', 'png', 'gif');
$maxFileSize = 2 * 1024 * 1024; //2 MB
//если получен файл
if (isset($_FILES)) {
    //проверяем размер и тип файла
    $ext = end(explode('.', strtolower($_FILES['Filedata']['name'])));
    if (!in_array($ext, $allowedExt)) {
        return;
    }
    if ($maxFileSize < $_FILES['Filedata']['size']) {
        return;
    }
    if (is_uploaded_file($_FILES['Filedata']['tmp_name'])) {
    //Магия с созданием уникального имени. Начало
        $fileName = $uploadDir.$_FILES['Filedata']['name'];
        $nameParts = explode('.', $_FILES['Filedata']['name']);
        $nameParts[count($nameParts)-2] =substr(md5(time()),7);
        $fileName = $uploadDir.implode('.', $nameParts);
        //если файл с таким именем уже существует... Невероятное! =)
        while(file_exists($fileName)) {
            //...добавляем текущее время к имени файла
            $nameParts = explode('.', $_FILES['Filedata']['name']);
            $nameParts[count($nameParts)-2] =substr(md5(time()),7);
            $fileName = $uploadDir.implode('.', $nameParts);
        }
        //Генерим путь к mini
        $dirParts=explode('/',$fileName);
        $dirParts[0].="/mini";
        $fileName2 = implode('/',$dirParts);
    //Магия с созданием уникального имени. Конец
        move_uploaded_file($_FILES['Filedata']['tmp_name'], $fileName);
        //Костыль ресайза картинок до width:500px; начало
        // Get new sizes
        list($width, $height) = getimagesize($fileName);
        if($width>$mwidth) {
        $newwidth=$mwidth;
        $k=$newwidth/$width;
        $newheight = $height * $k;
        // Load
        $thumb = imagecreatetruecolor($newwidth, $newheight);
        $source = imagecreatefromjpeg($fileName);
    
        // Resize
        imagecopyresampled($thumb, $source, 0, 0, 0, 0, $newwidth, $newheight, $width, $height);
        imagejpeg($thumb, $fileName2);
        $ext='<a href="'.$dir.$fileName.'"><img src="'.$dir.$fileName2.'"/></a>';
        echo $ext."<br/>";
        echo '<input type="text" size="150" value="'.htmlspecialchars($ext).'"><br />';
        }
        //Костыль ресайза картинок до width:500px; конец
        else {
            $ext='<img src="'.$dir.$fileName.'"/>';
        echo $ext."<br/>";
        echo '<input type="text" size="150" value="'.htmlspecialchars($ext).'"><br />';
        }
    }
}

Полный пример скрипта: i.zip

UPD: Изменил imagecopyresized на imagecopyresampled чтобы ресайзнутые изображения выглядели получше.

Актуальная версия скрипта на GitHub - https://github.com/rhamdeew/mod-swfupload

twitter.com facebook.com vkontakte.ru odnoklassniki.ru livejournal.ru yandex.ru
Теги:
Эта запись опубликована: Воскресенье, 26 февраля 2012 в рубрике Web-разработка.

Оставьте комментарий!