Använd imagecopyresampled i stället för imagecopyresized. Det är nog där du får den dåliga bildkvaliteten, snarare än av jpegkompressionen. Jpegkompressionen kan du nog efter den manövern ställa ner till 75 och ändå få bättre kvalitet.
Jag använder följande kod för att skapa två olika miniatyrer från en bildmapp på servern. Kvalitén på bilderna blir usel, trots att jag har sett till "90".
function createThumbs( $pathToImages, $pathToThumbs, $thumbWidth )
{
$dir = opendir( $pathToImages );
while (false !== ($fname = readdir( $dir ))) {
$info = pathinfo($pathToImages . $fname);
if ( strtolower($info['extension']) == 'jpg')
{
if (stristr($info['filename'], "normal_") === FALSE)
// Skulle även vilja exkludera "thumb_", men vet inte hur jag lägger till det.
{
echo "Skapar miniatyr för <b>{$fname}</b><br />";
$img = imagecreatefromjpeg( "{$pathToImages}{$fname}" );
$width = imagesx( $img );
$height = imagesy( $img );
$new_width = $thumbWidth;
$new_height = floor( $height * ( $thumbWidth / $width ) );
$tmp_img = imagecreatetruecolor( $new_width, $new_height );
imagecopyresized( $tmp_img, $img, 0, 0, 0, 0, $new_width, $new_height, $width, $height );
$randFilename = uniqid("img_");
$newFilename = $randFilename.".".$info['extension'];
imagejpeg( $tmp_img, "{$pathToThumbs}{$newFilename}", 90 );
copy("{$pathToImages}{$fname}", "test/{$newFilename}");
list($width, $height) = getimagesize("{$pathToImages}{$fname}");
$storlek = filesize("{$pathToImages}{$fname}");
$medlem = 1;
$kategori = 5;
$kommentar = sqlesc($_POST["kommentar"]);
$in = array("-", "_", "xxx", " cover ", ".jpg");
$out = array(" ", " ", "", "", "");
$title = strtolower(str_replace($in,$out,"{$fname}"));
mysql_query("INSERT INTO bilder (datum, anvandare, kategori, filnamn, titel, kommentar, bredd, hojd, storlek)
VALUES(NOW(), $medlem, $kategori, '$newFilename', '$title', $kommentar, $width, $height, $storlek)")
or sqlerr(__FILE__, __LINE__);
}
}
}
closedir( $dir );
}
createThumbs("upload/","mini/",330);
createThumbs("upload/","mellan/",690);
Jag vill INTE skapa miniatyrer av bilder som har ordet "normal_" eller "thumb_" i filnamnet.
if (stristr($info['filename'], "normal_") === FALSE)
// Skulle även vilja exkludera "thumb_", men vet inte hur jag lägger till det.
Är tacksam för all hjälp. :birp

