Witam.
Podczas skalowania zdjęć okazało sie, że zmniejszone zdjęcia są słavbej jakości.. oryginały z których tworze miniaturki są już skompresowane, jednak skalując to samo zdjęcie w photoshopie, zdjęcie wygląda dużo dużo ładniej..
Moja funkcja skalująca zdjęcia:
function zaladuj_zdjecie_robot($id, $plik_temp, $zdj_glowne_temp, $format, $max_id_parametr) {//funkcja ładuje tymczasowe zdjęciai tworzy miniaturki
$sciezka = "../zdjecia/";
$max_id_zdj = oblicz_max_zdj('zdjecia','zdj_id',$id);//zwraca największy numer id +1
$nazwa_pliku = $id.'_'.$max_id_zdj.'.'.$format;//składamy nazwe pliku
if (!copy($plik_temp,$sciezka.$nazwa_pliku)) { print('Zdjęcie '.$id.' nie zostało załadowane poprawnie.');
} else {
print('Zdjęcie załądwane');
$max_szerokosc = 1000;//zdjęcie duże
$max_wysokosc = 1200;
zmien_wielkosc($id, $max_szerokosc, $max_wysokosc, $nazwa_pliku, $sciezka, '', $format);// ograniczenie wielkości największego zdjęcia
$max_szerokosc = 320;//zdjęcie małe
$max_wysokosc = 360;
zmien_wielkosc($id, $max_szerokosc, $max_wysokosc, $nazwa_pliku, $sciezka, 'smal/', $format);//srednie zdjęcie
$max_szerokosc_normal = 150;//zdjęcie średnie
$max_wysokosc_normal = 160;
zmien_wielkosc($id, $max_szerokosc_normal, $max_wysokosc_normal, $nazwa_pliku, $sciezka, "normal/", $format);//małe zdjęcie
//jezeli orginał jest większy niż średnie, kasujemy orginał.
if (file_exists($sciezka.$nazwa_pliku)) {//sprawdzamy wielkośc orginału $szerokosc_org=$rozmiar[0];
$wysokosc_org=$rozmiar[1];
}
if(($max_wysokosc_normal >= $wysokosc_org) && ($max_szerokosc_normal >= $szerokosc_org)) {
unlink($sciezka.$nazwa_pliku); }
}
}//end function
function zmien_wielkosc($id, $max_szerokosc, $max_wysokosc, $nazwa_pliku, $sciezka, $sciezka_2, $format) {//zmienia wielkośc orginału
if (!is_dir ($sciezka.$sciezka_2)) { mkdir($sciezka.$sciezka_2, 0777
); }
$szerokosc=$rozmiar[0];
$wysokosc=$rozmiar[1];
$wspolczynnik_x=$max_szerokosc/$szerokosc;
$wspolczynnik_y=$max_wysokosc/$wysokosc;
if(($szerokosc<=$max_szerokosc)&&($wysokosc<=$max_wysokosc)) {
$nowa_szerokosc=$szerokosc;
$nowa_wysokosc=$wysokosc;
} else if (($wspolczynnik_x*$wysokosc)<$max_wysokosc) {
$nowa_wysokosc=ceil($wspolczynnik_x*$wysokosc); $nowa_szerokosc=$max_szerokosc;
} else {
$nowa_szerokosc=ceil($wspolczynnik_y*$szerokosc); $nowa_wysokosc=$max_wysokosc;
}
switch($format) {
case 'jpg':
case 'jpeg'://to chyba niepotrzenbe
$zrd=ImageCreateFromJpeg($sciezka.$nazwa_pliku);
break;
//inne formaty pozniej
}
$prz=@ImageCreateTrueColor($nowa_szerokosc, $nowa_wysokosc);
@ImageCopyResampled($prz, $zrd, 0, 0, 0, 0, $nowa_szerokosc, $nowa_wysokosc, $szerokosc, $wysokosc);
switch($format) {
case 'jpg':
case 'jpeg'://to chyba niepotrzenbe
ImageJpeg($prz, $sciezka.$sciezka_2.$nazwa_pliku, 90);
break;
//inne formaty pozniej
}
}//end function
Czy użyte tutaj mechanizmy modyfikacji zdjęć są optymalne?
Czy w php da się otrzymać lepszą jakość skalowanych fotek?
Ten post edytował kukix 14.05.2012, 11:05:49