 |
 | |
20.04.2008, 02:10
|
#1 (permalink)
| | Новичок
Специализация: Новичок Регистрация: 20.04.2008 Адрес: Россия, Москва, СЗАО Сообщений: 5 Репутация: 0  432143  | Массовое уменьшение картинок Доброй ночи.
Возникла необходимость в скрипте, который бы смог уменьшить большое количество картинок.
Перепробовал довольно большое количество похожих скриптов на PHP, но работали они не совсем корректно.
Посему, решил обратиться на данный форум.
Суть скрипта:
-запускается скрипт, который открывает указанную в конфиге папку и начинает по очереди уменьшать картинки до заданного, опять же в конфиге, размера. Уменьшенные картинки сохраняет в другой папке (или той же, но с префиксом _NEW в имени файла).
Было бы совсем шикарно, если после этого скрипт генерировал страницу, на которой вывелись все эти уменьшенные картинки.
Так сказать, по-максимуму автоматизировать процесс уменьшения\отображения картинок.
Просто на FTP лежат фотки по 4 мегабайта каждая, причём в большом количестве. Вот и хотелось бы скриптом уменьшить их, сложить в отдельную папку (или сохранить в той же папке, но под отдельным именем) и сгенерировать страницу, по открытию которой все эти уменьшенные фотографии в ряд выводились бы.
Заранее премного благодарен за помощь и советы.
__________________ "Господи, перезагрузи этот мир..." - молитва программиста. |
| |
20.04.2008, 03:08
|
#2 (permalink)
| | Администратор
Специализация: Дизайнер Регистрация: 07.12.2007 Адрес: МСК Сообщений: 1,497 Репутация: 1252  232466 | Ответ: Массовое уменьшение картинок зачем скрипт на ПХП? через ФШ делай  |
| | | Этот пользователь отблагодарил Manfred за это сообщение: | |
20.04.2008, 03:35
|
#3 (permalink)
| | Администратор
Специализация: Кодер Регистрация: 05.12.2007 Адрес: Москва Сообщений: 3,016 Репутация: 1327  599613 | Ответ: Массовое уменьшение картинок Venik, эм...если я верно понял. то тебе просто напросто требуется скрипт фото галлереи с возможностью делать автоматические миниатюры заданные тобой же? Если у тебя стоит какая либо CMS то назови её, а мы попробуем тебе подобрать фотогаллере. А что бы не парится, то поставь что-то тпиа Copirmine (мог ошибиться с названием) |
| | | Этот пользователь отблагодарил Devil за это сообщение: | |
20.04.2008, 15:21
|
#4 (permalink)
| | Новичок
Специализация: Новичок Регистрация: 20.04.2008 Адрес: Россия, Москва, СЗАО Сообщений: 5 Репутация: 0  432143  | Ответ: Массовое уменьшение картинок Не-не, в том-то и дело, что у меня CMS не стоит и прибегать к её помощи я не хочу.
Такого типа скрипты, на сколько я понял, реализуются встроенным в PHP GDLib.
Вот пример скрипта: PHP код: <?php
$papka = "photo";
set_time_limit(0);
$qulity = 100;
$size_max = 640;
$bibl_ext = dirname ($_SERVER['SCRIPT_FILENAME']).'/extensions/php_gd.dll';
if( !extension_loaded ('gd') and is_file($bibl_ext)){ dl ("extensions/php_gd.dll"); }
if( !extension_loaded ('gd')) { print "Нет файла библиотеки $bibl_ext"; exit;}
function TypeFile ($img_name){
$arr = GetImageSize ($img_name);
return $arr[2];
}
function LoadImage ($img_name){
if(TypeFile ($img_name)==2) { $im = ImageCreateFromJpeg($img_name); }
if (!$im){ return false; }
return $im;
}
function open_dir_and_small ( $path ) {
global $qulity, $size_max;
$dh = opendir ($path);
while($entry = readdir($dh)){
if($entry != "." and $entry != ".."){
$file = $path."/".$entry;
$old = LoadImage($file);
if ($old==false or preg_match ("~new~",$entry)){ continue; }
$w = ImageSX($old);
$h = ImageSY ($old);
if( preg_match ("/(.+)(\..+)/",$file,$arr)){
$path_new = $arr[1].'_new'.$arr[2];
if($w > $h){ $w_new = $size_max; $h_new = ceil($w_new * $h/$w); }
else { $h_new = $size_max; $w_new = ceil($h_new * $w/$h); }
$new = imageCreate($w_new, $h_new);
ImageCopyResized($new, $old, 0, 0, 0, 0, $w_new, $h_new, $w, $h);
imageJpeg($new, $path_new, $qulity);
imageDestroy($new);
print $path_new."<br>\n";
}
imageDestroy($old);
clearstatcache();
}
}
closedir($dh);
}
open_dir_and_small ( $papka );
?> Вот примерно такой скрипт для массового уменьшения картинок мне и нужен (без задействования CMS и прочего).
Это, кстати говоря, единственный найденный мною скрипт, который уместился в 1 файле, действительно работает и работает быстро. Я бы на нём и остановился, если бы не одно "но".
И вот в чём это "но" заключается...
... вот оригинальное фото (чтобы лучше было видно - сохраните на компьютере)...
...а вот уменьшенное скриптом фото.
Почему он так делает? Как будто пески времени, блин. Или на пастеризацию ещё похоже. Соглашусь, выглядит эффектно, но мне это абсолютно не нужно.
И, как мне кажется, ошибка кроется в самом скрипте, а не в чём либо другом. Ведь я пробовал ещё один скрипт - он хоть уменьшает и по одной картинке, но таким же способом - такого эффекта нет, всё выглядит отлично.
Подскажите, пожалуйста, в чём дело. Здесь лежит сей скрипт с комментариями разработчика.
__________________ "Господи, перезагрузи этот мир..." - молитва программиста. |
| |
21.04.2008, 18:18
|
#5 (permalink)
| | Новичок
Специализация: Новичок Регистрация: 20.04.2008 Адрес: Россия, Москва, СЗАО Сообщений: 5 Репутация: 0  432143  | Ответ: Массовое уменьшение картинок Up.
^_^
__________________ "Господи, перезагрузи этот мир..." - молитва программиста. |
| |
22.04.2008, 00:14
|
#6 (permalink)
| | Администратор
Специализация: Кодер Регистрация: 05.12.2007 Адрес: Москва Сообщений: 3,016 Репутация: 1327  599613 | Ответ: Массовое уменьшение картинок Venik, попробуй вот этот приём PHP код: <?php
// имя папки, где лежат картинки
$papka = "prikol";
// время выполнения сценария не ограничено
// если не сделать так, то при большом количестве
// картинок время одного процесса истечёт, что
// нам не надо, поэтому ставим set_time_limit(0);
set_time_limit(0);
// качество сохраняемой картинки в процентах от
// оригинала можете ставить от 0 до 100, это проценты.
// чем больше это число, тем с большим качеством
// сохранится новая картинка
$qulity = 70;
// максимальный размер стороны нового фото в пикселях
// все картинки приведёт к этому размеру, то есть
// сони все танут одинаковыми
$size_max = 600;
// подключает модуль GD динамически, если она не подключена
// если выдаст Нет файла библиотеки, то нет у вас модуля GD
$bibl_ext = dirname ($_SERVER['SCRIPT_FILENAME']).'/extensions/php_gd.dll';
if( !extension_loaded ('gd') and is_file($bibl_ext)){ dl ("extensions/php_gd.dll"); }
if( !extension_loaded ('gd')) { print "Нет файла библиотеки $bibl_ext"; exit;}
// вспомогательная функция, определяет тип файла
function TypeFile ($img_name){
$arr = GetImageSize ($img_name);
return $arr[2];
}
// вспомогательная функция, выводим в программу из
// фотографии графический объект
function LoadImage ($img_name){
if(TypeFile ($img_name)==2) { $im = ImageCreateFromJpeg($img_name); }
if (!$im){ return false; }
return $im;
}
// основная функция, которая уменьшит все фото в папке $path
function open_dir_and_small ( $path ) {
global $qulity, $size_max;
$dh = opendir ($path);
while($entry = readdir($dh)){
if($entry != "." and $entry != ".."){
$file = $path."/".$entry;
$old = LoadImage($file);
if ($old==false or preg_match ("~new~",$entry)){ continue; }
$w = ImageSX($old);
$h = ImageSY ($old);
if( preg_match ("/(.+)(\..+)/",$file,$arr)){
$path_new = $arr[1].'_new'.$arr[2];
if($w > $h){ $w_new = $size_max; $h_new = ceil($w_new * $h/$w); }
else { $h_new = $size_max; $w_new = ceil($h_new * $w/$h); }
$new = imageCreate($w_new, $h_new);
ImageCopyResized($new, $old, 0, 0, 0, 0, $w_new, $h_new, $w, $h);
imageJpeg($new, $path_new, $qulity);
imageDestroy($new);
print $path_new."<br>\n";
}
imageDestroy($old);
clearstatcache();
}
}
closedir($dh);
}
// применим функции и уменьшим все картинки в папке "prikol"
open_dir_and_small ( $papka );
?> Значений качества не ставь на 100 - это глупо, так как визуально они не отличаются от 75 совершенно. но зато вес в 2 раза более |
| | | 3 пользователя(ей) отблагодарили Devil за это сообщение: | |
22.04.2008, 03:03
|
#7 (permalink)
| | Новичок
Специализация: Новичок Регистрация: 20.04.2008 Адрес: Россия, Москва, СЗАО Сообщений: 5 Репутация: 0  432143  | Ответ: Массовое уменьшение картинок Devil, не вышло.
Сам посмотри:
- оригинал;
- полученное доработанным тобою скриптом.
Из-за чего так получается?
Надеюсь, этот скрипт удастся заставить работать корректно.
Help. ^_^
__________________ "Господи, перезагрузи этот мир..." - молитва программиста. |
| | |
Здесь присутствуют: 1 (пользователей: 0 , гостей: 1) | | | | Опции темы | | | | Опции просмотра | Линейный вид |
Ваши права в разделе
| Вы не можете создавать новые темы Вы не можете отвечать в темах Вы не можете прикреплять вложения Вы не можете редактировать свои сообщения | | | Часовой пояс GMT +3, время: 21:55.
vBulletin® версия 7.6.1. Copyright ©2000 - 2008, Jelsoft Enterprises Ltd.
Web Mastering By Devil Art |  |