| Autor | Zpráva | ||
|---|---|---|---|
| Hologos Profil |
#1 · Zasláno: 28. 10. 2010, 10:40:23 · Upravil/a: Hologos
Zdravím,
potřebuji pomoct se skriptem, který se stará o vytvoření vodoznaku. Mám tento kód:
<?php
....
list($width, $height, $type, $attr) = getimagesize($photo_path);
$update_photo = mysql_query("UPDATE `photos` SET `ext` = '".$extension."', `width` = '".$width."', `height` = '".$height."' WHERE `id_photo` = '".$lastid."'");
$watermark = './gfx/watermark3.png';
$imagesize_watermark = getimagesize($watermark);
switch($extension)
{
case 'jpg': $image = imagecreatefromjpeg($photo_path); break;
case 'png': $image = imagecreatefrompng($photo_path); break;
case 'gif': $image = imagecreatefromgif($photo_path); break;
}
if ($imagesize_watermark && $imagesize_watermark[2] <= 3) {
$img_watermark = imagecreatefrompng($watermark);
imagecopymerge($image, $img_watermark, 5, imagesy($image) - $imagesize_watermark[1] - 5, 0, 0, $imagesize_watermark[0], $imagesize_watermark[1], 50); // <---
switch($extension)
{
case 'jpg': $saved_photo = imagejpeg($image, $photo_path); break;
case 'png': $saved_photo = imagepng($image, $photo_path); break;
case 'gif': $saved_photo = imagegif($image, $photo_path); break;
}
if($saved_photo)
{
echo '<div id="success">Fotografie byla úspěšně přidána.<br />Vodoznak byl úspěšně aplikován.</div>';
}
else
{
echo '<div id="success">Fotografie byla úspěšně přidána.</div>';
echo '<div id="error" style="margin-top: 5px">Vodoznak se nepodařilo aplikovat.</div>';
}
}
unset($_POST);
unset($_FILES);
....
?>
Na řádce s šipkou je příkaz, který sloučí oba obrázky - poslední parametr je průhlednost. Ať měním parametr jak chci (<0, 100>), tak výsledek nevypadá, jak by měl. Soubory: vodoznak - http://img139.imageshack.us/img139/7990/watermark3.png fotka - http://img295.imageshack.us/img295/6114/testdh.jpg výsledná fotka - http://img219.imageshack.us/img219/6659/90741166.jpg chci, aby vypadala takto - http://img339.imageshack.us/img339/316/vysledek.jpg Poraďte, prosím, zda-li dělám něco špatně. Nebo můžete navrhnout jiný (funkční) postup. Toto je především kostra ze skriptu od Jakuba Vrány. Děkuji |
||
| Keeehi Profil |
#2 · Zasláno: 28. 10. 2010, 11:04:16 · Upravil/a: Keeehi
Podívejte se, co napsali lidé dole pod tuto funkci v manuálu. Je tam několik řešení vašeho problému. (klíčové slovo pro hledání je "alpha")
Nebo se můžete pokusit vyřešit sám s pomocí funkce imagecolorallocatealpha() |
||
| Hologos Profil |
#3 · Zasláno: 28. 10. 2010, 13:39:54 · Upravil/a: Hologos
Děkuji, v diskuzi pod funkcí jsem našel tuto funkci:
function imagecopymerge_alpha($dst_im, $src_im, $dst_x, $dst_y, $src_x, $src_y, $src_w, $src_h, $pct){
if(!isset($pct)){
return false;
}
$pct /= 100;
// Get image width and height
$w = imagesx( $src_im );
$h = imagesy( $src_im );
// Turn alpha blending off
imagealphablending( $src_im, false );
// Find the most opaque pixel in the image (the one with the smallest alpha value)
$minalpha = 127;
for( $x = 0; $x < $w; $x++ )
for( $y = 0; $y < $h; $y++ ){
$alpha = ( imagecolorat( $src_im, $x, $y ) >> 24 ) & 0xFF;
if( $alpha < $minalpha ){
$minalpha = $alpha;
}
}
//loop through image pixels and modify alpha for each
for( $x = 0; $x < $w; $x++ ){
for( $y = 0; $y < $h; $y++ ){
//get current alpha value (represents the TANSPARENCY!)
$colorxy = imagecolorat( $src_im, $x, $y );
$alpha = ( $colorxy >> 24 ) & 0xFF;
//calculate new alpha
if( $minalpha !== 127 ){
$alpha = 127 + 127 * $pct * ( $alpha - 127 ) / ( 127 - $minalpha );
} else {
$alpha += 127 * $pct;
}
//get the color index with new alpha
$alphacolorxy = imagecolorallocatealpha( $src_im, ( $colorxy >> 16 ) & 0xFF, ( $colorxy >> 8 ) & 0xFF, $colorxy & 0xFF, $alpha );
//set pixel with the new color + opacity
if( !imagesetpixel( $src_im, $x, $y, $alphacolorxy ) ){
return false;
}
}
}
// The image copy
imagecopy($dst_im, $src_im, $dst_x, $dst_y, $src_x, $src_y, $src_w, $src_h);
}
Funguje bez chyby a stejně se používá. Díky. |
||
|
Časová prodleva: 16 let
|
|||
Toto téma je uzamčeno. Odpověď nelze zaslat.
0