[PHP] Tworzenie miniaturek obrazów
W tym wpisie stworzymy prosty skrypt tworzący miniaturki obrazów. Skrypt składał się będzie z trzech plików: strony z formularzem (upload-form.php), skryptu przetwarzającego dane z formularza (upload.php) oraz skryptu tworzącego miniaturkę (create-thumbnail.php).
Formularz przesyłania obrazka
Na początku należy stworzyć formularz, przez który wysyłany będzie obraz do przetworzenia:
<!DOCTYPE html>
<html>
<head>
<title>Prześlij obraz</title>
</head>
<body>
<h1>Prześlij obraz</h1>
<p>Prześlij obraz, dla którego chcesz wygenerować miniaturkę.</p>
<form action="upload.php" method="POST" enctype="multipart/form-data">
<input type="file" name="image" accept="image/*" required>
<input type="submit" value="Prześlij">
</form>
</body>
</html>
Skrypt upload.php
Gdy już formularz jest gotowy można napisać kod obsługujący przesyłane dane (w tym przypadku tylko obraz):
<?php
if($_SERVER['REQUEST_METHOD'] == 'POST') {
$targetDir = 'uploads/';
$targetFile = $targetDir . basename($_FILES['image']['name']);
$uploadOk = 1;
$imageFileType = strtolower(pathinfo($targetFile,PATHINFO_EXTENSION));
// Sprawdzenie, czy przesłany plik jest obrazkiem
$check = getimagesize($_FILES['image']['tmp_name']);
if($check === false) {
echo 'Przesłany plik nie jest obrazkiem!';
$uploadOk = 0;
}
// Sprawdzenie, czy plik już istnieje
if(file_exists($targetFile)) {
echo 'Plik o tej nazwie już istnieje!';
$uploadOk = 0;
}
// Sprawdzenie rozmiaru pliku
if($_FILES['image']['size'] > 10 * 1048576) {
echo 'Przesłany plik jest zbyt duży!';
$uploadOk = 0;
}
// Dozwolone formaty plików
$allowedFormats = array('jpg', 'jpeg', 'png', 'gif');
if(!in_array($imageFileType, $allowedFormats)) {
echo 'Nieprawidłowy typ pliku!';
$uploadOk = 0;
}
// Jeśli wszystkie warunki są spełnione, przesuń plik do folderu uploads
if($uploadOk == 1) {
if(move_uploaded_file($_FILES['image']['tmp_name'], $targetFile)) {
include_once 'create-thumbnail.php';
}
else {
echo 'Wystąpił błąd podczas przesyłania pliku.';
}
}
}
W powyższym kodzie zabezpieczamy przesyłanie pliku ograniczając jego typ do *.jpg, *.jpeg, *.png oraz *.gif oraz rozmiar do 10 MB.
Plik create-thumbnail.php
Pozostało jeszcze napisać kilka linii kodu generującego miniaturkę z przesłanego obrazu:
<?php
$targetDir = 'uploads/';
$image_path = 'uploads/' . $_FILES['image'];
// Tworzenie miniaturki
$thumbnailDir = 'thumbnails/';
$thumbnailFile = $thumbnailDir . $image;
$thumbnailSize = 200; // Rozmiar miniaturki
// Pobranie informacji o przesłanym obrazku
list($width, $height) = getimagesize($image_path);
// Obliczanie proporcji miniaturki
$ratio = $width / $height;
if($ratio > 1) {
$newWidth = $thumbnailSize;
$newHeight = $thumbnailSize / $ratio;
}
else {
$newWidth = $thumbnailSize * $ratio;
$newHeight = $thumbnailSize;
}
// Tworzenie miniaturki na podstawie oryginalnego obrazka
$source = imagecreatefromjpeg($image_path);
$thumbnail = imagecreatetruecolor($newWidth, $newHeight);
imagecopyresampled($thumbnail, $source, 0, 0, 0, 0, $newWidth, $newHeight, $width, $height);
// Zapisywanie miniaturki
imagejpeg($thumbnail, $thumbnailFile);
// Zwalnianie pamięci
imagedestroy($source);
imagedestroy($thumbnail);
echo 'Miniaturka została utworzona.';
Przed uruchomieniem skryptu należy utworzyć katalogi uploads oraz thumbnails i nadać im prawa do zapisu - 777.
Komentarze
Prześlij komentarz
Dzięki za komentarz!