나는 여기서 GD 라이브러리에 대해 "이야기"하고 있다고 감히 말할 수 없습니다. 왜냐하면 나는 GD를 한두 번만 사용해봤고 아직 대부분의 기능을 접해 본 적이 없기 때문입니다. 그러나 Sanbuzhu Xiaodiao는 나에게 원고를 써 달라고 열정적으로 요청했기 때문에 나는 총알을 물리고 내 경험을 쓸 수밖에 없었습니다. 출발점이 될 수 있기를 바랍니다.
사실, 웹 페이지에서 "그래프" 효과를 얻기 위해 반드시 GD를 사용할 필요는 없습니다. 더 쉬운 해결책은 HTML로 해결할 수 있는 히스토그램입니다. 예:
<? $b = array(150,110,125,180,160,175,230,220);
<html>
<머리>
<meta http-equiv="Content-Type" content="text/html; charset=gb2312">
<제목></제목>
<스타일>
<!--
td{ 글꼴 크기:9pt }
-->
</style>
</head>
<본문>
<테이블 테두리=0>
<tr valign="bottom"> /* (1) */
<?for($i=0;$i<8;$i++) { ?><td align="center">
<table height="<?echo $b[$i];?>" border=0> /* (2) */
<tr>
<td bgcolor="#3F7F9F" width="40"></td> /* (3) */
</tr>
</table><br><font color="#3F7F9F"><?echo $b[$i];?></font> /* (4) */
</td>< } ?>
</tr>
</table>
</body>
</html>
<? $b = array(150,110,125,180,160,175,230,220) ?> 데이터의 출처는 전체 상황과 관련이 없습니다. Notes, 이제 하나씩 설명하겠습니다.
(1) 여기서 주목해야 할 점은 valign="bottom"인데, 이는 셀 내용의 하단을 정렬하는 것입니다. <tr>에 추가하는 이유
모직물? 모든 <td>에서 이를 지정하지 않고도 테이블에서 이 행의 내용이 이 정렬을 따르도록 만들 수 있습니다.
이런 방식으로 PHP 실행으로 인한 HTML 페이지의 원본 코드는 수십 바이트를 절약할 수 있습니다! 시청자의 소중한 시간을 절약하세요.
(2) 주의, 가장 중요한 것은 바로 여기에 있습니다! <table height="xxx">, 테이블의 높이 속성을 사용하여
다양한 높이의 "기둥"을 달성합니다. 모든 사람이 명확하게 볼 수 있도록 원본 데이터의 비율을 비례적으로 조정하지 않았습니다.
데이터가 특히 크거나 작을 경우 테이블의 높이 속성에 직접 할당하는 것은 적절하지 않으며 상황에 따라 할당해야 합니다.
데이터의 크기는 적절하게 조정되어야 합니다. 예를 들어, 데이터 세트의 각 숫자가 3000에서 8000 사이라고 추정합니다.
25배로 축소하는 것을 고려할 수 있습니다. 즉, height="<? echo Floor(b[$i]/25); ?>"
(3) 이 줄에서 원통의 색상(RGB)인 bgcolor="#xxxxxx"를 언급합니다. 실제로 실제 히스토그램은 다음과 같아야 합니다.
각 실린더는 코드를 최대한 단순하게 유지하기 위해 for 루프를 사용했기 때문에 제공할 방법이 없습니다.
각 원통에는 색상이 지정됩니다. ——사실, 이 예에서는 굳이 쓸 필요는 없습니다.
초보자들이 헷갈릴 수 있도록 색상을 추출하는 기능입니다. 따라서 그 부분을 완성하는 것은 당신에게 달려 있습니다.
(4) 여기서 실제 데이터는 막대와 동일한 색상으로 표시됩니다. 물론 이 숫자를 원통 상단에 표시하도록 선택할 수도 있습니다.
, 어쩌면 더 전문적일 수도 있습니다. 하지만 아직은 아래에 넣는 것이 익숙합니다.
HTML 테이블의 도움으로 다양한 히스토그램을 구성할 수 있습니다. 이 예에서는 bgcolor를 사용하여 색상 블록을 표시합니다.
또한 background="(picture)"를 사용할 수도 있습니다. 그림이 패턴화되어 있으므로 히스토그램의 열에도 패턴이 있습니다.
그리고 위의 참고 (3)에 표시된 <td>에서 실제 데이터를 매우 대비되는 색상으로 표시하면 효과도 매우 좋습니다.
위 방법은 GD를 피하는 효과적인 방법이지만, 복잡한 그래픽을 만들고 싶다면 반드시 GD를 사용해야 합니다.
아쉽게도 PHP4 중국어 매뉴얼에는 GD 함수 라이브러리에 44개의 함수가 있다고 되어 있는데 최신 버전의 영문 PHP4 매뉴얼을 보니,
이미 80개 이상의 GD 기능이 있습니다! 작가님 영어가 서툴러서 영어 매뉴얼을 읽어보면 추측만 할 수 있는데, 새로운 GD 라이브러리가 또 GIF를 지원하는지 모르겠네요. 어쨌든, 우리는 완전히 무료인 PHP를 사용하고 있는데 왜 저작권이 있는 GIF를 사용하여 "위험"을 감수해야 할까요? 무료로 가서 PNG를 사용해 보는 것은 어떨까요? 애니메이션이 필요하지 않은 한 PNG는 GIF만큼 작은 파일도 만들 수 있습니다!
다음으로, 프로그램을 결합하여 일반적으로 사용되는 GD 기능을 한 문장씩 설명하겠습니다.
처음부터 시작해 보겠습니다.
<?
Header("콘텐츠 유형: 이미지/png");
// 이것은 브라우저에 "들어보세요, 이것은 이미지입니다. 텍스트로 표시하지 마세요!"라고 알리기 위해 HTTP 헤더를 보냅니다.
// 개인적 선호로 인해 PNG를 사용했습니다. 물론 Header("Content-type: image/gif");를 사용해도 됩니다.
// 또는 Header("콘텐츠 유형: image/jpeg");
$im = 이미지 생성(50, 100);
// 이미지를 생성합니다. 이미지 형식은 생성 시 할당되지 않았습니다.
// ImageCreate 함수, 두 개의 매개변수, 의심의 여지 없이 이것은 생성된 이미지의 너비와 높이입니다.
// 반환 값은 int 값입니다. 이 값은 이 이미지를 계속 그리는 데 매우 중요합니다.
// 이 이미지를 출력하기 전까지는 이 값을 이미지의 ID라고 부르겠습니다.
// 사용빈도가 꽤 높기 때문에 더 짧은 이름으로 변수에 할당합니다.
// 이제 선을 그려보겠습니다. 선 그리기 기능은 다음과 같습니다.
// 이미지라인(int im, int x1, int y1, int x2, int y2, int col);
// 첫 번째 매개변수 im은 이미지의 ID이고 그 뒤에 x1, y1, x2, y2가 옵니다. 말할 필요도 없이,
// 시작점(x1,y1)과 끝점(x2,y2)의 좌표입니다! (이미지 왼쪽 상단의 좌표는 (0,0) 입니다)
//마지막 매개변수는 무엇인가요? 색상이에요! GD에서는 이미지에 대한 색상을 정의하고 정의된 색상을 사용하여 그림을 그려야 합니다.
// 이미지의 색상을 정의해야 하는 이유는 무엇입니까? 내 생각엔 GIF, PNG 및 기타 이미지의 "팔레트"로 사용되는 것 같습니다.
// 여기에는 이미지 자체에 대한 지식이 포함되므로 여기서는 자세히 설명하지 않겠습니다.
//따라서 선을 그리기 전에 먼저 색상을 정의해야 합니다(정말 번거롭습니다).
// $col_red = ImageColorAllocate($im, 255,192,192);
// 이 함수에는 4개의 매개변수가 있습니다. 첫 번째 $im... 그래도 매번 말해야 하나요? 다음부턴 말하지 않을게요!
//다음 세 매개변수는 정의할 색상의 빨간색(R), 녹색(G), 파란색(B) 구성 요소이며 범위는 0~255입니다.
// 이것은 다시 물리학-광학 지식을 포함합니다. 빨간색, 녹색, 파란색의 세 가지 기본 색상의 다양한 빛 구성 요소,
//계속해서 변화하는 색상을 생성합니다. 위에서 정의한 색상은 255 빨간색, 192 녹색, 192 파란색입니다.
// 제가 착각한 것이 아니라면 이것은 더 밝은 빨간색입니다. 잠시후 선을 그려보도록 하겠습니다.
// 왜 잠시만 기다리나요? 사진에 한 가지 색상만 있으면 아무것도 볼 수 없기 때문입니다!
// 먼저 배경을 검정색으로 만들어 보겠습니다!
// 매뉴얼에는 명시적으로 명시되어 있지 않지만, 먼저 정의한 색상이 기본적으로 배경으로 사용되는 것으로 확인했습니다.
$col_black = ImageColorAllocate($im, 0,0,0);
// 색상을 정의합니다. 빨간색 빛, 녹색 빛 또는 파란색 빛이 없습니다. 자연스럽게 검은색입니다.
// 그런 다음 선을 그리는 데 사용되는 색상을 정의합니다.
$col_red = ImageColorAllocate($im, 255,192,192);
// 이제 빨간색 선 그리기를 시작할 수 있습니다.
이미지라인($im, 10, 20, 45, 85, $col_red);
// 걱정하지 마세요. 이 문장을 마친 후에는 이미지를 볼 수 없습니다.
이미지PNG($im);
// 이 문장은 이미지를 출력합니다. ImagePNG()는 png 이미지를 출력하고, ImageJPEG는 jpeg 이미지를 출력합니다.
// ImageGIF 출력 gif 이미지...
// 여기에 매개변수가 있다는 것을 잊지 마세요. 파일로 저장하지 않고 화면에 표시하는 경우,
// 이 매개변수(저장된 파일 이름)를 생략합니다. 파일로 저장하고 싶다면,
// 다음과 같이 작성해야 합니다: ImagePNG($im,"test.png");
// 경로를 지정하지 않으면 이 파일은 웹의 현재 디렉터리에 저장됩니다.
// JPEG인 경우 매개변수가 하나 더 있는데 JPEG 품질(0~100)입니다.
// 화면에 표시하고 싶다면 ImageJPEG($im,"",80);
// 저장하고 싶다면 ImageJPEG($im,"test.jpg",80);
// 이 이미지를 파일로 저장하려면,
// 이미지를 의미하는 HTTP 헤더를 보내기 위해 Header("Content-type: image/png")를 사용할 수 없습니다.
// 이런 일이 발생하면 이미지를 출력한다는 의미이기 때문입니다.
ImageDestroy($im);
// 메모리 공간을 확보하기 위해 메모리의 이미지를 삭제합니다.
// 그게 다입니다. 가장 간단한 GD 그리기가 완료되었습니다.
// 테스트를 통해 PNG 형식으로 생성된 이미지 파일의 크기가 131바이트에 불과한 것으로 확인되었습니다.
// JPEG 형식을 사용하면 최악의 품질(0)을 사용해도 855바이트가 필요하고 화질이 너무 나빠서 볼 수 없습니다.
// 최고 JPEG 품질에는 2360바이트가 필요하지만 여전히 PNG를 사용할 때만큼 색상이 선명하지 않습니다.
// 이러한 종류의 색상 수가 적은 이미지의 경우 PNG를 사용하는 것이 JPEG보다 훨씬 비용 효율적이라는 것을 알 수 있습니다.
?>
이번에는 여기서 멈추고 가능한 한 빨리 글을 계속 쓰도록 노력하겠습니다.