Ten artykuł jest archiwalny, korzystasz z niego na własną odpowiedzialność.
Automatyczne tworzenie miniaturek
Bardzo często potrzebujemy miniaturek do skryptów galerii, jednak tworzenie ich samemu jest męczące. Dlatego postanowiłem napisać skrypt który zautomatyzuje ten proces.
Na początek trzeba się zastanowić jak ten skrypt będzie działał. Pobierzemy wszystkie pliki z folderu zdjecia i zapiszemy miniaturki w folderze miniaturki.
Zdefiniujmy najpierw nazwy tych folderów i wymiary miniaturek do zmiennych:
<?php
$zdjecia = './zdjecia';
$miniaturki = './miniaturki';
$max_height = 80;
$max_width = 110;Następnie trzeba otworzyć folder ze zdjęciami i odczytać wszystkie jego pliki.
Później sprawdzimy czy plik miniaturki już istnieje, bo po co tworzyć go kilka razy? ;)
if(file_exists($miniaturki.'/'.$file)) {
echo '<b>'.$file.'</b> - error: miniaturka już istnieje!<br />';
}A jeśli nie istnieje
else { Zapisujemy do zmiennych nazwę zdjęcia oraz nazwę miniaturki. Następnie sprawdzamy wysokość, szerokość oraz typ zdjęcia.
$foto = $zdjecia.'/'.$file;
$foto_min = $miniaturki.'/'.$file;
$check = GetImageSize($foto);
$width = $check[0];
$height = $check[1];
$mime = $check[2];Później trzeba obliczyć proporcjonalne wymiary miniaturki. Jeśli szerokość jest większa od wysokości to bierzemy pod uwagę maksymalną szerokość a jeśli na odwrót to maksymalną wysokość. Funkcja floor służy do zaokrąglania.
if($width>$height) {
$factor = $width/$height;
$x_scale = $max_width;
$y_scale= floor($x_scale/$factor);
} else {
$factor = $height/$width;
$y_scale = $max_height;
$x_scale= floor($y_scale/$factor);
}Teraz trzeba stworzyć obraz zależnie od typu pliku - w php są różne nazwy funkcji do tego.
switch($mime) {
case 1:
$im = @ImageCreateFromGif($foto);
break;
case 2:
$im = @ImageCreateFromJpeg($foto);
break;
case 3:
$im = @ImageCreateFromPng($foto);
break;
}Kolejnym krokiem będzie stworzenie obrazu z wymiarami miniaturki. Następnie zeskalujemy zdjęcie.
$thumb = ImageCreateTrueColor($x_scale,$y_scale);
ImageCopyResampled($thumb, $im, 0, 0, 0, 0, $x_scale, $y_scale, $width, $height);Później zależnie od typu pliku tworzymy miniaturkę. Drugim parametrem jest nazwa pliku miniaturki. Przy funkcji imagejpeg i imagepng 3 parametr odpowiada za jakość miniaturki. Przy tej pierwszej funkcji jest to od 0 do 100 a przy drugiej od 0 do 9. Im większa liczba tym lepsza jakość.
switch($mime) {
case 1:
ImageGIF($thumb, $foto_min);
break;
case 2:
ImageJPEG($thumb, $foto_min, 80);
break;
case 3:
ImagePNG($thumb, $foto_min, 2);
break;
}Miniaturki zostały stworzone, można teraz zwolnić bufor. Wyświetlimy też jakiś komuniakt ;)
imagedestroy($im);
imagedestroy($thumb);
echo '<b>'.$file.'</b> - ok: miniaturka została stworzona!<br />';Teraz tylko zamkniemy wszystkie klamry i zamkniemy katalog.
}
}
}
closedir($dir);
?>Cały kod:
<h2>Tworzenie miniaturek</h2>
<p>
<?php
$zdjecia = './zdjecia';
$miniaturki = './miniaturki';
$max_height = 80;
$max_width = 110;
$dir = opendir($zdjecia);
while($file = readdir($dir)) {
if($file != '.' && $file != '..') {
if(file_exists($miniaturki.'/'.$file)) {
echo '<b>'.$file.'</b> - error: miniaturka już istnieje!<br />';
} else {
$foto = $zdjecia.'/'.$file;
$foto_min = $miniaturki.'/'.$file;
$check = GetImageSize($foto);
$width = $check[0];
$height = $check[1];
$mime = $check[2];
if($width>$height) {
$factor = $width/$height;
$x_scale = $max_width;
$y_scale= floor($x_scale/$factor);
} else {
$factor = $height/$width;
$y_scale = $max_height;
$x_scale= floor($y_scale/$factor);
}
switch($mime) {
case 1:
$im = @ImageCreateFromGif($foto);
break;
case 2:
$im = @ImageCreateFromJpeg($foto);
break;
case 3:
$im = @ImageCreateFromPng($foto);
break;
}
$thumb = ImageCreateTrueColor($x_scale,$y_scale);
ImageCopyResampled($thumb, $im, 0, 0, 0, 0, $x_scale, $y_scale, $width, $height);
switch($mime) {
case 1:
ImageGIF($thumb, $foto_min);
break;
case 2:
ImageJPEG($thumb, $foto_min, 80);
break;
case 3:
ImagePNG($thumb, $foto_min, 2);
break;
}
imagedestroy($im);
imagedestroy($thumb);
echo '<b>'.$file.'</b> - ok: miniaturka została stworzona!<br />';
}
}
}
closedir($dir);
?>
</p>
<p>Copyrights by Fafu.</p>