Загрузка и ресайз изображений

Деймос
На сайте с 10.09.2008
Offline
138
1290

Добрый день ув. форумчани.

Мне понадобился готовый класс или функция которая загружает и ресайзит изображение, плюс создает миниатюру (почему готовый? - сам пока к сожалению не могу написать подобное) - я нагуглил вот такой с виду замечательный класс - http://net.tutsplus.com/tutorials/php/image-resizing-made-easy-with-php/

Но к сожалению он работает только уже с загруженными изображениями на сервере, я сделал вот такой костыль:


if(isset($_POST['doUpload'])){
include("resize-class.php");
copy($_FILES['userfile']['tmp_name'], 'temp/'.$_FILES['userfile']['name']);
$resizeObj = new resize('temp/'.$_FILES['userfile']['name']);
$resizeObj -> resizeImage(400, 400, 'auto'); //Основное изображение
$resizeObj -> saveImage('images/news/'.$_GET['id'].'.jpg', 90);
$resizeObj -> resizeImage(100, 100, 'crop'); //Миниатюра
$resizeObj -> saveImage('images/news/'.$_GET['id'].'s.jpg', 90);
unlink('temp/'.$_FILES['userfile']['name']);
}

Но как то мне это уж больно не нравится, использовать такой класс и вот такой костыль как то не по феншую + нет проверки на загружаемый обьект, его размер (конечно все можно тут дописать, но хочется в классе и красиво).

Так что если у кого есть время и возможность помогите допилить класс так чтобы все делалось внутри него: загрузка, проверка типа / размера, проверка создана ли папка для изображений и если нет то создавалась, удаления временного файла, т.е. чтобы на выходе мы использовали что то на подобии такого:


if(isset($_POST['doUpload'])){
include("resize-class.php");
$resizeObj = new resize('temp/'.$_FILES['userfile']['name']);
$resizeObj -> resizeImage(400, 400, 'auto'); //Основное изображение
$resizeObj -> saveImage('images/news/'.$_GET['id'].'.jpg', 90);
}

Или может кто знает класс или функцию (ООП не обязательно) на подобии такого, только уже со всеми моими пожеланиями?

Заранее большое спасибо!

Joker-jar
На сайте с 26.08.2010
Offline
171
#1

Все логично. Класс занимается ресайзом изображений. А их загрузка на сервер - уже другая подзадача. Для нее наверняка можно найти тоже готовое решение. Где-то у меня был кусок когда в движке для безопасной загрузки, сейчас поищу

D
На сайте с 09.07.2009
Offline
79
#2

Это две разные задачи и будет правильным их разделение.

Для аплоада можно использовать http://www.phpclasses.org/package/5548-PHP-Validate-and-process-uploaded-image-files.html

S1
На сайте с 13.03.2008
Offline
49
#3
Дизайн сайтов (UI/UX), логотипов, баннеров и прочего... (/ru/forum/770062)
Joker-jar
На сайте с 26.08.2010
Offline
171
#4

Выдернул немного кода. Может, будет чем-то полезен (вроде, ничего не упустил, избавлял от специфичных для движка вещей):

function upload_process($folder) //--Возвращает текст ошибки в случае неудачи

{
...
if ( file_exists($folder) )
{
if ( ! is_dir($folder) ) return 'Невозможно создать указанную папку'; //--Существует файл с таким же именем
}
else
{
if ( ! mkdir($folder) ) return 'Невозможно создать указанную папку';
}
$file = $_FILES['userfile'];
if ( $file['error'] == UPLOAD_ERR_NO_FILE ) return 'Файл не выбран.';
if ( $file['error'] != UPLOAD_ERR_OK ) return 'Ошибка загрузки файла.';
if ( $file['size'] > 1024*1024 ) return 'Превышен допустимый размер файла.'; //-- 1024*1024 - 1 мегабайт
$info = getimagesize($file['tmp_name']);
if ( ! $info ) return 'Файл имеет неподдерживаемый формат.';

switch ($info['mime'])
{
case 'image/jpeg' : $ext = '.jpg'; break;
case 'image/gif' : $ext = '.gif'; break;
case 'image/png' : $ext = '.png'; break;
default : return 'Файл имеет неподдерживаемый формат.';
}

do
{
$filename = $folder . uniqid() . $ext;
}
while ( file_exists($filename) );

if ( ! move_uploaded_file($file['tmp_name'], $filename) ) return 'Ошибка перемещения файла.';
...
return 0;
}
Деймос
На сайте с 10.09.2008
Offline
138
#5

Всем большое спасибо, в особенности digwnews, воспользовался этим классом.

L
На сайте с 07.12.2007
Offline
351
#6
Деймос:
Так что если у кого есть время и возможность помогите допилить класс так чтобы все делалось внутри него: загрузка, проверка типа / размера, проверка создана ли папка для изображений и если нет то создавалась, удаления временного файла

FancyUpload, если не боитесь английского языка.

- позволяет выбирать сразу несколько файлов для загрузки

- можно продолжать выбирать новые в процессе загрузки

- грузит файлы любых размеров, если снять ограничение со стороны сервера (я грузила видео 820 мБ, через простую форму браузер бы отвалился через 5 минут работы)

- можно поставить ограничение на размер загружаемых файлов

- можно ещё до загрузки проверить есть ли на сервере картинка с таким именем

- по мере загрузки каждой картинки дается полная диагностика процесса загрузки и возникших ошибок.

Примеры к Fancy идут под картинки заточеные, там в скрипте приёмной стороны только разремарить нужные места, ну, может пару строк дописать "по вкусу".

PS: Это Флэшовый загрузчик.

Авторизуйтесь или зарегистрируйтесь, чтобы оставить комментарий