Autor Zpráva
it47
Profil
Ahojte,

mam skript na zmensovanie obrazkov, avsak kvalita zmensenych obrazkov nie je taka vyborna, ako ked ho zmenis, cez nejaky softver.

Ten skript ma aj 10 rokov, viete mi prosim poradit, ako vytvorit zmensenie obrazku so 100% kvalitou?

Vopred dakujem velmi pekne.
Keeehi
Profil
it47:
Chceš si obrázky zmenšit sám, nebo to potřebuješ automatizovat?
Chro.
Profil
Asi nejdůležitější je při zmenšování obrázku pomocí GD knihovny nepoužívat funkci imagecopyresized(), ale imagecopyresampled(), která obrázek tzv. převzorkuje. Kvalita je poté o poznání lepší. Po zmenšení je vhodné obrázek ještě jemně doostřit. Viz problem s kvalitou obrazku pri resize s php
it47
Profil
Keeehi:
Potrebujem spravit upload obrazkov, pri ktorom vytvorim viac rozmerov obrazkov

Chro.:
Super, dakujem pekne.

Nahodou prosim Ta nejaky uceleny kod nemas aj s tym doostrenim, nech si to mozem rovno vyskusat?

Vopred dakujem velmi pekne.
Chro.
Profil
Tak předpokládejme, že si ten obrázek po uploadu uložil do složky upload. Je třeba ho znova otevřít a vytvořit náhled. Psal jsem z hlavy, bez ošetření chyb.
<?php
//zde tvůj kód na uložení obrázku po uploadu

//níže kód na vytvoření a uložení náhledu

//načtení obrázku z např. složky upload
$obr_nazev = 'upload/novefoto.jpg';
$obr_obsah = file_get_contents($obr_nazev);
$obr_zdroj = imagecreatefromstring($obr_obsah);
list($obr_sirka, $obr_vyska) = getimagesize($obr_nazev);

//vytvoření náhledu
$nahled_sirka = 200;
$pomer = $obr_sirka / $obr_vyska;
$nahled_vyska = floor($nahled_sirka / $pomer);
$nahled_zdroj = imagecreatetruecolor($nahled_sirka, $nahled_vyska);
imagecopyresampled($nahled_zdroj, $obr_zdroj, 0, 0, 0, 0, $nahled_sirka, $nahled_vyska, $obr_sirka, $obr_vyska);

//zaostreni nahledu
$matrix = array(
array(-1.2, -1, -1.2),
array(-1, 20, -1),
array(-1.2, -1, -1.2)
);
$delitel = array_sum(array_map ('array_sum', $matrix));
imageconvolution($nahled_zdroj, $matrix, $delitel, 0);

//uložení náhledu do např. složky thumbs s 90% kvalitou
$nahled_nazev = 'th'.$nahled_sirka.'_'.$obr_nazev;
imagejpeg($nahled_zdroj, 'thumbs/'.$nahled_nazev, 90);

imagedestroy($obr_zdroj);
imagedestroy($nahled_zdroj);
?>

Vaše odpověď

Mohlo by se hodit


Prosím používejte diakritiku a interpunkci.

Ochrana proti spamu. Napište prosím číslo dvě-sta čtyřicet-sedm:

0