Всем привет!
Есть чужой простейший скрипт, который позволяет загружать картинку на сервер, делает из нее еще две - определенного размера + эскиз. Он устраивает своей простотой, легкостью и, главное - он не требует взаимодействия с БД.
Есть один существенный для меня недостаток: работает только с jpeg, при этом при загрузке некоторых изображений сообщает, что загруженный файлis not a valid JPEG file in /<путь к скрипту>/maxImageUpload.class.php on line 205
В принципе обработка jpeg не так важна, но есть необходимость в доработке для работы с png.
Проблема в недостатке знаний для рихтовки кода, поможете?
В аттаче php, который и производит обработку изображений.
Спасибо!
Blast, я в php прихрамываю на все четыре, но разбор файла дает следующий расклад:
117,118 строки нам определяют, с чем мы работаем. С jpeg, прекрасно.
//Check image type. Only jpeg images are allowed
if ( (($_FILES['myfile']['type'])=='image/pjpeg') || (($_FILES['myfile']['type'])=='image/jpeg')) {
Для png надо будет дописать условие. Поставим отметку, пойдем дальше.
CheckDirs, SetMemoryLimit пропускаем.
Доходим до ResizeImage. Собственно та функция, что вызывает внешний обработчик. (далее будет понятнее)
function resizeImage($src,$dest,$new_width,$new_height,$quality){
$this->fastimagecopyresampled($newImage, $oldImage, 0, 0, 0, 0, $new_width, $new_height, $width, $height, $quality);
imagejpeg($newImage, $dest, 100);
}
fastimagecopyresampled - вызывает внешние программы: imagecopyresized, imagecreatetruecolor, imagecopyresampled и т.д. аргументы нам пока не интересны.
// 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, $temp, 0, 0, 0, 0, $dst_w, $dst_h, $dst_w, $dst_h);
imagedestroy ($temp);
}
return true;
}
Собственно и все. Надо искать библиотеки/файлы/т.п. которые и занимаются ресайзом картинок.
Этот скипт - просто удобная оболочка, скорей всего вызываемая из вне, она выполняет ряд проверок: на превышение памяти, доступность директорий чтения/записи, и т.д. Т.е. проводит защиту "от дурака" и подготавливает аргументы.
Надо будет скопипастить блок if jpeg, поправить блок if ($result) {}, где прописать вызов "дублера" ResizeImage_png, из которого вызвать внешний скрипт.
Тут, прости, отправлю в гугл: "php resize image png"
Если завтра позволит время (сомнительно), поищу нужный скрипт.
Та-та-та...
Поправочка. Гугл подсказывает, что надо читать документацию: imagecopyresized (http://php.net/manual/ru/function.imagecopyresized.php), imagecopyresampled (http://www.php.net/manual/ru/function.imagecopyresampled.php).
Там по тексту есть примеры работы с png, jpeg в зависимости от типа файла.
Комментарий
// Function to resize images
// Author: Tim Eckel - Date: 12/17/04 - Project: FreeRingers.net - Freely distributable.
сбил с толку.
Blast, тогда, если завтра позволит время, что опять таки сомнительно, попробую написать исправленный скрипт для работы с png.
Надо искать библиотеки/файлы/т.п. которые и занимаются ресайзом картинок. »
Я еще более далек от php, но имеющийся скрипт вероятно использует функции апача или того же пхп так как не вызывает извне ничего и сам по себе состоит из одного файла, который и есть в аттаче.
В любом случае спасибо за направление, завтра попробую разобраться самостоятельно, но и от помощи не откажусь конечно :)
Habetdin, спасибо, но сказал Undefined variable: type in <путь>/maxImageUpload.class.php on line 214
Unexpected errorи прекратил работу.
Habetdin
12-04-2013, 00:44
Blast, да, перепутал переменную, в аттаче от 00:40 поправил. Сильно не бить :tomato2:
Правда "фича" которую заметил - в папках normal и thumbnail оригинальные имена файлов с префиксом, а значит расширение старое - получается JPG с расширением PNG :)
имена лишь с префиксом, а расширение старое - получается JPG с разширением PNG »
в принципе все равно, главное чтобы эскиз был рабочим, то есть видимым
Habetdin
12-04-2013, 00:50
то есть видимым »
Почти всем современным браузерам, вроде бы главное что "внутри" - у меня показывает превьюшки. А Imagine мне так вообще предложил исправить расширение файла на jpg =)
[hr]разширением »
Вот что получается, если начал писать разрешение, а дописал расширение :biggrin: Пойду-ка я спать уже... :yes:
Habetdin, большое спасибо!
Все работает так как хотелось.
lxa85, спасибо за участие!
vBulletin v3.6.4, Copyright ©2000-2025, Jelsoft Enterprises Ltd.