У меня на компьютере сохранено 1000 картинок большого размера. Можно сделать программу, которая автоматически уменьшит их размер, не хочется мучиться в Фотошопе, их учменьшая?
Это практическая задача, библиотека GD предоставляет возможность сделать такой скрипт. Итак, есть папка prikol, в ней лежат картинки в формате .jpeg (скрипт сделан для работы только с этим форматом), мы автоматически уменьшим размер картинок и сохраним их в той же папке.
<?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);
return $im;
}
return false;
}
// основная функция, которая уменьшит все фото в папке $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 );
?>
После применения этого скрипта в папке prikol появятся новые уменьшенные картинки с теми же названиями, что и старые. В середине имён файлов будет стоять слово _new. Это и есть новые картинки, размер их Вы сами можете менять и сами можете менять их качество. Имена новых картинок будут выведены в окно броузера, это означает, что программа работает.