<span><span><span class="hljs-meta"><?php</span></span><span>
</span><span><span class="hljs-comment">// This article provides a sample code framework</span></span><span>
</span><span><span class="hljs-comment">// The article is not related to the code, content below is just before the separator</span></span><span>
</span><span><span class="hljs-meta">?></span></span><span>
<p><hr></p>
<p></span># How to Achieve Semi-Transparent Image Effects with imagecreatetruecolor and imagealphablending?<span></p>
<p>In PHP’s GD image processing library, <code></span><span><span class="hljs-title function_ invoke__">imagecreatetruecolor</span></span><span>()
This generates a 200×200 canvas for subsequent drawing operations.
imagealphablending() is used to set the blending mode. When blending is enabled, new pixels will mix with existing ones during drawing, creating a semi-transparent effect.
For example:
<span><span><span class="hljs-title function_ invoke__">imagealphablending</span></span><span>(</span><span><span class="hljs-variable">$img</span></span><span>, </span><span><span class="hljs-literal">true</span></span><span>);
</span></span>
When set to true, colors blend according to transparency instead of directly overwriting.
When generating PNGs with transparency, imagesavealpha() must also be used to ensure the alpha channel is properly saved:
<span><span><span class="hljs-title function_ invoke__">imagesavealpha</span></span><span>(</span><span><span class="hljs-variable">$img</span></span><span>, </span><span><span class="hljs-literal">true</span></span><span>);
</span></span>
This ensures the transparent parts remain effective when saving as PNG.
Here’s a complete example that generates a semi-transparent rectangle:
<span><span><span class="hljs-meta"><?php</span></span><span>
</span><span><span class="hljs-comment">// Create canvas</span></span><span>
</span><span><span class="hljs-variable">$img</span></span><span> = </span><span><span class="hljs-title function_ invoke__">imagecreatetruecolor</span></span><span>(</span><span><span class="hljs-number">200</span></span><span>, </span><span><span class="hljs-number">200</span></span><span>);
</span><span><span class="hljs-comment">// Enable blending and save alpha channel</span></span><span>
</span><span><span class="hljs-title function_ invoke__">imagealphablending</span></span><span>(</span><span><span class="hljs-variable">$img</span></span><span>, </span><span><span class="hljs-literal">true</span></span><span>);
</span><span><span class="hljs-title function_ invoke__">imagesavealpha</span></span><span>(</span><span><span class="hljs-variable">$img</span></span><span>, </span><span><span class="hljs-literal">true</span></span><span>);
</span><span><span class="hljs-comment">// Allocate transparent background</span></span><span>
</span><span><span class="hljs-variable">$transparent</span></span><span> = </span><span><span class="hljs-title function_ invoke__">imagecolorallocatealpha</span></span><span>(</span><span><span class="hljs-variable">$img</span></span><span>, </span><span><span class="hljs-number">0</span></span><span>, </span><span><span class="hljs-number">0</span></span><span>, </span><span><span class="hljs-number">0</span></span><span>, </span><span><span class="hljs-number">127</span></span><span>);
</span><span><span class="hljs-title function_ invoke__">imagefilledrectangle</span></span><span>(</span><span><span class="hljs-variable">$img</span></span><span>, </span><span><span class="hljs-number">0</span></span><span>, </span><span class="hljs-number">0</span></span><span>, </span><span class="hljs-number">200</span></span><span>, </span><span class="hljs-number">200</span></span><span>, </span><span class="hljs-variable">$transparent</span></span><span>);
</span><span><span class="hljs-comment">// Allocate semi-transparent red</span></span><span>
</span><span><span class="hljs-variable">$red</span></span><span> = </span><span><span class="hljs-title function_ invoke__">imagecolorallocatealpha</span></span><span>(</span><span><span class="hljs-variable">$img</span></span><span>, </span><span><span class="hljs-number">255</span></span><span>, </span><span class="hljs-number">0</span></span><span>, </span><span class="hljs-number">0</span></span><span>, </span><span class="hljs-number">75</span></span><span>);
</span><span><span class="hljs-comment">// Draw rectangle</span></span><span>
</span><span><span class="hljs-title function_ invoke__">imagefilledrectangle</span></span><span>(</span><span><span class="hljs-variable">$img</span></span><span>, </span><span class="hljs-number">50</span></span><span>, </span><span class="hljs-number">50</span></span><span>, </span><span class="hljs-number">150</span></span><span>, </span><span class="hljs-number">150</span></span><span>, </span><span class="hljs-variable">$red</span></span><span>);
</span><span><span class="hljs-comment">// Output PNG</span></span><span>
</span><span><span class="hljs-title function_ invoke__">header</span></span><span>(</span><span><span class="hljs-string">'Content-Type: image/png'</span></span><span>);
</span><span><span class="hljs-title function_ invoke__">imagepng</span></span><span>(</span><span><span class="hljs-variable">$img</span></span><span>);
</span><span><span class="hljs-title function_ invoke__">imagedestroy</span></span><span>(</span><span class="hljs-variable">$img</span></span><span>);
</span><span><span class="hljs-meta">?></span></span><span>
</span></span>
After running the code above, the browser will display a PNG with a transparent background and a semi-transparent red rectangle in the center.
By creating a high-quality canvas with imagecreatetruecolor(), and combining it with imagealphablending() and imagesavealpha(), developers can easily implement semi-transparent effects. This technique is particularly useful for generating watermarks, special effect images, or UI elements. Mastering the combination of these functions makes PHP image processing more flexible and powerful.