⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 graphs.c

📁 统计日志的工具
💻 C
📖 第 1 页 / 共 2 页
字号:
          ( j=(strlen(msg_h_files)*6) )+          ( strlen(msg_h_hits)*6 )+ 52;      gdImageStringUp(im,gdFontSmall,494,s,msg_h_pages,dkgrey);      gdImageStringUp(im,gdFontSmall,493,s-1,msg_h_pages,COLOR5);      gdImageStringUp(im,gdFontSmall,494,s-i-3,"/",dkgrey);      gdImageStringUp(im,gdFontSmall,493,s-i-4,"/",black);      gdImageStringUp(im,gdFontSmall,494,s-i-12,msg_h_files,dkgrey);      gdImageStringUp(im,gdFontSmall,493,s-i-13,msg_h_files,COLOR2);      gdImageStringUp(im,gdFontSmall,494,s-i-j-15,"/",dkgrey);      gdImageStringUp(im,gdFontSmall,493,s-i-j-16,"/",black);      gdImageStringUp(im,gdFontSmall,494,s-i-j-24,msg_h_hits,dkgrey);      gdImageStringUp(im,gdFontSmall,493,s-i-j-25,msg_h_hits,COLOR1);   }   /* data1 */   for (i=0; i<31; i++)   {      percent = ((float)data1[i] / (float)maxval);      if (percent <= 0.0) continue;      x1 = 25 + (i*15);      x2 = x1 + 7;      y1 = 176 - (percent * 147);      gdImageFilledRectangle(im, x1, y1, x2, 176, COLOR1);      gdImageRectangle(im, x1, y1, x2, 176, black);   }   /* data2 */   for (i=0; i<31; i++)   {      percent = ((float)data2[i] / (float)maxval);      if (percent <= 0.0) continue;      x1 = 27 + (i*15);      x2 = x1 + 7;      y1 = 176 - (percent * 147);      gdImageFilledRectangle(im, x1, y1, x2, 176, COLOR2);      gdImageRectangle(im, x1, y1, x2, 176, black);   }   /* data5 */   for (i=0; i<31; i++)   {      if (data5[i]==0) continue;      percent = ((float)data5[i] / (float)maxval);      if (percent <= 0.0) continue;      x1 = 29 + (i*15);      x2 = x1 + 7;      y1 = 176 - (percent * 147);      gdImageFilledRectangle(im, x1, y1, x2, 176, COLOR5);      gdImageRectangle(im, x1, y1, x2, 176, black);   }   /* sites / visits */   maxval=0;   for (i=0; i<31; i++)   {      if (data3[i]>maxval) maxval = data3[i];      if (data6[i]>maxval) maxval = data6[i];   }   if (maxval <= 0) maxval = 1;   sprintf(maxvaltxt, "%lu", maxval);   gdImageStringUp(im, gdFontSmall,8,180+(strlen(maxvaltxt)*6),                   maxvaltxt, black);      /* data 6 */   for (i=0; i<31; i++)   {      percent = ((float)data6[i] / (float)maxval);      if (percent <= 0.0) continue;      x1 = 25 + (i*15);      x2 = x1 + 8;      y1 = 276 - (percent * 92);      gdImageFilledRectangle(im, x1, y1, x2, 276, COLOR6);      gdImageRectangle(im, x1, y1, x2, 276, black);   }   /* data 3 */   for (i=0; i<31; i++)   {      percent = ((float)data3[i] / (float)maxval);      if (percent <= 0.0) continue;      x1 = 29 + (i*15);      x2 = x1 + 7;      y1 = 276 - (percent * 92);      gdImageFilledRectangle(im, x1, y1, x2, 276, COLOR3);      gdImageRectangle(im, x1, y1, x2, 276, black);   }   /* data4 */   fmaxval=0.0;   for (i=0; i<31; i++)      if (data4[i]>fmaxval) fmaxval = data4[i];   if (fmaxval <= 0.0) fmaxval = 1.0;   sprintf(maxvaltxt, "%.0f", fmaxval/1024);   gdImageStringUp(im, gdFontSmall,8,280+(strlen(maxvaltxt)*6),                   maxvaltxt, black);      for (i=0; i<31; i++)   {      percent = data4[i] / fmaxval;      if (percent <= 0.0) continue;      x1 = 26 + (i*15);      x2 = x1 + 10;      y1 = 375 - ( percent * 91 );      gdImageFilledRectangle(im, x1, y1, x2, 375, COLOR4);      gdImageRectangle(im, x1, y1, x2, 375, black);   }   /* open file for writing */   if ((out = fopen(fname, "wb")) != NULL)   {      gdImagePng(im, out);      fclose(out);   }   /* deallocate memory */   gdImageDestroy(im);   return (0);}/*****************************************************************//*                                                               *//* DAY_GRAPH3  - Day graph with three data sets                  *//*                                                               *//*****************************************************************/int day_graph3(  char *fname,                 char *title,               u_long data1[24],               u_long data2[24],               u_long data3[24]){   /* local variables */   int i,j,s,x1,y1,x2;   u_long maxval=0;   /* initalize the graph */   init_graph(title,512,256);   /* index lines? */   if (graph_lines)   {      y1=210/(graph_lines+1);      for (i=0;i<graph_lines;i++)       gdImageLine(im,21,((i+1)*y1)+25,489,((i+1)*y1)+25,dkgrey);   }   /* x-axis legend */   for (i=0;i<24;i++)   {      gdImageString(im,gdFontSmall,33+(i*19),238,numchar[i],black);      if (data1[i] > maxval) maxval = data1[i];           /* get max val    */      if (data2[i] > maxval) maxval = data2[i];      if (data3[i] > maxval) maxval = data3[i];   }   if (maxval <= 0) maxval = 1;   sprintf(maxvaltxt, "%lu", maxval);   gdImageStringUp(im, gdFontSmall, 8, 26+(strlen(maxvaltxt)*6),                   maxvaltxt, black);      if (graph_legend)                          /* print color coded legends? */   {      /* Pages/Files/Hits Legend */      s = ( i=(strlen(msg_h_pages)*6) )+          ( j=(strlen(msg_h_files)*6) )+          ( strlen(msg_h_hits)*6 )+ 52;      gdImageStringUp(im,gdFontSmall,494,s,msg_h_pages,dkgrey);      gdImageStringUp(im,gdFontSmall,493,s-1,msg_h_pages,COLOR5);      gdImageStringUp(im,gdFontSmall,494,s-i-3,"/",dkgrey);      gdImageStringUp(im,gdFontSmall,493,s-i-4,"/",black);      gdImageStringUp(im,gdFontSmall,494,s-i-12,msg_h_files,dkgrey);      gdImageStringUp(im,gdFontSmall,493,s-i-13,msg_h_files,COLOR2);      gdImageStringUp(im,gdFontSmall,494,s-i-j-15,"/",dkgrey);      gdImageStringUp(im,gdFontSmall,493,s-i-j-16,"/",black);      gdImageStringUp(im,gdFontSmall,494,s-i-j-24,msg_h_hits,dkgrey);      gdImageStringUp(im,gdFontSmall,493,s-i-j-25,msg_h_hits,COLOR1);   }   /* data1 */   for (i=0; i<24; i++)   {      percent = ((float)data1[i] / (float)maxval);  /* percent of 100% */      if (percent <= 0.0) continue;      x1 = 29 + (i*19);      x2 = x1 + 10;      y1 = 232 - (percent * 203);      gdImageFilledRectangle(im, x1, y1, x2, 232, COLOR1);      gdImageRectangle(im, x1, y1, x2, 232, black);   }   /* data2 */   for (i=0; i<24; i++)   {      percent = ((float)data2[i] / (float)maxval);  /* percent of 100% */      if (percent <= 0.0) continue;      x1 = 32 + (i*19);      x2 = x1 + 10;      y1 = 232 - (percent * 203);      gdImageFilledRectangle(im, x1, y1, x2, 232, COLOR2);      gdImageRectangle(im, x1, y1, x2, 232, black);   }   /* data3 */   for (i=0; i<24; i++)   {      percent = ((float)data3[i] / (float)maxval);  /* percent of 100% */      if (percent <= 0.0) continue;      x1 = 35 + (i*19);      x2 = x1 + 10;      y1 = 232 - (percent * 203);      gdImageFilledRectangle(im, x1, y1, x2, 232, COLOR5);      gdImageRectangle(im, x1, y1, x2, 232, black);   }   /* save as png	file */   if ( (out = fopen(fname, "wb")) != NULL)   {      gdImagePng(im, out);      fclose(out);   }   /* deallocate memory */   gdImageDestroy(im);   return (0);}/*****************************************************************//*                                                               *//* PIE_CHART  - draw a pie chart (10 data items max)             *//*                                                               *//*****************************************************************/int pie_chart(char *fname, char *title, u_long t_val,              u_long data1[], char *legend[]){   int i,x,percent,y=47;   double s_arc=0.0;   int purple, ltpurple, ltgreen, brown;   char buffer[128];   struct pie_data gdata;   /* init graph and colors */   init_graph(title,512,300);   purple  = gdImageColorAllocate(im, 128, 0, 128);   ltgreen = gdImageColorAllocate(im, 128, 255, 192);   ltpurple= gdImageColorAllocate(im, 255, 0, 255);   brown   = gdImageColorAllocate(im, 255, 196, 128);   /* do the circle... */   gdImageArc(im, CX, CY, XRAD, YRAD, 0, 360, black);   gdImageArc(im, CX, CY+10, XRAD-2, YRAD-2, 2, 178, black);   gdImageFillToBorder(im, CX, CY+(YRAD/2)+1, black, black);   /* slice the pie */   gdata=*calc_arc(0.0,0.0);   gdImageLine(im,CX,CY,gdata.x,gdata.y,black);  /* inital line           */   for (i=0;i<10;i++)                      /* run through data array      */   {      if ((data1[i]!=0)&&(s_arc<1.0))      /* make sure valid slice       */      {         percent=(((double)data1[i]/t_val)+0.005)*100.0;         if (percent<1) break;         if (s_arc+((double)percent/100.0)>=1.0)         {            gdata=*calc_arc(s_arc,1.0);            s_arc=1.0;         }         else         {            gdata=*calc_arc(s_arc,s_arc+((double)percent/100.0));            s_arc+=(double)percent/100.0;         }         gdImageLine(im, CX, CY, gdata.x, gdata.y, black);         gdImageFill(im, gdata.mx, gdata.my, i+4);         sprintf(buffer,"%s (%d%%)",legend[i], percent);         x=480-(strlen(buffer)*7);         gdImageString(im,gdFontMediumBold, x+1, y+1, buffer, black);         gdImageString(im,gdFontMediumBold, x, y, buffer, i+4);         y+=20;      }   }   if (s_arc < 1.0)                         /* anything left over?        */   {      gdata=*calc_arc(s_arc,1.0);      gdImageFill(im, gdata.mx, gdata.my, white);      sprintf(buffer,"%s (%d%%)",msg_h_other,100-(int)(s_arc*100));      x=480-(strlen(buffer)*7);      gdImageString(im,gdFontMediumBold, x+1, y+1, buffer, black);      gdImageString(im,gdFontMediumBold, x, y, buffer, white);   }   /* save png image */   if ((out = fopen(fname, "wb")) != NULL)   {      gdImagePng(im, out);      fclose(out);   }   /* deallocate memory */   gdImageDestroy(im);   return (0);}/*****************************************************************//*                                                               *//* CALC_ARC  - generate x,y coordinates for pie chart            *//*                                                               *//*****************************************************************/struct pie_data *calc_arc(float min, float max){   static struct pie_data data;   double d;   /* Calculate max line */   d=max;   data.x=cos(d*(2*PI))*((XRAD-2)/2)+CX;   data.y=sin(d*(2*PI))*((YRAD-2)/2)+CY;   /* Now get mid-point  */   d=((min+max)/2);   data.mx=cos(d*(2*PI))*(XRAD/3)+CX;   data.my=sin(d*(2*PI))*(YRAD/3)+CY;   return &data;}/*****************************************************************//*                                                               *//* INIT_GRAPH  - initalize graph and draw borders                *//*                                                               *//*****************************************************************/void init_graph(char *title, int xsize, int ysize){   int i;   im = gdImageCreate(xsize,ysize);   /* allocate color maps, background color first (grey) */   grey    = gdImageColorAllocate(im, 192, 192, 192);   dkgrey  = gdImageColorAllocate(im, 128, 128, 128);   black   = gdImageColorAllocate(im, 0, 0, 0);   white   = gdImageColorAllocate(im, 255, 255, 255);   green   = gdImageColorAllocate(im, 0, 128, 92);   orange  = gdImageColorAllocate(im, 255, 128, 0);   blue    = gdImageColorAllocate(im, 0, 0, 255);   red     = gdImageColorAllocate(im, 255, 0, 0);   cyan    = gdImageColorAllocate(im, 0, 192, 255);   yellow  = gdImageColorAllocate(im, 255, 255, 0);   /* make borders */   for (i=0; i<5 ;i++)          /* do shadow effect */   {      gdImageLine(im, i, i, xsize-i, i, white);      gdImageLine(im, i, i, i, ysize-i, white);      gdImageLine(im, i, ysize-i-1, xsize-i-1, ysize-i-1, dkgrey);      gdImageLine(im, xsize-i-1, i, xsize-i-1, ysize-i-1, dkgrey);   }   gdImageRectangle(im, 20, 25, xsize-21, ysize-21, black);   gdImageRectangle(im, 19, 24, xsize-22, ysize-22, white);   gdImageRectangle(im, 0, 0, xsize-1, ysize-1, black);   /* display the graph title */   gdImageString(im, gdFontMediumBold, 20, 8, title, blue);   return;}

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -