Нет прямого способа изменить непрозрачность с помощью функции DG (на самом деле есть ). Но это можно сделать с помощью пиксельных манипуляций:
/**
* @param resource $imageSrc Image resource. Not being modified.
* @param float $opacity Opacity to set from 0 (fully transparent) to 1 (no change)
* @return resource Transparent image resource
*/
function imagesetopacity( $imageSrc, $opacity )
{
$width = imagesx( $imageSrc );
$height = imagesy( $imageSrc );
// Duplicate image and convert to TrueColor
$imageDst = imagecreatetruecolor( $width, $height );
imagealphablending( $imageDst, false );
imagefill( $imageDst, 0, 0, imagecolortransparent( $imageDst ));
imagecopy( $imageDst, $imageSrc, 0, 0, 0, 0, $width, $height );
// Set new opacity to each pixel
for ( $x = 0; $x < $width; ++$x )
for ( $y = 0; $y < $height; ++$y ) {
$pixelColor = imagecolorat( $imageDst, $x, $y );
$pixelOpacity = 127 - (( $pixelColor >> 24 ) & 0xFF );
if ( $pixelOpacity > 0 ) {
$pixelOpacity = $pixelOpacity * $opacity;
$pixelColor = ( $pixelColor & 0xFFFFFF ) | ( (int)round( 127 - $pixelOpacity ) << 24 );
imagesetpixel( $imageDst, $x, $y, $pixelColor );
}
}
return $imageDst;
}
$source = imagecreatefrompng( 'my_image.png' );
$newImage = imagesetopacity( $source, 0.5 );
imagedestroy( $source );
header( 'Content-Type: image/png' );
imagepng( $newImage );
imagedestroy( $newImage );