Skip to content

addOpacity()

Adjusts the opacity/transparency of an image. Output is always PNG to preserve transparency.

public function addOpacity(
string $inputImagePath,
string $outputImagePath,
int $opacityPercent
): void

Path to the input image file. Supports JPEG, PNG, and GIF.

Path where the output PNG will be saved. Always outputs PNG format.

Opacity level (0-100).

  • 0 - Fully transparent (invisible)
  • 50 - Semi-transparent
  • 100 - Fully opaque (no transparency)

Values outside 0-100 are automatically clamped.

Returns void. Creates the output PNG file.

The method applies the opacity to all pixels in the image:

  • Creates a transparent canvas
  • Copies the original image with specified opacity
  • Saves as PNG to preserve transparency

Always outputs PNG, regardless of input format:

  • JPEG → PNG
  • PNG → PNG
  • GIF → PNG
use Kenura\Imagick\ImageProcessor;
$processor = new ImageProcessor();
// Make image 50% transparent
$processor->addOpacity('image.jpg', 'transparent.png', 50);
// Create semi-transparent logo for watermarking
$processor->addOpacity('logo.png', 'watermark.png', 40);
// Use as watermark
$processor->addWatermark(
'photo.jpg',
'watermarked.jpg',
'watermark.png',
'bottom-right',
10
);
// Very transparent
$processor->addOpacity('image.jpg', 'very-transparent.png', 20);
// Semi-transparent
$processor->addOpacity('image.jpg', 'semi-transparent.png', 50);
// Slightly transparent
$processor->addOpacity('image.jpg', 'slightly-transparent.png', 80);
// Fully opaque (no change)
$processor->addOpacity('image.jpg', 'opaque.png', 100);
$images = glob('images/*.jpg');
foreach ($images as $image) {
$filename = pathinfo($image, PATHINFO_FILENAME);
$processor->addOpacity($image, "transparent/{$filename}.png", 60);
}
ValueDescriptionUse Case
0-20Very transparentGhost effects, subtle overlays
20-40Mostly transparentWatermarks, background patterns
40-60Semi-transparentOverlays, fade effects
60-80Slightly transparentSubtle effects
80-100Nearly/fully opaqueMinimal transparency
// ✅ Good: Clear that output is PNG
$processor->addOpacity('image.jpg', 'output.png', 50);
// ⚠️ Confusing: Output is still PNG despite .jpg extension
$processor->addOpacity('image.jpg', 'output.jpg', 50);
// Values are automatically clamped, but validate for clarity
$opacity = max(0, min(100, $userInput));
$processor->addOpacity('image.jpg', 'output.png', $opacity);
// PNG files can be larger than JPEG
// Original JPEG: 500KB
$processor->addOpacity('photo.jpg', 'transparent.png', 50);
// Output PNG might be: 800KB+
// Create transparent watermark
$processor->addOpacity('logo.png', 'watermark.png', 50);
// Create semi-transparent overlay
$processor->addOpacity('texture.jpg', 'overlay.png', 30);
// Create faded version
$processor->addOpacity('image.jpg', 'faded.png', 60);

Cause: You specified .jpg extension

Solution: Output is always PNG. Use .png extension:

// Even with .jpg extension, output is PNG
$processor->addOpacity('input.jpg', 'output.jpg', 50);
// Better: use .png extension
$processor->addOpacity('input.jpg', 'output.png', 50);

Cause: PNG files are often larger than JPEG

Solution: This is expected when converting JPEG to PNG with transparency

Cause: 100% opacity means fully opaque (no transparency)

Solution: Use lower values for transparency:

// No change
$processor->addOpacity('image.jpg', 'output.png', 100);
// Transparent
$processor->addOpacity('image.jpg', 'output.png', 50);