Autor | Zpráva | ||
---|---|---|---|
Jenicek Profil |
zdravím, řeším celkem zajímavou pikantnost...
k tvprogramu (http://tv-program.tetristv.com/) řeším "aktuální" náhled TV co frčí :) pikantní problém tkví ale v tom, že i když získám obrázek celkem v pohodě obrázek je rozostřený, no když se povede a zachytí se statický obraz nebo běží animák obraz je krásně čistý.... zajímalo by mě, zda někdo už něco podobného s vylepšováním obrazu v php například u profilových obrázků řešil... viz: http://tv-program.tetristv.com/nahled/MGM.jpg a http://tv-program.tetristv.com/nahled/Disney%20Channel.jpg více na http://tv-program.tetristv.com/nahled/ |
||
Jenicek Profil |
#2 · Zasláno: 3. 6. 2012, 17:29:27
po usilovném hledání jsem našel tuto funkci :-)
function UnsharpMask($img, $amount, $radius, $threshold) { if ($amount > 500) $amount = 500; $amount = $amount * 0.016; if ($radius > 50) $radius = 50; $radius = $radius * 2; if ($threshold > 255) $threshold = 255; $radius = abs(round($radius)); if ($radius == 0) { return $img; imagedestroy($img); break; } $w = imagesx($img); $h = imagesy($img); $imgCanvas = imagecreatetruecolor($w, $h); $imgBlur = imagecreatetruecolor($w, $h); if (function_exists('imageconvolution')) { // PHP >= 5.1 $matrix = array( array( 1, 2, 1 ), array( 2, 4, 2 ), array( 1, 2, 1 ) ); imagecopy ($imgBlur, $img, 0, 0, 0, 0, $w, $h); imageconvolution($imgBlur, $matrix, 16, 0); } else { for ($i = 0; $i < $radius; $i++) { imagecopy ($imgBlur, $img, 0, 0, 1, 0, $w - 1, $h); // left imagecopymerge ($imgBlur, $img, 1, 0, 0, 0, $w, $h, 50); // right imagecopymerge ($imgBlur, $img, 0, 0, 0, 0, $w, $h, 50); // center imagecopy ($imgCanvas, $imgBlur, 0, 0, 0, 0, $w, $h); imagecopymerge ($imgBlur, $imgCanvas, 0, 0, 0, 1, $w, $h - 1, 33.33333 ); // up imagecopymerge ($imgBlur, $imgCanvas, 0, 1, 0, 0, $w, $h, 25); // down } } if($threshold>0){ // Calculate the difference between the blurred pixels and the original // and set the pixels for ($x = 0; $x < $w-1; $x++) { // each row for ($y = 0; $y < $h; $y++) { // each pixel $rgbOrig = ImageColorAt($img, $x, $y); $rOrig = (($rgbOrig >> 16) & 0xFF); $gOrig = (($rgbOrig >> 8) & 0xFF); $bOrig = ($rgbOrig & 0xFF); $rgbBlur = ImageColorAt($imgBlur, $x, $y); $rBlur = (($rgbBlur >> 16) & 0xFF); $gBlur = (($rgbBlur >> 8) & 0xFF); $bBlur = ($rgbBlur & 0xFF); // When the masked pixels differ less from the original // than the threshold specifies, they are set to their original value. $rNew = (abs($rOrig - $rBlur) >= $threshold) ? max(0, min(255, ($amount * ($rOrig - $rBlur)) + $rOrig)) : $rOrig; $gNew = (abs($gOrig - $gBlur) >= $threshold) ? max(0, min(255, ($amount * ($gOrig - $gBlur)) + $gOrig)) : $gOrig; $bNew = (abs($bOrig - $bBlur) >= $threshold) ? max(0, min(255, ($amount * ($bOrig - $bBlur)) + $bOrig)) : $bOrig; if (($rOrig != $rNew) || ($gOrig != $gNew) || ($bOrig != $bNew)) { $pixCol = ImageColorAllocate($img, $rNew, $gNew, $bNew); ImageSetPixel($img, $x, $y, $pixCol); } } } } else{ for ($x = 0; $x < $w; $x++) { // each row for ($y = 0; $y < $h; $y++) { // each pixel $rgbOrig = ImageColorAt($img, $x, $y); $rOrig = (($rgbOrig >> 16) & 0xFF); $gOrig = (($rgbOrig >> 8) & 0xFF); $bOrig = ($rgbOrig & 0xFF); $rgbBlur = ImageColorAt($imgBlur, $x, $y); $rBlur = (($rgbBlur >> 16) & 0xFF); $gBlur = (($rgbBlur >> 8) & 0xFF); $bBlur = ($rgbBlur & 0xFF); $rNew = ($amount * ($rOrig - $rBlur)) + $rOrig; if($rNew>255){$rNew=255;} elseif($rNew<0){$rNew=0;} $gNew = ($amount * ($gOrig - $gBlur)) + $gOrig; if($gNew>255){$gNew=255;} elseif($gNew<0){$gNew=0;} $bNew = ($amount * ($bOrig - $bBlur)) + $bOrig; if($bNew>255){$bNew=255;} elseif($bNew<0){$bNew=0;} $rgbNew = ($rNew << 16) + ($gNew <<8) + $bNew; ImageSetPixel($img, $x, $y, $rgbNew); } } } imagedestroy($imgCanvas); imagedestroy($imgBlur); return $img; } na webu (zdroj: http://vikjavev.no/computing/ump.php) to funguje krásně ale já to za boha nějak nemohu rozběhat... stále mi to vyhazuje Resource id #3 díky za rady :-) |
||
panther Profil |
Jenicek:
předpokládám, že to vrací jeden z těch dvou return ů, co tam máš (dodal-li jsi správný kód)... To znamená, že v proměnné img , kterou funkci předáváš jako parametr, je mysql resource (výstup z mysql_query), nikoliv string (název obrázku?).
|
||
Jenicek Profil |
nene, z mysql vůbec nic netahám...
img volám imagecreatefromjpeg: imagecreatefromjpeg("Ztest.jpg"); |
||
panther Profil |
Jenicek:
výborně, a teď si přečti, co že ta tebou užívaná funkce vrací - asi tě nepřekvapí, že resource . Nezkoumal jsem ten tvůj kód, proto jsem tipl téměř naslepo - mysql_query vrací totéž.
|
||
Jenicek Profil |
#6 · Zasláno: 3. 6. 2012, 18:00:38
no dobře ale jak vyvolám img? :(
zkoušel jsem už snad všechno... ocenil bych radu :D už to zkouším hodinu a začíná mi jít z toho hlava kolem... posledních 10 minut na to jenom zírám a dělám že přemýšlím :D děkuji případně se na to vyflajznu a porobím to v cčku vyhýbal jsem se tomu jak čert kříže ale asi to bude snažší :D |
||
Alphard Profil |
#7 · Zasláno: 3. 6. 2012, 19:09:18
Jenicek:
Tohle není problém PHP :-) Té funkci předáte resource, ona vám vrátí resource na jiný obrázek. Tak to ještě prožeňte imagejpeg() a mělo by to fungovat. |
||
Jenicek Profil |
#8 · Zasláno: 3. 6. 2012, 21:52:10 · Upravil/a: Jenicek
děkuji ... no nakonec to stejně budu muset řešit přes Cčko toto má spíše opačný efekt než zaostření :(
nakonec jsem to prohnal přes aplikaci VLC kde jsem nastavil prokládání, no obraz už je čistý :) jen to trvá trošku déle jednoznačtě toto byla výborná zkušenost :) snad se i někomu bude hodit až to bude hodinu googlit jako já :D |
||
Alphard Profil |
#9 · Zasláno: 3. 6. 2012, 22:31:15
Kdybych potřeboval zaostřovat, nejdříve bych si zkusil http://www.php.net/manual/en/imagick.sharpenimage.php případně http://www.php.net/manual/en/imagick.adaptivesharpenimage.php.
VLC pracuje přímo s videem, kde berete video soubory? Občas se tady objeví dotaz, jak získat náhledy z videa, jestli to máte vyřešené, určitě by to někdo časem ocenil. |
||
Jenicek Profil |
VLC umí zázraky ... umí i fotit... stačí jen vhodně vyvolaný příkaz (mohu mezi SW pak hodit nějaký návod ale pravděpodobně toto půjde i vygooglit) :)
video soubory... vlastním malou kabelovku řešenou přes net proto mohu řešit i TV program vytahovaný z EPG a screeny (takže DVB-T a DVB-S) :) |
||
Časová prodleva: 12 let
|
0