Da man dieses Thema immer wiedermal sieht, hier ein Script, bei dem man ein Quellverzeichnis, ein Zielverzeichnis, Höhe und/oder Breite, Proportionalität und Qualität angeben kann. Weder der HTML- noch der PHP-Code erheben den Anspruch auf Perfektion, da ich diese Scripte vor langer Zeit mal auf die schnelle zusammengeschraubt habe und nur für eigene Sachen gebraucht wird. Außerdem wird dieses Script vermutlich auf einem Webserver Probleme in Sachen Laufzeit machen, wenn man viele Dateien verkleinern will. Deshalb nur für die eigene Entwicklungsumgebung zu empfehlen. Bei sehr großen Bildern kann auch schnell mal das Memory-Limit dazwischenfunken. Ich empfehle daher, in der php.ini die Werte für max_execution_time und memory_limit entsprechend hoch einzustellen.
index.php
<html>
<head>
<title>Image-Resizer</title>
</head>
<body>
<?php
if ( ! isset($_POST['submit']))
{
?>
<div align='center'>
<center>
<form action='<?php echo $_SERVER['SCRIPT_NAME']; ?>' method='POST'>
<table border='0' width='50%'>
<tr>
<td width='16%'></td>
<td width='84%'><font size='5'><b>Image-Resizer</b></font></td>
</tr>
<tr>
<td width='16%' height='20'> </td>
<td width='84%' height='20'> </td>
</tr>
<tr>
<td width='16%'>Quellverzeichnis:</td>
<td width='84%'><input type='text' name='source' size='30'></td>
</tr>
<tr>
<td width='16%'>Zielverzeichnis:</td>
<td width='84%'><input type='text' name='destination' size='30'></td>
</tr>
<tr>
<td width='16%'>Breite in Pixel:</td>
<td width='84%'><input type='text' name='width' size='4'></td>
</tr>
<tr>
<td width='16%'>Höhe in Pixel:</td>
<td width='84%'><input type='text' name='height' size='4'></td>
</tr>
<tr>
<td width='16%'>Qualität:</td>
<td width='84%'><input type='text' name='quality' size='4' value='100'></td>
</tr>
<tr>
<td width='16%'>Proportional:</td>
<td width='84%'><input type='checkbox' name='fixed' checked></td>
</tr>
<tr>
<td width='16%'></td>
<td width='84%'></td>
</tr>
<tr>
<td width='16%'></td>
<td width='84%'><input type='submit' name='submit' value='Abschicken'</td>
</tr>
</table>
</form>
</center>
</div>
<?php
}
else
{
// Bei Timeout-Problemen den Wert erhöhen
ini_set("max_execution_time", "3000");
$source = $_POST['source'];
$dest = $_POST['destination'];
$width = $_POST['width'];
$height = $_POST['height'];
$quality = $_POST['quality'];
if (isset($_POST['fixed']))
$fixed = true;
else
$fixed = false;
if (! strlen ($source))
{
echo "Kein Quellverzeichnis";
exit;
}
if (! strlen ($dest))
{
echo "Kein Zielverzeichnis";
exit;
}
if (! strlen ($width) && ! strlen ($height))
{
echo "Keine Größen angegeben";
exit;
}
if ($fixed)
{
if (strlen ($width))
$height = 0;
else if (strlen ($height))
$widht = 0;
}
include_once("./functions.inc.php");
$data = getImagesFromPath($source);
if (! file_exists($dest))
{
if ( ! mkdir ($dest, "0777"))
{
echo "Verzeichnis $dest konnte nicht angelegt werden";
exit;
}
}
foreach($data as $name)
{
$in = $source . "/" . $name;
$out = $dest . "/" . $name;
$out = str_replace(" ", "_", $out);
$ret = resizeImage($in, $out, $width, $height, $quality);
if ($ret)
echo "Grafik $out erzeugt<br>\n";
else
echo "<font color='#FF0000'>Grafik $out konnte nicht erzeugt werden</font><br>\n";
}
}
?>
</body>
</html>
Alles anzeigen
functions.inc.php
<?php
function getImagesFromPath($path)
{
$result = array();
$handle=opendir($path);
while ($file = readdir ($handle))
{
if ($file != "." && $file != "..")
{
if (! is_dir($file))
{
$tmp = strtolower($file);
$sub = substr($tmp, -4);
if ($sub == ".png" || $sub == ".jpg" || $sub == ".gif")
$result[] = $file;
}
}
}
return $result;
}
function resizeImage($file_name_src, $file_name_dest, $width = 0, $height = 0, $quality = 100)
{
if (file_exists($file_name_src) && isset($file_name_dest))
{
if ($width == 0 && $height == 0)
return false;
$file_name_dest = strtolower($file_name_dest);
$est_src = pathinfo(strtolower($file_name_src));
$est_dest = pathinfo(strtolower($file_name_dest));
$size = getimagesize($file_name_src);
if ($height && ! $width)
{
$h = number_format($height, 0, ',', '');
$w = number_format(($size[0]/$size[1])*$height,0,',','');
}
else if (! $height && $width)
{
$w = number_format($width, 0, ',', '');
$h = number_format(($size[1]/$size[0])*$width,0,',','');
}
else
{
$h = number_format($height, 0, ',', '');
$w = number_format($width, 0, ',', '');
}
if ($est_dest['extension'] == "gif" || $est_dest['extension'] == "jpg")
{
$file_name_dest = substr_replace($file_name_dest, 'jpg', -3);
$dest = imagecreatetruecolor($w, $h);
imageantialias($dest, TRUE);
}
elseif ($est_dest['extension'] == "png")
{
$dest = imagecreatetruecolor($w, $h);
imageantialias($dest, TRUE);
}
else
{
return FALSE;
}
switch($size[2])
{
case 1: //GIF
$src = imagecreatefromgif($file_name_src);
break;
case 2: //JPEG
$src = imagecreatefromjpeg($file_name_src);
break;
case 3: //PNG
$src = imagecreatefrompng($file_name_src);
break;
default:
return FALSE;
break;
}
imagecopyresampled($dest, $src, 0, 0, 0, 0, $w, $h, $size[0], $size[1]);
switch($size[2])
{
case 1:
imagegif($dest,$file_name_dest);
break;
case 2:
imagejpeg($dest,$file_name_dest, $quality);
break;
case 3:
imagepng($dest,$file_name_dest);
}
imagedestroy($src);
imagedestroy($dest);
return TRUE;
}
return FALSE;
}
Alles anzeigen
Das Ganze natürlich ohne Gewähr und Garantie.