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

Klik hier voor een 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
<?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$source0000$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&amp;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/">&lt;-- Terug naar Scripts</a></p>
        <h1>GD: Thumbnails maken</h1>
        
        <div id="info">
            <p>PHP versie: &gt;= 4.0.6</p>
            <p>GD versie: &gt;= 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>

Reacties