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: 14 let
|
Toto téma je uzamčeno. Odpověď nelze zaslat.
0