Компьютерный форум OSzone.net  

Компьютерный форум OSzone.net (http://forum.oszone.net/index.php)
-   Вебмастеру (http://forum.oszone.net/forumdisplay.php?f=22)
-   -   [решено] Скрипт загрузки изображений и создания эскиза (http://forum.oszone.net/showthread.php?t=258390)

Blast 11-04-2013 19:02 2130564

Скрипт загрузки изображений и создания эскиза
 
Вложений: 1
Всем привет!
Есть чужой простейший скрипт, который позволяет загружать картинку на сервер, делает из нее еще две - определенного размера + эскиз. Он устраивает своей простотой, легкостью и, главное - он не требует взаимодействия с БД.

Есть один существенный для меня недостаток: работает только с jpeg, при этом при загрузке некоторых изображений сообщает, что загруженный файл
Цитата:

is not a valid JPEG file in /<путь к скрипту>/maxImageUpload.class.php on line 205
В принципе обработка jpeg не так важна, но есть необходимость в доработке для работы с png.

Проблема в недостатке знаний для рихтовки кода, поможете?

В аттаче php, который и производит обработку изображений.

Спасибо!

lxa85 11-04-2013 23:22 2130718

Blast, я в php прихрамываю на все четыре, но разбор файла дает следующий расклад:
117,118 строки нам определяют, с чем мы работаем. С jpeg, прекрасно.
PHP код:

//Check image type. Only jpeg images are allowed
            
if ( (($_FILES['myfile']['type'])=='image/pjpeg') || (($_FILES['myfile']['type'])=='image/jpeg')) { 

Для png надо будет дописать условие. Поставим отметку, пойдем дальше.
CheckDirs, SetMemoryLimit пропускаем.
Доходим до ResizeImage. Собственно та функция, что вызывает внешний обработчик. (далее будет понятнее)
PHP код:

function resizeImage($src,$dest,$new_width,$new_height,$quality){
       
$this->fastimagecopyresampled($newImage$oldImage0000$new_width$new_height$width$height$quality);
       
imagejpeg($newImage$dest100);
    } 

fastimagecopyresampled - вызывает внешние программы: imagecopyresized, imagecreatetruecolor, imagecopyresampled и т.д. аргументы нам пока не интересны.
PHP код:

// Function to resize images
    // Author: Tim Eckel - Date: 12/17/04 - Project: FreeRingers.net - Freely distributable.
    
function fastimagecopyresampled (&$dst_image$src_image$dst_x$dst_y$src_x$src_y$dst_w$dst_h$src_w$src_h$quality 3) {
       if (empty(
$src_image) || empty($dst_image)) { return false; }
       if (
$quality <= 1) {
         
$temp imagecreatetruecolor ($dst_w 1$dst_h 1);
         
imagecopyresized ($temp$src_image$dst_x$dst_y$src_x$src_y$dst_w 1$dst_h 1$src_w$src_h);
         
imagecopyresized ($dst_image$temp0000$dst_w$dst_h$dst_w$dst_h);
         
imagedestroy ($temp);
       }
       return 
true;
   } 

Собственно и все. Надо искать библиотеки/файлы/т.п. которые и занимаются ресайзом картинок.
Этот скипт - просто удобная оболочка, скорей всего вызываемая из вне, она выполняет ряд проверок: на превышение памяти, доступность директорий чтения/записи, и т.д. Т.е. проводит защиту "от дурака" и подготавливает аргументы.
Надо будет скопипастить блок if jpeg, поправить блок if ($result) {}, где прописать вызов "дублера" ResizeImage_png, из которого вызвать внешний скрипт.
Тут, прости, отправлю в гугл: "php resize image png"
Если завтра позволит время (сомнительно), поищу нужный скрипт.

Та-та-та...
Поправочка. Гугл подсказывает, что надо читать документацию: imagecopyresized, imagecopyresampled.
Там по тексту есть примеры работы с png, jpeg в зависимости от типа файла.
Комментарий
// Function to resize images
// Author: Tim Eckel - Date: 12/17/04 - Project: FreeRingers.net - Freely distributable.
сбил с толку.
Blast, тогда, если завтра позволит время, что опять таки сомнительно, попробую написать исправленный скрипт для работы с png.

Blast 11-04-2013 23:46 2130730

Цитата:

Цитата lxa85
Надо искать библиотеки/файлы/т.п. которые и занимаются ресайзом картинок. »

Я еще более далек от php, но имеющийся скрипт вероятно использует функции апача или того же пхп так как не вызывает извне ничего и сам по себе состоит из одного файла, который и есть в аттаче.

В любом случае спасибо за направление, завтра попробую разобраться самостоятельно, но и от помощи не откажусь конечно :)

Habetdin 12-04-2013 00:33 2130751

Вложений: 1
Blast, попробуйте :)

Blast 12-04-2013 00:42 2130755

Habetdin, спасибо, но сказал
Цитата:

Undefined variable: type in <путь>/maxImageUpload.class.php on line 214
Unexpected error
и прекратил работу.

Habetdin 12-04-2013 00:44 2130756

Blast, да, перепутал переменную, в аттаче от 00:40 поправил. Сильно не бить :tomato2:
Правда "фича" которую заметил - в папках normal и thumbnail оригинальные имена файлов с префиксом, а значит расширение старое - получается JPG с расширением PNG :)

Blast 12-04-2013 00:46 2130757

Цитата:

Цитата Habetdin
имена лишь с префиксом, а расширение старое - получается JPG с разширением PNG »

в принципе все равно, главное чтобы эскиз был рабочим, то есть видимым

Habetdin 12-04-2013 00:50 2130759

Цитата:

Цитата Blast
то есть видимым »

Почти всем современным браузерам, вроде бы главное что "внутри" - у меня показывает превьюшки. А Imagine мне так вообще предложил исправить расширение файла на jpg =)

Цитата:

Цитата Blast
разширением »

Вот что получается, если начал писать разрешение, а дописал расширение :biggrin: Пойду-ка я спать уже... :yes:

Blast 12-04-2013 00:51 2130760

Habetdin, большое спасибо!

Все работает так как хотелось.

lxa85, спасибо за участие!


Время: 03:03.

Время: 03:03.
© OSzone.net 2001-