PHP操作Imagick庫打印數(shù)字矩陣
PHP操作Imagick庫可以實(shí)現(xiàn)不少圖片效果,比如在一張圖片上,打印8*10的數(shù)字矩陣。以上效果的實(shí)現(xiàn)方法如下:
PHP操作Imagick庫代碼
- //格子的尺寸
- $grid_font_size = 18; //字體大小
- $grid_font_color = "#000"; //字體顏色
- $grid_width = 36; //格子的寬度
- $grid_height = 24; //格子的高度
- $grid_origin_x = 15; //左上角的數(shù)字的起始橫坐標(biāo)
- $grid_origin_y = 98; //左上角的數(shù)字的起始縱坐標(biāo)
- #原圖
- $image = new Imagick('background.jpg');
- #寫入密??〝?shù)據(jù)
- $tmp_grid_origin_x = $grid_origin_x;
- $tmp_grid_origin_y = $grid_origin_y;
- foreach ($pData as $k => $v){
- foreach ($v as $k_grid_data => $v_grid_data){
- $tmp_grid_origin_x += $grid_width;
- $draw = new ImagickDraw();
- $draw->setFillColor($grid_font_color);
- $draw->setFontSize($grid_font_size);
- $draw->annotation($tmp_grid_origin_x, $tmp_grid_origin_y, $v_grid_data);
- $image->drawImage($draw);
- }
- $tmp_grid_origin_x = $grid_origin_x;
- $tmp_grid_origin_y += $grid_height;
- }
- $image->writeImage($ks_ImageSrcPath. $pSN. '.jpg');
- #釋放資源
- $image->destroy();
- $draw->destroy();
這樣做的后果是,在每次循環(huán)的時(shí)候,都要實(shí)例化一個(gè)ImagickDraw,并執(zhí)行drawImage方法,非常占用CPU資源。
可以從以下兩點(diǎn)優(yōu)化:
1. 不必每次都執(zhí)行new操作,一個(gè)就夠了;
2. 不必每次都執(zhí)行drawImage方法,一次就夠了。也就是說,annotation方法好像具有“附加”的意味,不用擔(dān)心后來的覆蓋掉之前的;
PHP操作Imagick庫優(yōu)化后代碼如下:
- $draw = new ImagickDraw();
- $draw->setFillColor($grid_font_color);
- $draw->setFontSize($grid_font_size);
- foreach ($pData as $k => $v){
- foreach ($v as $k_grid_data => $v_grid_data){
- $tmp_grid_origin_x += $grid_width;
- $draw->annotation($tmp_grid_origin_x, $tmp_grid_origin_y, $v_grid_data);
- }
- $tmp_grid_origin_x = $grid_origin_x;
- $tmp_grid_origin_y += $grid_height;
- }
- $image->drawImage($draw);
【編輯推薦】