| Autor | Zpráva | ||
|---|---|---|---|
| regvac Profil * |
#1 · Zasláno: 22. 4. 2011, 15:37:04
Ahoj,
mám dotaz, zda je možné nějakou php funkcí jednobarevně obarvit černobílou fotku, např. dát jí barevný nádech? Z této fotky [/url] udělat tuto [url=http://www.ata4.cz/color/modra.jpg] či tuto [url=http://www.ata4.cz/color/cervena.jpg][/url], atd... Díky |
||
| regvac Profil * |
#2 · Zasláno: 22. 4. 2011, 15:39:40
|
||
| Louka Profil |
#3 · Zasláno: 22. 4. 2011, 15:48:01
Myslím, že takovou funkci by sis musel napsat sám, o žádné nativní nevím.
|
||
| regvac Profil * |
#4 · Zasláno: 22. 4. 2011, 15:51:00
A alespoň nějaký nápad, jak to zrealizovat?
|
||
| okolojdouci Profil * |
#5 · Zasláno: 22. 4. 2011, 15:58:30
Jestli "obarvit" znamená posunout celou paletu někam, tak na to jsou v php funkce. Prostě projdeš všechny pixely a každému z nich dejme tomu ubereš 20 % červené.
http://cz.php.net/manual/en/book.image.php |
||
| Louka Profil |
#6 · Zasláno: 22. 4. 2011, 16:03:30
PHP funkce které upotřebíš:
http://cz.php.net/manual/en/function.imagecreatetruecolor.php http://cz.php.net/manual/en/function.imagesetpixel.php Ano, myslel jsem to tak, že není jedna fce, která by to udělala za tebe, ale je to možné s využitím stávajících. |
||
| regvac Profil * |
#7 · Zasláno: 22. 4. 2011, 16:05:44
okolojdouci:
„znamená posunout celou paletu někam“ Ano, to je ono, jen která z těch odkazovaných funkcí mi pomůže? |
||
| regvac Profil * |
#8 · Zasláno: 22. 4. 2011, 16:06:32
Omluva, neměl jsem zaktualizovanou stránku, tak můj dotaz přišel až po tvé odpovědi
|
||
| Louka Profil |
#9 · Zasláno: 22. 4. 2011, 16:20:34 · Upravil/a: Louka
<?php
$im = imagecreatefrompng("image.png");
// tady vytáhni $width a $height jako rozměry $im
$width = imagesx($im);
$height = imagesy($im);
$novy = imagecreatetruecolor($width, $height);
$y = 0;
while ( $y <= $height )
{
$x = 0;
while ( $x <= $width )
{
$rgb = imagecolorat($im, $x, $y);
$r = ($rgb >> 16) & 0xFF;
$g = ($rgb >> 8) & 0xFF;
$b = $rgb & 0xFF;
// ted je v $r $g $b ulozena barva pixelu... zpracuj jí a použij imagesetpixel
// na vytvoření nového obrázku který je v $novy
/* zpracuj barvu - to je na tobě jak */
imagesetpixel($novy, $x, $y, $nova_barva);
}
}
EDIT: http://cz.php.net/manual/en/function.imagecolorallocate.php tohle ti pomůže při vytvoření $nova_barva :) |
||
| regvac Profil * |
#10 · Zasláno: 22. 4. 2011, 16:40:55
Už to mám po svém:-)
<?php
function html2rgb($color) {
if ($color[0] == '#') {$color = substr($color, 1);}
if (strlen($color) == 6) {list($r, $g, $b) = array($color[0].$color[1], $color[2].$color[3], $color[4].$color[5]);}
elseif (strlen($color) == 3) {list($r, $g, $b) = array($color[0].$color[0], $color[1].$color[1], $color[2].$color[2]);}
else {return false;}
$r = hexdec($r); $g = hexdec($g); $b = hexdec($b);
return array($r, $g, $b);
}
$file = 'cb.png';
$obr = imagecreatefrompng($file);
$color = "ff0000";
$color_rgb = html2rgb($color);
list($width, $height, $type, $attr) = getimagesize($file);
for ($x = 0; $x < $width; $x++) {
for ($y = 0; $y < $height; $y++) {
$rgb = imagecolorat($obr, $x, $y);
$r = ($rgb >> 16) & 0xFF;
$g = ($rgb >> 8) & 0xFF;
$b = $rgb & 0xFF;
$rc = round($r/255*$color_rgb[0]);
$gc = round($g/255*$color_rgb[1]);
$bc = round($b/255*$color_rgb[2]);
$color = imagecolorallocate($obr, $rc, $gc, $bc);
imagesetpixel($obr, $x, $y, $color);
}
}
header("Content-Type: image/png");
imagepng($obr);
imagedestroy($obr);
?> |
||
|
Časová prodleva: 15 let
|
|||
0