net-base.dk, Det trækker tænder ud af webserveren - Det tager tid - Hvis man har pladsen, bør man resize én gang ;)
nc85, Hvis du har din eksisterende upload med ét billede kan du jo bare resize flere gange?
Kun til JPEG (kan nemt rettes til):
http://php.coder.dk/resizeimg.phpSå er det jo bare:
Hvis f.eks. du har uploadet en fil: "600/etbillede.jpg":
resize( $denUploadedeFil, "300/" . basename( $denUploadedeFil ) );
resize( "300/" . $denUploadedeFil, "200/" . basename( $denUploadedeFil ) );
resize( "200/" . $denUploadedeFil, "100/" . basename( $denUploadedeFil ) );
Et helt script:
<form enctype="multipart/form-data" method="post">
<input type="file" name="ufile">
<input type="submit" value="Go!">
</form>
<?php
// Husk at folderne 600, 300, 200 og 100 skal være skrivbare for webserveren
// i.e. chmod 777
if ( !empty( $_FILES['ufile'] ) )
{
if ( is_uploaded_file( $_FILES['ufile']['tmp_name'] ) )
{
$bname = basename( $_FILES['ufile']['name'] );
if ( move_uploaded_file( $_FILES['ufile']['tmp_name']
,"600/" . $bname ) )
{
resize( "600/$bname", "600/$bname", 600, 1000000 );
resize( "600/$bname", "300/$bname", 300, 1000000 );
resize( "300/$bname", "200/$bname", 200, 1000000 );
resize( "200/$bname", "100/$bname", 100, 1000000 );
// Gem evt $bname i databasen
}
}
}
function resize( $filename, $newfilename, $maxw, $maxh )
{
$srcim = imagecreatefromjpeg( $filename );
$ow = imagesx( $srcim );
$oh = imagesy( $srcim );
$wscale = $maxw / $ow;
$hscale = $maxh / $oh;
$scale = ( $hscale < $wscale ? $hscale : $wscale );
$nw = round( $ow * $scale, 0 );
$nh = round( $oh * $scale, 0 );
$dstim = imagecreatetruecolor( $nw, $nh );
imagecopyresampled( $dstim, $srcim, 0, 0, 0, 0, $nw, $nh, $ow, $oh );
imagejpeg( $dstim, $newfilename, 85 );
imagedestroy( $dstim );
imagedestroy( $srcim );
}
?>