php操作imagick库可以实现不少图片效果,比如在一张图片上,打印8*10的数字矩阵。以上效果的实现方法如下:
PHP操作Imagick库代码
<OL class=dp-c><LI class=alt><SPAN><SPAN class=comment><FONT color=#008200>//格子的尺寸 </FONT></SPAN><SPAN> </SPAN></SPAN><LI class=""><SPAN></SPAN><SPAN class=vars><FONT color=#dd0000>$grid_font_size</FONT></SPAN><SPAN> = 18; </SPAN><SPAN class=comment><FONT color=#008200>//字体大小 </FONT></SPAN><SPAN> </SPAN></SPAN><LI class=alt><SPAN></SPAN><SPAN class=vars><FONT color=#dd0000>$grid_font_color</FONT></SPAN><SPAN> = </SPAN><SPAN class=string><FONT color=#0000ff>"#000"</FONT></SPAN><SPAN>; </SPAN><SPAN class=comment><FONT color=#008200>//字体颜色 </FONT></SPAN><SPAN> </SPAN></SPAN><LI class=""><SPAN></SPAN><SPAN class=vars><FONT color=#dd0000>$grid_width</FONT></SPAN><SPAN> = 36; </SPAN><SPAN class=comment><FONT color=#008200>//格子的宽度 </FONT></SPAN><SPAN> </SPAN></SPAN><LI class=alt><SPAN></SPAN><SPAN class=vars><FONT color=#dd0000>$grid_height</FONT></SPAN><SPAN> = 24; </SPAN><SPAN class=comment><FONT color=#008200>//格子的高度 </FONT></SPAN><SPAN> </SPAN></SPAN><LI class=""><SPAN></SPAN><SPAN class=vars><FONT color=#dd0000>$grid_origin_x</FONT></SPAN><SPAN> = 15; </SPAN><SPAN class=comment><FONT color=#008200>//左上角的数字的起始横坐标 </FONT></SPAN><SPAN> </SPAN></SPAN><LI class=alt><SPAN></SPAN><SPAN class=vars><FONT color=#dd0000>$grid_origin_y</FONT></SPAN><SPAN> = 98; </SPAN><SPAN class=comment><FONT color=#008200>//左上角的数字的起始纵坐标 </FONT></SPAN><SPAN> </SPAN></SPAN><LI class=""><SPAN> </SPAN><LI class=alt><SPAN> #原图 </SPAN><LI class=""><SPAN> </SPAN><SPAN class=vars><FONT color=#dd0000>$image</FONT></SPAN><SPAN> = </SPAN><SPAN class=keyword><STRONG><FONT color=#006699>new</FONT></STRONG></SPAN><SPAN> Imagick(</SPAN><SPAN class=string><FONT color=#0000ff>'background.jpg'</FONT></SPAN><SPAN>); </SPAN></SPAN><LI class=alt><SPAN> </SPAN><LI class=""><SPAN> #写入密保卡数据 </SPAN><LI class=alt><SPAN> </SPAN><SPAN class=vars><FONT color=#dd0000>$tmp_grid_origin_x</FONT></SPAN><SPAN> = </SPAN><SPAN class=vars><FONT color=#dd0000>$grid_origin_x</FONT></SPAN><SPAN>; </SPAN></SPAN><LI class=""><SPAN> </SPAN><SPAN class=vars><FONT color=#dd0000>$tmp_grid_origin_y</FONT></SPAN><SPAN> = </SPAN><SPAN class=vars><FONT color=#dd0000>$grid_origin_y</FONT></SPAN><SPAN>; </SPAN></SPAN><LI class=alt><SPAN> </SPAN><SPAN class=keyword><STRONG><FONT color=#006699>foreach</FONT></STRONG></SPAN><SPAN> (</SPAN><SPAN class=vars><FONT color=#dd0000>$pData</FONT></SPAN><SPAN> </SPAN><SPAN class=keyword><STRONG><FONT color=#006699>as</FONT></STRONG></SPAN><SPAN> </SPAN><SPAN class=vars><FONT color=#dd0000>$k</FONT></SPAN><SPAN> => </SPAN><SPAN class=vars><FONT color=#dd0000>$v</FONT></SPAN><SPAN>){ </SPAN></SPAN><LI class=""><SPAN> </SPAN><SPAN class=keyword><STRONG><FONT color=#006699>foreach</FONT></STRONG></SPAN><SPAN> (</SPAN><SPAN class=vars><FONT color=#dd0000>$v</FONT></SPAN><SPAN> </SPAN><SPAN class=keyword><STRONG><FONT color=#006699>as</FONT></STRONG></SPAN><SPAN> </SPAN><SPAN class=vars><FONT color=#dd0000>$k_grid_data</FONT></SPAN><SPAN> => </SPAN><SPAN class=vars><FONT color=#dd0000>$v_grid_data</FONT></SPAN><SPAN>){ </SPAN></SPAN><LI class=alt><SPAN> </SPAN><SPAN class=vars><FONT color=#dd0000>$tmp_grid_origin_x</FONT></SPAN><SPAN> += </SPAN><SPAN class=vars><FONT color=#dd0000>$grid_width</FONT></SPAN><SPAN>; </SPAN></SPAN><LI class=""><SPAN> </SPAN><SPAN class=vars><FONT color=#dd0000>$draw</FONT></SPAN><SPAN> = </SPAN><SPAN class=keyword><STRONG><FONT color=#006699>new</FONT></STRONG></SPAN><SPAN> ImagickDraw(); </SPAN></SPAN><LI class=alt><SPAN> </SPAN><SPAN class=vars><FONT color=#dd0000>$draw</FONT></SPAN><SPAN>->setFillColor(</SPAN><SPAN class=vars><FONT color=#dd0000>$grid_font_color</FONT></SPAN><SPAN>); </SPAN></SPAN><LI class=""><SPAN> </SPAN><SPAN class=vars><FONT color=#dd0000>$draw</FONT></SPAN><SPAN>->setFontSize(</SPAN><SPAN class=vars><FONT color=#dd0000>$grid_font_size</FONT></SPAN><SPAN>); </SPAN></SPAN><LI class=alt><SPAN> </SPAN><SPAN class=vars><FONT color=#dd0000>$draw</FONT></SPAN><SPAN>->annotation(</SPAN><SPAN class=vars><FONT color=#dd0000>$tmp_grid_origin_x</FONT></SPAN><SPAN>, </SPAN><SPAN class=vars><FONT color=#dd0000>$tmp_grid_origin_y</FONT></SPAN><SPAN>, </SPAN><SPAN class=vars><FONT color=#dd0000>$v_grid_data</FONT></SPAN><SPAN>); </SPAN></SPAN><LI class=""><SPAN> </SPAN><SPAN class=vars><FONT color=#dd0000>$image</FONT></SPAN><SPAN>->drawImage(</SPAN><SPAN class=vars><FONT color=#dd0000>$draw</FONT></SPAN><SPAN>); </SPAN></SPAN><LI class=alt><SPAN> } </SPAN><LI class=""><SPAN> </SPAN><SPAN class=vars><FONT color=#dd0000>$tmp_grid_origin_x</FONT></SPAN><SPAN> = </SPAN><SPAN class=vars><FONT color=#dd0000>$grid_origin_x</FONT></SPAN><SPAN>; </SPAN></SPAN><LI class=alt><SPAN> </SPAN><SPAN class=vars><FONT color=#dd0000>$tmp_grid_origin_y</FONT></SPAN><SPAN> += </SPAN><SPAN class=vars><FONT color=#dd0000>$grid_height</FONT></SPAN><SPAN>; </SPAN></SPAN><LI class=""><SPAN> } </SPAN><LI class=alt><SPAN> </SPAN><SPAN class=vars><FONT color=#dd0000>$image</FONT></SPAN><SPAN>->writeImage(</SPAN><SPAN class=vars><FONT color=#dd0000>$ks_ImageSrcPath</FONT></SPAN><SPAN>. </SPAN><SPAN class=vars><FONT color=#dd0000>$pSN</FONT></SPAN><SPAN>. </SPAN><SPAN class=string><FONT color=#0000ff>'.jpg'</FONT></SPAN><SPAN>); </SPAN></SPAN><LI class=""><SPAN> </SPAN><LI class=alt><SPAN> #释放资源 </SPAN><LI class=""><SPAN> </SPAN><SPAN class=vars><FONT color=#dd0000>$image</FONT></SPAN><SPAN>->destroy(); </SPAN></SPAN><LI class=alt><SPAN> </SPAN><SPAN class=vars><FONT color=#dd0000>$draw</FONT></SPAN><SPAN>->destroy(); </SPAN></SPAN><LI class=""><SPAN> </SPAN></LI></OL>这样做的后果是,在每次循环的时候,都要实例化一个ImagickDraw,并执行drawImage方法,非常占用CPU资源。
可以从以下两点优化:
1. 不必每次都执行new操作,一个就够了;
立即学习“PHP免费学习笔记(深入)”;
2. 不必每次都执行drawImage方法,一次就够了。也就是说,annotation方法好像具有“附加”的意味,不用担心后来的覆盖掉之前的;
PHP操作Imagick库优化后代码如下:
<OL class=dp-c><LI class=alt><SPAN><SPAN class=vars><FONT color=#dd0000>$draw</FONT></SPAN><SPAN> = </SPAN><SPAN class=keyword><STRONG><FONT color=#006699>new</FONT></STRONG></SPAN><SPAN> ImagickDraw(); </SPAN></SPAN><LI class=""><SPAN></SPAN><SPAN class=vars><FONT color=#dd0000>$draw</FONT></SPAN><SPAN>->setFillColor(</SPAN><SPAN class=vars><FONT color=#dd0000>$grid_font_color</FONT></SPAN><SPAN>); </SPAN></SPAN><LI class=alt><SPAN></SPAN><SPAN class=vars><FONT color=#dd0000>$draw</FONT></SPAN><SPAN>->setFontSize(</SPAN><SPAN class=vars><FONT color=#dd0000>$grid_font_size</FONT></SPAN><SPAN>); </SPAN></SPAN><LI class=""><SPAN></SPAN><SPAN class=keyword><STRONG><FONT color=#006699>foreach</FONT></STRONG></SPAN><SPAN> (</SPAN><SPAN class=vars><FONT color=#dd0000>$pData</FONT></SPAN><SPAN> </SPAN><SPAN class=keyword><STRONG><FONT color=#006699>as</FONT></STRONG></SPAN><SPAN> </SPAN><SPAN class=vars><FONT color=#dd0000>$k</FONT></SPAN><SPAN> => </SPAN><SPAN class=vars><FONT color=#dd0000>$v</FONT></SPAN><SPAN>){ </SPAN></SPAN><LI class=alt><SPAN> </SPAN><SPAN class=keyword><STRONG><FONT color=#006699>foreach</FONT></STRONG></SPAN><SPAN> (</SPAN><SPAN class=vars><FONT color=#dd0000>$v</FONT></SPAN><SPAN> </SPAN><SPAN class=keyword><STRONG><FONT color=#006699>as</FONT></STRONG></SPAN><SPAN> </SPAN><SPAN class=vars><FONT color=#dd0000>$k_grid_data</FONT></SPAN><SPAN> => </SPAN><SPAN class=vars><FONT color=#dd0000>$v_grid_data</FONT></SPAN><SPAN>){ </SPAN></SPAN><LI class=""><SPAN> </SPAN><SPAN class=vars><FONT color=#dd0000>$tmp_grid_origin_x</FONT></SPAN><SPAN> += </SPAN><SPAN class=vars><FONT color=#dd0000>$grid_width</FONT></SPAN><SPAN>; </SPAN></SPAN><LI class=alt><SPAN> </SPAN><SPAN class=vars><FONT color=#dd0000>$draw</FONT></SPAN><SPAN>->annotation(</SPAN><SPAN class=vars><FONT color=#dd0000>$tmp_grid_origin_x</FONT></SPAN><SPAN>, </SPAN><SPAN class=vars><FONT color=#dd0000>$tmp_grid_origin_y</FONT></SPAN><SPAN>, </SPAN><SPAN class=vars><FONT color=#dd0000>$v_grid_data</FONT></SPAN><SPAN>); </SPAN></SPAN><LI class=""><SPAN> } </SPAN><LI class=alt><SPAN> </SPAN><SPAN class=vars><FONT color=#dd0000>$tmp_grid_origin_x</FONT></SPAN><SPAN> = </SPAN><SPAN class=vars><FONT color=#dd0000>$grid_origin_x</FONT></SPAN><SPAN>; </SPAN></SPAN><LI class=""><SPAN> </SPAN><SPAN class=vars><FONT color=#dd0000>$tmp_grid_origin_y</FONT></SPAN><SPAN> += </SPAN><SPAN class=vars><FONT color=#dd0000>$grid_height</FONT></SPAN><SPAN>; </SPAN></SPAN><LI class=alt><SPAN>} </SPAN><LI class=""><SPAN></SPAN><SPAN class=vars><FONT color=#dd0000>$image</FONT></SPAN><SPAN>->drawImage(</SPAN><SPAN class=vars><FONT color=#dd0000>$draw</FONT></SPAN><SPAN>); </SPAN></SPAN></LI></OL>
Copyright 2014-2025 https://www.php.cn/ All Rights Reserved | php.cn | 湘ICP备2023035733号