Thumbnails maken
Toelichting
Een handig script voor het maken van thumbnails van afbeeldingen. Bijvoorbeeld toe te passen in een fotoalbum of voor het resizen van avatars van gebruikers.
Voorbeeld
Script
Code
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
<?php
ini_set('display_errors', 1);
error_reporting(E_ALL);
function create_thumbnail($file)
{
$maxsize = 100; // Maximale breedte of hoogte van een thumbnail
$dir = 'images/'; // Map waarin de thumbnail weggeschreven moet worden
$prefix = 'tn_'; // Prefix die alle thumbnails meekrijgen.
$extensie = array('jpeg', 'jpg', 'png', 'gif'); // Toegestane extensies.
$pathinfo = pathinfo($file);
$destination = $dir.$prefix.$pathinfo['basename'];
// Controleren of de thumbnail al bestaat.
if(file_exists($destination))
{
return true;
}
else
{
// Controleren of de extensie wel gebruikt kan worden.
if(!in_array($pathinfo['extension'], $extensie))
{
echo '<p>Dit bestand heeft niet de juiste extensie</p>';
return false;
}
else
{
// Afmetingen van het origineel ophalen.
list($width_orig, $height_orig) = getimagesize($file);
// Bepalen van de nieuwe afmetingen:
// -> breedte en hoogte < maxsize: niet resizen, originele afmetingen behouden.
// -> breedte < hoogte: de hoogte is de maxsize, de breedte naar verhouding aanpassen.
// -> breedte > hoogte: de breedte is de maxsize, de hoogte naar verhouding aanpassen.
if($width_orig < $maxsize && $height_orig < $maxsize)
{
$height = $height_orig;
$width = $width_orig;
}
elseif($width_orig < $height_orig)
{
$height = $maxsize;
$width = round(($maxsize / $height_orig) * $width_orig);
}
else
{
$height = round(($maxsize / $width_orig) * $height_orig);
$width = $maxsize;
}
// Resizen en creëren van de nieuwe afbeelding (verschillend voor PNG, GIF en JPG/JPEG):
// -> Origineel aanmaken
// -> Nieuwe afbeelding met nieuwe afmetingen creëren
// -> Origineel naar verhouding in nieuwe afbeelding resizen.
// -> Nieuwe afbeelding naar bestand schrijven.
switch(strtolower($pathinfo['extension']))
{
case 'png' :
$source = imagecreatefrompng($file);
break;
case 'jpg' :
$source = imagecreatefromjpeg($file);
break;
case 'jpeg' :
$source = imagecreatefromjpeg($file);
break;
case 'gif' :
$source = imagecreatefromgif($file);
break;
default:
return false;
}
$thumb = imagecreatetruecolor($width, $height);
imagecopyresampled($thumb, $source, 0, 0, 0, 0, $width, $height, $width_orig, $height_orig);
switch(strtolower($pathinfo['extension']))
{
case 'png' :
return imagepng($thumb, $destination);
break;
case 'jpg' :
return imagejpeg($thumb, $destination);
break;
case 'jpeg' :
return imagejpeg($thumb, $destination);
break;
case 'gif' :
return imagegif($thumb, $destination);
break;
}
}
}
return false;
}
// Afhandeling formulier
$ext = (isset($_GET['ext'])) ? $_GET['ext'] : 'jpg';
if(isset($_GET['foto']) && $_GET['foto'] == 'origineel')
{
$content[] = '<p>Klik op de foto om de thumbnail te tonen</p>';
$content[] = '<a href="thumbnail.php?ext='.$ext.'"><img class="img_lijnuit" alt="origineel" src="images/gd_thumbnail.'.$ext.'" /></a>';
}
else
{
$content[] = '<p>Klik op de thumbnail (<b>'.$ext.'</b>) om het origineel te tonen</p>';
if(create_thumbnail('images/gd_thumbnail.'.$ext))
{
$content[] = '<a href="?foto=origineel&ext='.$ext.'"><img class="img_lijnuit" alt="thumbnail" src="images/tn_gd_thumbnail.'.$ext.'" /></a>';
}
}
?>
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01//EN" "http://www.w3.org/TR/html4/strict.dtd">
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=iso-8859-1">
<title>Jorendewit.nl - PHP Scripts - GD: Thumbnails maken</title>
<link rel="stylesheet" href="../styles/default.css" type="text/css" media="screen" />
</head>
<body>
<div id="wrap">
<p class="none small align-right"><a href="/view/21/"><-- Terug naar Scripts</a></p>
<h1>GD: Thumbnails maken</h1>
<div id="info">
<p>PHP versie: >= 4.0.6</p>
<p>GD versie: >= 2.0.28</p>
</div>
<form action="<?php echo $_SERVER['PHP_SELF']; ?>" method="get" name="ext">
<p>
<label class="field" for="ext">Bestandstype</label>
<select name="ext">
<option value="jpg">JPG/JPEG</option>
<option value="gif">GIF</option>
<option value="png">PNG</option>
</select>
<input type="submit" value="Laat zien!" />
</p>
</form>
<?php
// Weergeven van meldingen uit het phpscript.
if(isset($errors))
{
echo '<ul>';
foreach($errors as $error);
{
echo '<li>'.$error.'</li>';
}
echo '</ul>';
}
elseif(isset($content))
{
foreach($content as $line)
{
echo $line;
}
}
?>
</div>
</body>
</html>
ini_set('display_errors', 1);
error_reporting(E_ALL);
function create_thumbnail($file)
{
$maxsize = 100; // Maximale breedte of hoogte van een thumbnail
$dir = 'images/'; // Map waarin de thumbnail weggeschreven moet worden
$prefix = 'tn_'; // Prefix die alle thumbnails meekrijgen.
$extensie = array('jpeg', 'jpg', 'png', 'gif'); // Toegestane extensies.
$pathinfo = pathinfo($file);
$destination = $dir.$prefix.$pathinfo['basename'];
// Controleren of de thumbnail al bestaat.
if(file_exists($destination))
{
return true;
}
else
{
// Controleren of de extensie wel gebruikt kan worden.
if(!in_array($pathinfo['extension'], $extensie))
{
echo '<p>Dit bestand heeft niet de juiste extensie</p>';
return false;
}
else
{
// Afmetingen van het origineel ophalen.
list($width_orig, $height_orig) = getimagesize($file);
// Bepalen van de nieuwe afmetingen:
// -> breedte en hoogte < maxsize: niet resizen, originele afmetingen behouden.
// -> breedte < hoogte: de hoogte is de maxsize, de breedte naar verhouding aanpassen.
// -> breedte > hoogte: de breedte is de maxsize, de hoogte naar verhouding aanpassen.
if($width_orig < $maxsize && $height_orig < $maxsize)
{
$height = $height_orig;
$width = $width_orig;
}
elseif($width_orig < $height_orig)
{
$height = $maxsize;
$width = round(($maxsize / $height_orig) * $width_orig);
}
else
{
$height = round(($maxsize / $width_orig) * $height_orig);
$width = $maxsize;
}
// Resizen en creëren van de nieuwe afbeelding (verschillend voor PNG, GIF en JPG/JPEG):
// -> Origineel aanmaken
// -> Nieuwe afbeelding met nieuwe afmetingen creëren
// -> Origineel naar verhouding in nieuwe afbeelding resizen.
// -> Nieuwe afbeelding naar bestand schrijven.
switch(strtolower($pathinfo['extension']))
{
case 'png' :
$source = imagecreatefrompng($file);
break;
case 'jpg' :
$source = imagecreatefromjpeg($file);
break;
case 'jpeg' :
$source = imagecreatefromjpeg($file);
break;
case 'gif' :
$source = imagecreatefromgif($file);
break;
default:
return false;
}
$thumb = imagecreatetruecolor($width, $height);
imagecopyresampled($thumb, $source, 0, 0, 0, 0, $width, $height, $width_orig, $height_orig);
switch(strtolower($pathinfo['extension']))
{
case 'png' :
return imagepng($thumb, $destination);
break;
case 'jpg' :
return imagejpeg($thumb, $destination);
break;
case 'jpeg' :
return imagejpeg($thumb, $destination);
break;
case 'gif' :
return imagegif($thumb, $destination);
break;
}
}
}
return false;
}
// Afhandeling formulier
$ext = (isset($_GET['ext'])) ? $_GET['ext'] : 'jpg';
if(isset($_GET['foto']) && $_GET['foto'] == 'origineel')
{
$content[] = '<p>Klik op de foto om de thumbnail te tonen</p>';
$content[] = '<a href="thumbnail.php?ext='.$ext.'"><img class="img_lijnuit" alt="origineel" src="images/gd_thumbnail.'.$ext.'" /></a>';
}
else
{
$content[] = '<p>Klik op de thumbnail (<b>'.$ext.'</b>) om het origineel te tonen</p>';
if(create_thumbnail('images/gd_thumbnail.'.$ext))
{
$content[] = '<a href="?foto=origineel&ext='.$ext.'"><img class="img_lijnuit" alt="thumbnail" src="images/tn_gd_thumbnail.'.$ext.'" /></a>';
}
}
?>
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01//EN" "http://www.w3.org/TR/html4/strict.dtd">
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=iso-8859-1">
<title>Jorendewit.nl - PHP Scripts - GD: Thumbnails maken</title>
<link rel="stylesheet" href="../styles/default.css" type="text/css" media="screen" />
</head>
<body>
<div id="wrap">
<p class="none small align-right"><a href="/view/21/"><-- Terug naar Scripts</a></p>
<h1>GD: Thumbnails maken</h1>
<div id="info">
<p>PHP versie: >= 4.0.6</p>
<p>GD versie: >= 2.0.28</p>
</div>
<form action="<?php echo $_SERVER['PHP_SELF']; ?>" method="get" name="ext">
<p>
<label class="field" for="ext">Bestandstype</label>
<select name="ext">
<option value="jpg">JPG/JPEG</option>
<option value="gif">GIF</option>
<option value="png">PNG</option>
</select>
<input type="submit" value="Laat zien!" />
</p>
</form>
<?php
// Weergeven van meldingen uit het phpscript.
if(isset($errors))
{
echo '<ul>';
foreach($errors as $error);
{
echo '<li>'.$error.'</li>';
}
echo '</ul>';
}
elseif(isset($content))
{
foreach($content as $line)
{
echo $line;
}
}
?>
</div>
</body>
</html>