Показать сообщение отдельно
Старый 22.04.2008, 02:14   #6 (permalink)
Администратор
 
Аватар для Devil
 
Специализация: Кодер
Регистрация: 05.12.2007
Адрес: Москва
Сообщений: 3,571
Репутация: 1665
Номер ICQ 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$old0000$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 раза более
__________________
Мы те, кто мы есть
Мой личный блог
Devil вне форума   Ответить с цитированием
3 пользователя(ей) отблагодарили Devil за это сообщение:
AleX (22.04.2008), Kurbatov (22.04.2008), Venik (22.04.2008)