Hei!
Tämä muuten toimiva koodin tuotta ongelmia kun ilmeisesti palvelimen PHP rajoitukset estävät koodia lataamasta kaikista kuvista "peukalonpäitä". Eli se mitä haen olisi että missä kohtaa tätä koodia voin muuttaa tuon kuvan laatua. Thumbnail kuvanlaatuhan ei tarvitse olla mikään postikortti joten se ei haittaisi yhtään jos niiden laatua vähän laskee pienemmäksi.
Niitä palvelimen rajoituksia ei pääse, eikä pysty, eikä anneta muokata joten sille linjalle ei edes kannata lähteä.
Kiitos vastauksista jo näin etukäteen.
PS. tässä vielä se koodi joka ne "peukalonpäät" tekee
<?php include("conf.php"); function pngThumbnail($file) { global $dsize; global $dirfile; global $errfile; if (function_exists('imagecreatetruecolor')) { $im = imagecreatetruecolor($dsize, $dsize); } else { $im = imagecreate($dsize, $dsize); } $background = imagecolorclosest ( $im, 0, 0, 0); // Tausta $frame1 = imagecolorclosest ( $im, 50, 50, 50); // Frame1 $frame2 = imagecolorclosest ( $im, 25, 25, 25); // Frame2 $frame3 = imagecolorclosest ( $im, 25, 25, 25); // Frame3 imagefilledrectangle ( $im, 0, 0, $dsize, $dsize, $background); $size = @getimagesize($file); switch($size[2]) { case 2: $si = imagecreatefromjpeg($file); break; case 3: $si = imagecreatefrompng($file); break; case 1: if (function_exists('imagecreatefromgif')){ $si = imagecreatefromgif($file); break; } default: $file = $errfile; $size = @getimagesize($file); $si = imagecreatefrompng($file); break; } $im_w = $size[0]; $im_h = $size[1]; if(($im_h < $dsize) && ($im_w < $dsize)) { $dw = $im_w; $dh = $im_h; $dx = floor(($dsize - $dw)/2); $dy = floor(($dsize - $dh)/2); } elseif ( $im_w > $im_h ) { $dx = 0; $dw = $dsize; $dh = floor($dsize * $im_h/$im_w); $dy = floor(($dsize - $dh)/2); } else { $dy = 0; $dh = $dsize; $dw = floor($dsize * $im_w/$im_h); $dx = floor(($dsize - $dw)/2); } if (function_exists('imagecopyresampled')) { imagecopyresampled( $im, $si, $dx, $dy, 0, 0, $dw, $dh, $im_w, $im_h); } else { imagecopyresized( $im, $si, $dx, $dy, 0, 0, $dw, $dh, $im_w, $im_h); } imagerectangle ( $im, -1, -1, $dsize-2, $dsize-2, $frame1); imagerectangle ( $im, 0, 0, $dsize, $dsize, $frame2); imagerectangle ( $im, -1, -1, $dsize-1, $dsize-1, $frame3); imageinterlace($im, 1); imagepng($im); if(!(is_dir("thumbs"))) { mkdir("thumbs"); } imagepng($im, 'thumbs/'.str_replace('/', '´´', str_replace('\\', '``', $file))); imagedestroy($im); imagedestroy($si); exit(); } if (isset($_SERVER['QUERY_STRING']) && ($_SERVER['QUERY_STRING'] !== '')) { $file = $_SERVER['QUERY_STRING']; $regs = array(); while (ereg('%[0-9]{2}', $file, $regs)) { $file = str_replace($regs[0], chr(hexdec($regs[0])), $file); } if(is_dir($file)) { $i = 0; $dir = opendir($file); while($b = readdir($dir)) { $koko = @getimagesize($file."/".$b); if(($koko[2] == 1) || ($koko[2] == 2) || ($koko[2] == 3)) { $file = $file."/".$b; $i++; } } if($i == 0) { $file = $dirfile; } $icon = $dirico; } $file2 = str_replace('/', '´´', str_replace('\\', '``', $file)); if(is_file('thumbs/'.$file2)) { $im = imagecreatefrompng('thumbs/'.$file2); imagepng ($im); exit(); } elseif (is_readable($file)) { pngThumbnail($file); $icon = $imgico; exit(); } else { pngThumbnail($errfile); $icon = $imgico; exit(); } } exit(); ?>
Voit säätää laatua imagepng
-funkkarissa, kts. manuaali. Toinen suositeltava pienentämiskikka on vaihtaa thumbit JPEGeiksi, imagejpeg
.
Ei niitä kuvia kannata lennosta generoida. Aika raskasta ja hidasta hommaa, varsinkin jos alkuperäinen kuva on vähänkään isompi.
Kun kuva ladataan palvelimelle, tee siitä jo silloin thumbnail ja katselukuva, jotka tallennat kovalevylle. Kuvan koon huonontaminen ei muuten vaikuta siihen, jos PHP:ltä loppuu muisti kesken.
Edti: Jaahas, välistä hävisikin yksi viesti...
Aihe on jo aika vanha, joten et voi enää vastata siihen.