Полупрозрачность в php gd?

Люди подскажите пжлст.


После определенных манипуляций c GD есть дескриптор картинки с прозрачным фоном и полностью непрозрачными элементами. Как сделать всю картинку полупрозрачной, например 30%, и выдать?


Заранее спасибо!
  • Вопрос задан
  • 4177 просмотров
Пригласить эксперта
Ответы на вопрос 2
zoommy
@zoommy Автор вопроса
Ответ найден! Спасибо за наводку. Вот фунция:
function imagecopymerge_alpha($dst_im, $src_im, $dst_x, $dst_y, $src_x, $src_y, $src_w, $src_h, $pct){ 
	    // $pct - уровень прозрачности при наложении 0 .. 100
	    if(!isset($pct)){ 
	        return false; 
	    }
	    $pct /= 100;
	    $w = imagesx( $src_im ); 
	    $h = imagesy( $src_im ); 
	    imagealphablending( $src_im, false );
	    $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; 
	        } 
	    } 
	    for( $x = 0; $x < $w; $x++ ){ 
	        for( $y = 0; $y < $h; $y++ ){ 
	            $colorxy = imagecolorat( $src_im, $x, $y ); 
	            $alpha = ( $colorxy >> 24 ) & 0xFF; 
	            if( $minalpha !== 127 ){ 
	                $alpha = 127 + 127 * $pct * ( $alpha - 127 ) / ( 127 - $minalpha ); 
	            } else { 
	                $alpha += 127 * $pct; 
	            } 
	            $alphacolorxy = imagecolorallocatealpha( $src_im,
	    	    	    	    	    	    	( $colorxy >> 16 ) & 0xFF,
	    	    	    	    	    	    	( $colorxy >> 8 ) & 0xFF,
	    	    	    	    	    	    	  $colorxy & 0xFF, $alpha
	    	    	    	    	      ); 
	            if( !imagesetpixel( $src_im, $x, $y, $alphacolorxy ) ){ 
	                return false; 
	            } 
	        } 
	    } 
	    imagecopy($dst_im, $src_im, $dst_x, $dst_y, $src_x, $src_y, $src_w, $src_h); 
	}
Ответ написан
Комментировать
Может что-то типа этого?
                $color=imagecolorat($src, $x, $y);
                $r = ($color >> 16) & 0xFF;
                $g = ($color >> 8) & 0xFF;
                $b = $color & 0xFF;
                $trans_colour = imagecolorallocatealpha($src, $r, $g, $b, 90);
                imagesetpixel($src, $x, $y, $trans_colour);
Ответ написан
Комментировать
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы