Orijinal görüntüyü kaydeden bir php betiğim var, ardından yeniden boyutlandırıyorum - web görüntülemesi için bir küçük resim ve daha büyük bir resim. Bu bazı görüntüler ile iyi çalışır, kalitesi korkunç. Çok düşük bir renk paletiyle kaydedilmiş gibi görünüyor. Sen http://kalpaitch.com/index.php?filter=white de sonucu görebilirsiniz - başlık 'beyaz beyaz' ile ilk küçük resme tıklayın Aşağıda php görüntükopi kalitesi düşük kalitede görüntüleniyor
görüntü yeniden örnekleme için kullanılan kod:function resizeImg($name, $extension, $size1, $size2) {
if (preg_match('/jpg|jpeg|JPG|JPEG/',$extension)){
$image = imagecreatefromjpeg($name);
}
if (preg_match('/gif|GIF/',$extension)){
$image = imagecreatefromgif($name);
}
$old_width = imageSX($image);
$old_height = imageSY($image);
$old_aspect_ratio = $old_width/$old_height;
if($size2 == 0){
$new_aspect_ratio = $old_aspect_ratio;
if($old_width > $old_height){
$new_width = $size1;
$new_height = $new_width/$old_aspect_ratio;
} else {
$new_height = $size1;
$new_width = $new_height * $old_aspect_ratio;
}
} elseif($size2 > 0){
$new_aspect_ratio = $size1/$size2;
//for landscape potographs
if($old_aspect_ratio >= $new_aspect_ratio) {
$x1 = round(($old_width - ($old_width * ($new_aspect_ratio/$old_aspect_ratio)))/2);
$old_width = round($old_width * ($new_aspect_ratio/$old_aspect_ratio));
$y1 = 0;
$new_width = $size1;
$new_height = $size2;
//for portrait photographs
} else{
$x1 = 0;
$y1 = 0;
$old_height = round($old_width/$new_aspect_ratio);
$new_width = $size1;
$new_height = $size2;
}
}
$new_image = imagecreatetruecolor($new_width, $new_height);
imagecopyresampled($new_image, $image, 0, 0, $x1, $y1, $new_width, $new_height, $old_width, $old_height);
return $new_image;
Çok teşekkürler
Not;
[Fotoğraf sunucu kaldırıldı] Ve burada yükleme kodunun gerisi: iyi
// Move the original to the right place
$result = @move_uploaded_file($image['tmp_name'], $origlocation);
// Resize the image and save the thumbnail
$new_image = resizeImg($origlocation, $extension, 500, 0);
if (preg_match("/gif/",$extension)){
imagegif($new_image, $normallocation);
} else {
imagejpeg($new_image, $normallocation);
}
// Resize the image and save the thumbnail
$new_image = resizeImg($origlocation, $extension, 190, 120);
if (preg_match("/gif/",$extension)){
imagegif($new_image, $thumblocation);
} else {
imagejpeg($new_image, $thumblocation);
}
Önce bir örnek gösterebilir misiniz? –
% 100 açık değilim, ancak aldığınız görüntülerin bir kısmı belli bir boyuta benziyor ve senaryonuz aslında orijinalinden daha fazla BÜYÜK olarak yeniden boyutlandırılıyor mu? Bunu yaparsanız kalite çok kötü olur. – Jage
Hayır, yalnızca bir boyut verilirse betik resmi orantılı olarak yeniden boyutlandıramaz. İki boyut verilirse, yeniden boyutlandırılır ve en-boy oranını değiştirmeden kalan kısmı kırpın. Yeniden örneklenen görüntüler, orijinal görüntüden her zaman çok daha düşük çözünürlüktedir. Yukarıdaki fotoğrafın orijinali değil, ikisi de aynı çözünürlüktedir, ancak önce photoshop ile kaydedilir ve sonra script'imle kaydedilir. – kalpaitch