PHP 그래프 그리기. PHP로 그래픽 만들기. PHP 코드를 개선해보자




웹 시나리오에서 그래픽 도구의 사용을 식별하려면 다음과 같은 가능한 그래픽 사용 사례 범위를 고려하십시오.

  • 독립적으로 생성되거나 어딘가에서 빌려온 정적 이미지를 HTML 페이지에 삽입할 수 있습니다.
  • 프로그래밍 방식으로 생성된 이미지(HTML + CSS)를 사용할 수 있습니다.
  • gd 라이브러리를 사용하면 스크립트 실행 중에 발생할 수 있는 모든 상황에 대해 정적 그래픽을 미리 생성하고 파일에 저장하고 조건에 따라 표시할 수 있습니다.

단순성으로 인해 정적 이미지를 사용하는 그래픽을 도입하는 옵션은 고려하지 않으므로 먼저 간단한 옵션(HTML + CSS 그래픽)을 고려한 다음 PHP에서 gd 라이브러리 사용을 고려하겠습니다.

그래픽 HTML + CSS

웹사이트 방문자는 측면에 색상이 있는 가로 막대 그래프에 익숙하며, 특히 설문조사 결과를 설명하는 데 자주 사용됩니다. 언뜻 보면 이러한 다이어그램을 만드는 데 일종의 그래픽 도구가 사용되는 것처럼 보이지만 실제로는 몇 가지 간단한 스크립트만 사용하면 충분합니다.

PHP, HTML, CSS에서 그래픽 작업 /* 디자인을 구성하는 CSS 스타일 */ body div ( height: 1em; display: inline-block; Vertical-align: middle )span (display: inline-block; width: 120px ) .orange ( 배경: orange ) .apple ( 배경: #33CC66 ) .banana ( 배경: 노란색 ) .tomato ( 배경: 빨간색 ) .cucumber ( 배경: 녹색 ) .potato ( 배경: 회색 ) 주문 양식 과일 오렌지 사과 바나나 야채 토마토 오이 감자

이 예에서는 PHP의 새로운 기능을 보여주지는 않지만 HTML과 CSS를 사용하여 그래픽을 만드는 간단한 방법만 보여줍니다(이 경우 막대 차트).

gd 도서관

이전 섹션에서 설명한 그래픽 도구는 실제로 표준 HTML 코드의 기능을 모두 사용합니다(비록 우리가 상당히 강력한 HTML5 Canvas 그래픽 생성 도구를 다루지 않았다는 점은 주목할 가치가 있습니다). 이제 gd 라이브러리를 사용하여 정말 임의의 그래픽을 만드는 방법을 설명하는 방법을 살펴보겠습니다.

gd 라이브러리에 대한 일반적인 설명

일반적으로 gd 툴킷은 이미지를 생성하고 조작하기 위한 C 코드 라이브러리입니다. 이 라이브러리는 원래 Boutell.com의 재능 있고 관대한 직원이 개발하여 대중에게 제공되었습니다.

gd 라이브러리 자체는 그래픽이나 그리기 프로그램이 아니며 독립 실행형 응용 프로그램이나 그래픽 사용자 인터페이스를 구성하지도 않습니다. 대신, gd 라이브러리는 원하는 이미지 조작을 수행하기 위해 모든 프로그램에서 호출할 수 있는 함수를 제공합니다. 이는 gd 라이브러리가 이 라이브러리의 코드를 사용해야 하는 모든 C 프로그램에 연결될 수 있음을 의미합니다. 이것이 바로 PHP 시스템 개발자가 해결한 문제입니다.

실제로 이러한 목적을 위해 PHP 스크립트에서 gd 프로시저를 쉽게 호출할 수 있도록 인터페이스 함수 세트가 작성되었습니다. 그러나 gd 라이브러리 자체에는 PHP 전용 코드가 포함되어 있지 않으며 Perl, Pascal, Haskell 및 REXX를 포함한 여러 다른 프로그래밍 언어 및 프로그래밍 환경에서 라이브러리에 액세스할 수 있도록 인터페이스가 개발되었습니다.

gd 라이브러리를 사용하면 함수를 호출하여 소스 이미지(처음에는 비어 있고 빈 종이와 비슷함)를 생성하고 해당 소스 이미지 내에 다양한 방법으로 그림을 그리고 그릴 수 있으며 궁극적으로 이미지를 gd의 내부 이미지 형식에서 표준 이미지 형식으로 변환할 수 있습니다. 이미지 형식으로 저장한 후 최종 대상으로 보냅니다(브라우저 창에 출력하거나 파일 또는 데이터베이스에 저장). 그리고 이러한 모든 작업은 수동으로 수행되지 않고 프로그램의 제어에 따라 수행되기 때문에 생성된 이미지는 원하는 만큼 복잡해질 수 있으며 프로그램 실행 중 종속되게 만드는 것이 바람직한 모든 상황에 따라 달라질 수 있습니다.

이미지 형식

gd 라이브러리를 사용하면 기본적으로 다양한 형식을 사용하여 이미지를 가져오고 내보낼 수 있습니다. 가장 많이 사용되는 이미지 형식은 GIF, JPEG, PNG이지만 사용된 예제에서는 주로 후자를 사용합니다.

GIF 및 PNG 형식은 몇 가지 추가 사항을 포함하여 픽셀에 해당하는 색상 요소의 그리드를 설명하기 위한 것입니다. 첫 번째 추가 사항은 셀에 실제 색상 번호 또는 색상 번호 테이블에 대한 색인이 포함될 수 있다는 것입니다. (첫 번째 옵션을 사용하면 다양한 색상을 제공할 수 있으므로 보다 표현력이 풍부한 이미지를 만들 수 있으며, 마지막 옵션을 사용하면 보다 컴팩트한 이미지를 만들 수 있습니다.)

두 번째 추가사항은 다음과 같습니다. 물론 GIF 및 PNG 형식의 개념적 표현은 매우 간단하지만 실제로 이러한 형식의 이미지를 읽고 쓰고 전송하는 작업은 항상 압축된 형식으로 수행됩니다. 셀 그리드로 표현된 데이터를 저장하려면 많은 양의 메모리가 필요하기 때문에 압축이 필요합니다. 간단한 500x400픽셀 이미지에는 200,000픽셀이 포함되며, 각 픽셀에 3바이트가 필요한 경우 필요한 메모리 양은 이미 0.5MB를 넘습니다.

압축이라는 주제는 광범위하고 복잡하지만 대부분의 압축 알고리즘은 크기를 줄이기 위해 이미지 중복을 줄이는 데 기반을 두고 있습니다. (예를 들어, 각 픽셀에 대해 녹색 값을 개별적으로 지정하는 것보다 이미지의 모든 픽셀을 녹색으로 지정하는 것이 메모리 공간을 덜 차지합니다.) 불행하게도 압축 알고리즘은 이러한 속성을 사용하지 않습니다. GIF 형식의 이미지를 생성하는 데 사용되는 압축 알고리즘에 구현된 이러한 문제를 해결하는 방법은 특허까지 받았습니다.

라이브러리 설치

솔직히, gd 라이브러리를 설치하고 PHP 시스템과 함께 성공적으로 작동하게 만드는 작업은 상당히 복잡합니다. 이는 PHP 또는 gd 소프트웨어의 결함으로 인한 것이 아니라 전적으로 구성 문제로 인한 것입니다. 특히, gd 라이브러리가 있어야 하는 위치와 실제 위치를 이해하고 모든 실행 파일의 컴파일 및 연결 단계가 올바르게 완료되었는지 확인해야 합니다. 따라서 가능한 가장 좋은 상황은 사용자가 gd 라이브러리가 이미 설치되어 있고 gd 지원이 이미 PHP 시스템에서 활성화되어 있음을 발견하는 것입니다(웹 호스팅 회사의 제공 또는 설치된 PHP 시스템에 포함되어 있기 때문).

따라서 gd 라이브러리 설치는 이 라이브러리가 이미 설치되었는지 확인하여 0단계부터 시작해야 합니다. 먼저, 다음 코드를 스크립트 파일에 입력하고 스크립트가 웹 호스팅 회사에서 실행되는지 또는 자체 설치에서 완전히 실행되는지 여부에 관계없이 브라우저에서 실행 결과를 확인하십시오.

이 페이지를 화면에 표시한 후 브라우저 창에서 "gd"라는 텍스트 문자열을 검색하면 됩니다. 그러면 PHP 설치 시 gd 라이브러리 지원 범위를 설명하는 하위 섹션이 표시됩니다. 특정 유형의 이미지(예: PNG)만 준비하려는 경우 phpinfo() 함수 결과에 해당 이미지 유형에 대한 지원이 활성화된 것으로 나타나면 즉시 시작할 수 있습니다. 그리고 gd 버전 정보에 "bundled"라는 단어가 포함되어 있으면 PHP와 함께 제공되는 gd 라이브러리가 사용됩니다.

gd 라이브러리에 대한 언급을 찾으려는 시도가 실패로 끝나고 PHP를 직접 설치하는 경우 gd 라이브러리 구성을 설치하고 구성할 수 있습니다. (반면에 PHP 설치를 호스팅 회사에서 처리하는 경우 유일한 옵션은 해당 회사에 gd 라이브러리에 대한 지원을 제공하도록 요청하거나 다른 웹 호스팅 회사를 이용하는 것입니다.)

PHP와 함께 제공되는 gd 라이브러리를 사용하면 gd 설치와 관련된 많은 번거로움이 제거되지만 전부는 아닙니다. 사실 배포 키트에 포함된 버전 자체를 사용하면 gd 라이브러리를 얻을 수 있지만 반드시 gd가 작동하는 데 필요한 모든 라이브러리를 얻을 수 있는 것은 아닙니다. gd 라이브러리 자체는 libpng(PNG 이미지 조작용), zlib(압축용) 및 jpeg-6b 이상(필요한 경우 JPEG 이미지 조작용)과 같은 여러 다른 라이브러리에 의존합니다. 이러한 라이브러리는 이미 많은 Linux 설치에 존재하며, 이 경우 설치 디렉터리를 지정하지 않고 옵션에 필수 with 옵션(예: --with-zlib)을 포함하는 것으로 충분할 수 있습니다. PHP 구성을 직접 수행하는 경우 --with-gd 옵션을 추가하면 포함된 gd 버전이 실행 파일에 포함되도록 할 수 있습니다. 다른 버전을 가리키려면 --with-gd=path 옵션을 대신 사용하세요.

하나 이상의 필수 라이브러리가 누락된 경우 해당 라이브러리를 별도로 빌드해야 함을 의미합니다. 현재 버전을 찾을 수 있는 위치에 대한 정보는 www.libgd.org에 있는 문서를 검토하여 시작할 수 있습니다.

gd 라이브러리 작업의 기본 원칙

gd 툴킷을 사용하여 이미지를 생성하거나 조작할 때 이미지는 기존 이미지 유형과 일치하지 않는 특수 gd 형식으로 표시됩니다. 이론적으로 이러한 gd 형식으로 이미지를 내보내는 것이 가능하지만 결과 이미지가 압축되지 않고 브라우저나 간단한 그래픽 프로그램에서 표시할 수 없기 때문에 이러한 작업은 거의 사용되지 않습니다.

gd 툴킷을 사용하여 처리된 이미지는 모든 픽셀의 너비, 높이 및 색상에 대한 정보로 특징지어지며, 그 수는 너비와 높이의 곱과 같습니다. 일반적으로 프로그램은 새 빈 이미지(그리거나 그릴 이미지)를 생성하거나 파일에서 이미지를 가져옴으로써 gd 라이브러리와의 상호 작용을 시작합니다. 일반적으로 다음 단계가 수행됩니다. 첫째, 이미지의 색상 분포, 둘째, 다른 작업을 사용하여 이미지 그리기 및 페인팅 또는 조작, 셋째, 이미지를 일반적으로 허용되는 형식(예: PNG 또는 JPEG)으로 변환 목적지로 전송하세요.

색상 표현

gd 이미지에서 색상을 표현하는 방법에는 두 가지가 있습니다. 하나는 256개 색상으로 제한되는 팔레트 기반 표현이고 다른 하나는 임의의 수의 다양한 RBG 색상 번호를 지정할 수 있는 트루 컬러 표현입니다. gd 1.x에서는 팔레트 기반 색상을 사용하는 것이 유일한 옵션이었지만, gd 2.x와 PHP에 포함된 이 라이브러리 버전에서는 팔레트 기반 이미지와 사실적인 색상의 이미지를 모두 생성하는 것이 가능합니다. 명심해야 할 한 가지는 주어진 gd 이미지가 팔레트 기반이거나 실제 색상(RGB)을 가져야 한다는 것입니다. 이는 팔레트를 기반으로 이미지에 사실적인 색상을 적용할 수 있는 옵션이 없음을 의미합니다.

팔레트를 기반으로 원래의 빈 이미지를 얻으려면 ImageCreate() 함수를 호출해야 하고, 이미지를 실제 색상으로 얻으려면 ImageCreateTrueColor() 함수를 사용합니다.

팔레트 기반 이미지

색상은 0부터 255까지 세 개의 숫자를 사용하여 RGB(Red-Green-Blue) 형식으로 지정됩니다. 예를 들어 숫자(255, 0, 0)로 지정된 색상은 밝은 빨간색이고 색상( 0, 255, 0) - 녹색, 색상(0, 0, 255) - 파란색, 색상(0, 0, 0) - 검정색, 색상(255, 255, 255) - 흰색 및 색상(127, 127, 127) - 회색. 점점 더 많은 새로운 색상을 생성함으로써 세 가지 색상 구성 요소의 값을 임의로 선택할 수 있습니다.

이미지에 그리는 모든 작업은 특정 색상으로 이루어져야 하며, 색상을 사용하기 전에 이미지에 색상을 배포해야 합니다. 또한 이미지에 분포된 첫 번째 색상이 자동으로 배경색이 됩니다. 따라서 어떤 경우에도 색상을 지정하지 않고 할 수 있다고 가정해서는 안 되며 일반적으로 색상 배포 작업은 새로운 빈 이미지를 만든 후 첫 번째 작업입니다.

팔레트 기반 이미지의 색상은 imagecolorallocate() 함수를 사용하여 생성됩니다. 이 함수는 이미지(이전에 생성됨)와 빨간색, 녹색, 파란색의 비율을 지정하는 세 개의 정수를 매개 변수로 사용합니다. 반환 값은 이미지의 내부 팔레트에 있는 새 색상의 인덱스를 지정하는 정수입니다. 이 색상을 사용하여 향후 모든 작업을 수행하려면 지정된 인덱스 값이 필요하므로 이 반환 값을 변수에 할당해야 합니다.

팔레트 기반 이미지는 최대 256개의 색상을 가질 수 있습니다. (독자는 이러한 이미지가 실제로 무엇을 기반으로 하는지에 관심이 있을 수도 있고 관심이 없을 수도 있지만 팔레트 기반 이미지의 각 픽셀은 실제로 인덱스를 저장하는 단일 바이트입니다. 256색 팔레트의 한 요소 중 하나입니다.)

이미지의 색상 중 하나를 배포할 때 반환되는 인덱스는 해당 이미지에만 의미가 있습니다. 예를 들어, PHP 스크립트가 한 이미지에 분포된 색상에 $black을 할당하는 경우 해당 변수를 다른 이미지를 처리하기 위해 호출되는 그리기 명령에 대한 색상 입력으로 사용하는 것은 의미가 없습니다.

사실적인 색상의 이미지

gd 2.0 이상에서는 각 픽셀이 임의의 RGB 색상 번호를 저장하는 비팔레트 기반 이미지를 생성하는 기능도 제공합니다. 소위 트루 컬러 형식에서는 가능한 색상 수가 매우 많습니다. 이 기능은 예술적 표현의 범위를 무한히 확장할 뿐만 아니라 gd 툴킷을 사용하여 메모리에 로드된 실제 색상으로 PNG 및 JPEG 이미지를 충실하게 재현할 수 있습니다.

초기 이미지를 생성하는 데 다른 기능이 사용되고 다른 색상을 선택하는 데 제한이 없다는 점을 제외하면 트루컬러 이미지 작업 원리는 팔레트 기반 이미지 작업 원리와 유사합니다.

특히, ImageColorAllocate()를 호출하여 새로운 색상을 생성하고 나중에 그리기 명령에 사용할 반환 값을 변수에 할당할 수 있습니다. 유일한 차이점은 반환 값이 팔레트에 있는 요소의 인덱스가 아니라 RGB 색상 번호라는 것입니다. 또한 실제 색상을 가진 이미지에는 ImageColorAllocate() 함수의 부작용으로 생성된 배경색 개념이 없습니다. 초기화 결과 모든 픽셀에는 검정색(0, 0, 0)이라는 지정이 할당됩니다.

투명도

gd 2.x 버전은 투명성 개념을 지원합니다. 이는 빨간색, 녹색 및 파란색 값 외에 알파 채널을 사용하여 색상의 투명도를 나타냅니다. 예를 들어, 한 모양을 다른 모양에 겹쳐서 첫 번째 모양이 두 번째 모양과 완전히 겹치지 않고 부분적으로 보이도록 할 수 있습니다.

PHP에서 이미지 작업을 위한 많은 함수에는 이름에 "alpha"라는 단어가 포함된 아날로그가 있습니다. 이는 이러한 함수에서 색상이 네 가지 값(R, G, B, A)으로 표시됨을 나타냅니다. 예를 들어, imageColorAllocate() 함수는 세 개의 매개변수를 사용하며 ImageColorAllocateAlpha() 함수를 호출할 때 0에서 127 사이의 값으로 네 번째 매개변수를 지정해야 합니다. 값이 0이면 색상이 완전히 불투명함을 나타내고 값 127이면 색상이 완전히 불투명하다는 의미입니다.

좌표 및 그리기 명령

gd 툴킷을 사용하여 이미지를 생성한 후에는 그 안에 그리기 명령을 지정할 수 있는 좌표계가 암시적으로 생성됩니다. 이 시스템의 제한 좌표 값은 이미지 너비 및 높이의 지정된 매개변수에 의해 결정됩니다.

이 시스템의 좌표 원점은 좌표 (0, 0)에 해당하며 이미지의 왼쪽 상단에 있습니다. X 값의 양의 방향은 왼쪽에서 오른쪽이고, Y 값의 경우 위에서 아래입니다. (컴퓨터 그래픽 좌표계에서는 이런 원점 위치가 일반적이지만, 해석기하학을 연구한 사람들은 원점이 도형의 왼쪽 하단에 있는 것에 익숙할 것 같다.)

그리기 명령의 수가 매우 많습니다. 이러한 명령에는 선분, 직사각형 및 호를 그리는 명령과 특정 픽셀 값을 설정하는 명령이 포함되지만 이에 국한되지는 않습니다. 그러나 이러한 모든 그리기 및 플로팅 명령의 최종 결과는 픽셀 값을 설정하는 것임을 명심하십시오. 픽셀 값을 변경하는 명령을 실행한 후에는 (변경된 값 자체 외에) 메모리에 흔적이 남지 않으므로 그리기 및 플로팅 명령을 무시하거나 다른 명령의 결과를 별도로 표시할 방법이 없습니다.

지정된 이미지 이상으로 확장되는 그리기 명령을 방지할 수 있는 방법은 없지만 이러한 그리기에는 눈에 띄는 효과가 없습니다. 예를 들어 모든 좌표 값이 음수이면 이미지에 직사각형이 표시되지 않습니다.

형식 변환

모든 그리기 및 이미지 조작 작업은 내부 gd 형식으로 표현된 이미지에 대해 수행됩니다. 그리고 이러한 작업이 완료된 후 스크립트는 변환 및 출력 명령(imagepng, imagetjpeg 등) 중 하나를 호출하여 이 이미지를 필요한 그래픽 형식으로 변환하고 사용자의 브라우저 창(또는 파일)에 출력할 수 있습니다.

리소스 확보

완성된 gd 이미지 변환 결과가 사용자에게 전달되면 내부 버전 작업이 완료된 것으로 볼 수 있습니다. 이는 이 버전을 폐기해야 함을 의미합니다. 이를 수행하는 올바른 방법은 이미지를 매개변수로 사용하여 imagedestroy()를 호출하는 것입니다.

gd 라이브러리 함수

이 기사에서는 PHP 인터프리터의 gd 인터페이스에서 제공되는 모든 기능을 별도로 나열하거나 설명하지 않을 것입니다. 이 정보에 익숙해지려면 php.net 매뉴얼의 "이미지 처리 및 생성" 섹션을 사용하는 것이 좋습니다. 대부분의 gd 함수는 아래 표에 표시된 범주 중 하나에 속합니다. 이 표에 나열된 함수 이름은 각 단어의 첫 글자를 더 쉽게 읽을 수 있도록 대문자로 표시되어 있지만 PHP 함수 이름은 대소문자를 구분하지 않기 때문에 코드 예제에서는 이 조건이 항상 관찰되는 것은 아닙니다.

gd 함수의 분류 종류 예 비고
이미지 생성 기능 ImageCreate(), ImageCreateTruecolor(), ImageCreateFromGd(), ImageCreateFromJpeg() 새로운 gd 이미지를 반환합니다. ImageCreate() 함수는 이미지의 너비와 높이를 매개변수로 취하고, 다른 함수의 매개변수는 파일 경로, URL 또는 로드되어 gd 형식으로 변환되어야 하는 이전에 생성된 이미지가 포함된 문자열입니다.
색상 분포 작업을 수행하는 기능 ImageColorAllocate(), ImageColorAllocateAlpha(), ImageColorDeallocate() ImageColorAllocate() 함수는 이미지 핸들과 필요한 빨강, 녹색, 파랑 값을 매개변수로 취한 다음 나중에 그리기 및 플로팅 작업에 사용할 수 있도록 색상 번호를 반환합니다. ImageColorAllocateAlpha 함수는 추가 매개변수인 투명도 계수(0-127)를 허용합니다.
컬러 매칭 작업을 수행하는 기능 ImageColorClosest(), ImageColorClosestAlpha(), ImageColorExact(), ImageColorExactAlpha() 팔레트 이미지에서 일치하는 색상의 인덱스를 반환합니다. 이름에 "가장 가까운"이라는 단어가 포함된 함수는 가장 가깝게 일치하는 색상을 반환합니다(일치 정확도는 RGB 값 공간의 점 사이의 거리로 측정됩니다). "Exact"라는 명칭이 있는 함수는 검색된 것과 동일한 경우에만 색상 번호를 반환하고, 그렇지 않으면 -1 값을 반환합니다. "Alpha"라는 이름의 함수는 색상에 대해 작동하며, 이는 4개의 값을 사용하여 결정됩니다( 투명한 색상)
선 그리기 기능 ImageLine(), ImageDashedLine(), ImageRectangle(), ImagePolygon(), ImageEllipse(), ImageArc() 지정된 모양의 직선 세그먼트나 곡선을 그리는 데 사용됩니다. 일반적으로 이러한 각 함수의 첫 번째 매개변수는 이미지이고, 마지막 매개변수는 색상이며, 중간 매개변수는 X 및 Y 좌표입니다.
선화 펜 설정 이미지세트스타일(), 이미지세트두께() 후속 선 그리기 명령으로 생성된 선의 특성에 영향을 미치는 설정을 변경합니다(이 기능 중 일부는 gd 2.0.1 이상 버전에만 적용 가능).
그리기 및 채우기 기능 ImageFilledRectangle(), ImageFilledEllipse(), ImageFilledPolygon(), ImageFilledArc(), ImageFill() 일반적으로 선 그리기에 해당하는 기능과 유사하지만 영역의 윤곽을 그리는 것뿐만 아니라 생성된 영역을 색상으로 채우는 기능도 제공합니다. 특수 함수 ImageFill()은 지정된 채우기 색상을 사용하여 채우기 작업을 수행합니다. 채우기는 지정된 XY 좌표에서 시작하여 모든 방향으로 수행됩니다(이러한 기능 중 일부에는 gd 2.0.1 이상이 필요함).
텍스트 작업을 위한 기능 이미지스트링(), 이미지로드폰트() ImageString 함수는 이미지 핸들, 글꼴 번호, X 및 Y 좌표, 텍스트 문자열 및 색상을 매개변수로 사용합니다. 글꼴 번호가 1에서 5 사이이면 5개의 내장 글꼴 중 하나가 이 색상으로 선을 표시하는 데 사용됩니다. 반면, 5보다 큰 글꼴 번호는 ImageLoadFont() 함수를 사용하여 특수 글꼴을 로드한 결과를 나타냅니다.
내보내기 기능 ImagePng(), ImageJpeg() 내부 gd 이미지를 적절한 형식의 이미지로 변환한 다음 이 이미지를 출력 스트림으로 보냅니다. 하나의 매개변수(이미지 핸들)만 지정하면 이미지가 사용자에게 에코되고 파일 경로인 추가 매개변수가 사용되면 출력 스트림의 대상은 파일이 됩니다.
이미지 파괴 기능 이미지파괴() 이미지 핸들을 매개변수로 사용하고 이미지와 관련된 모든 리소스를 해제합니다.
HTTP 이미지 지원

이미지가 사용자의 브라우저에 제대로 표시되려면 이미지의 출처와 형식을 지정해야 합니다. 따라서, 생성된 HTML 파일에 imageToPng() 함수 호출 등을 단순히 구현하여 이미지 표시 문제를 해결하는 것은 안타깝게도 불가능합니다. 기본적으로 이미지 출력 코드를 PHP 스크립트에서 생성된 HTML 코드와 인터리브해야 하며 이를 위해 아래 설명된 세 가지 옵션 중 하나를 사용할 수 있습니다.

전체 페이지 이미지 만들기

생성된 페이지 전체를 이미지로 포맷할 수 있습니다. 이 경우 이미지 데이터 앞에 HTTP 헤더를 전달하여 그 뒤에 오는 내용이 특정 유형의 이미지임을 선언해야 합니다. 예를 들어 스크립트 끝에 다음 줄이 제공될 수 있습니다.

// ... 이미지를 생성하고 // 변수에 할당하는 코드 $image header("Content-type: image/png"); // 브라우저에 제목을 표시합니다. imagepng($image); // PNG 형식으로 변환된 이미지 자체의 데이터를 전달합니다. imagedestroy($image); // 리소스 해제

이 접근 방식의 장점은 POST 매개변수를 포함한 모든 정보를 사용하여 향후 이미지 구성에 대한 지침을 전달할 수 있다는 것입니다. 단점은 결과 페이지에 일반 HTML 코드가 포함될 수 없다는 것입니다. 실제로 스크립트의 제목과 이미지 앞에 텍스트 출력을 보내지 않도록 주의해야 합니다. 이는 콘텐츠를 너무 일찍 보내는 것과 같기 때문입니다. 이 경우 "헤더가 이미 전송되었습니다..."라는 오류 메시지가 나타납니다.

파일에 저장된 이미지 삽입

우선 HTML이 설명자를 지원한다는 점에 유의하세요. , 다음 예와 같이 이미지 파일 경로 또는 URL을 지정하여 이미지를 삽입할 수 있습니다.

이 디자인은 정적 이미지 파일에 적용되지만 새로 생성된 이미지를 포함할 수 없는 이유는 없습니다. 따라서 먼저 이미지를 생성한 다음 이미지 데이터를 로컬 파일에 기록한 다음 해당 설명자가 포함된 HTML 코드를 생성하는 스크립트를 준비할 수 있습니다. , 새로 생성된 파일을 가리킵니다.

이 접근 방식의 유일한 단점은 첫째, 페이지 생성 프로세스에 파일 쓰기가 포함되어야 하며, 이는 시간이 많이 걸릴 수 있으며, 둘째, 파일 사용을 마친 후 파일을 어떻게 처리할지 결정해야 한다는 것입니다.

그러나 특정 상황에서는 이 접근 방식이 이상적입니다. 유한한 선택 항목을 나타내는 이미지를 만들고 캐싱하는 것입니다. 이 경우 특정 상황을 이미지 파일 이름과 연관시키는 구체적인 방법이 있습니다. 이미지를 출력해야 하는 상황이 발생하면 해당 파일이 이미 존재하는지 확인합니다. 대답이 긍정적이면 이 파일에 대한 링크가 설명자 형식으로 적용됩니다. , 대답이 '아니요'이면 이미지가 생성되어 파일에 기록된 다음 이 이미지에 대한 링크가 다시 적용됩니다. 궁극적으로 새 파일을 만들 필요는 없습니다.

스크립트에서 생성된 이미지 삽입

마지막으로, 독립 실행형 이미지 스크립트를 제공한 다음 설명자에 지정하여 다른 스크립트에 의해 생성된 동적 페이지에 결과 이미지를 포함할 수 없는 이유가 없습니다. 이 스크립트의 URL입니다. 유일한 어려움은 필요한 데이터를 종속 페이지로 전송하는 방법을 선택하는 것입니다. 예를 들어, 포함된 이미지를 나타내는 핸들은 다음과 같습니다.

이 경우 ballpage.php 스크립트는 그림의 다양한 위치에 있는 색깔 공의 PNG 이미지를 반환합니다.

그러나 이 접근 방식을 사용하면 웹 서버와 브라우저가 때때로 처리 중인 파일의 접미사를 확인하고 확인 결과를 받을 때 다르게 반응하기 때문에 문제가 발생할 수 있습니다. 예를 들어, Apache 서버가 서버 코드가 PHP 코드로 해석되어야 하는지 결정할 수 있도록 ballpage 렌더링 스크립트에 .php 확장자를 지정해야 할 수 있습니다(필수 처리 모드는 구성 파일을 통해 지정할 수도 있음).

그러나 전달된 헤더가 이미지가 따라온다는 것을 나타내더라도 .php 확장자를 가진 파일이 이미지를 생성할 가능성을 고려하지 않는 비표준 버전의 브라우저도 있습니다. 따라서 이 방법을 사용할 때는 다양한 브라우저에서 스크립트를 테스트하고 의도한 사용자 집단이 의도한 형식으로 페이지를 받게 되는지 확인해야 합니다.

다음은 gd 라이브러리를 사용하여 이미지를 만드는 예입니다.

gd 라이브러리 사용 예: 간단한 모양 만들기

다음 예에서는 gd 라이브러리를 사용하여 간단한 기하학적 모양이 포함된 그림을 생성하는 방법을 보여줍니다.

우리는 무엇을 바꾸었나요?
  • 이제 여러 유형의 차트가 있으므로 차트 유형은 $_GET을 통해 우리에게 전달됩니다. $Month, $Hour 및 $Year와 동일합니다.
  • 다음으로, 월 이름을 포함할 $MonthNames 배열을 만듭니다. 배열은 0부터 시작하므로 첫 번째 요소는 null입니다.
  • 이제 유형에 따라 $Query, $ResultArray, $ChartHeading 및 $XAsixName 변수가 스위치에 할당됩니다. $Type을 설정하지 않으면 기본적으로 월이 표시됩니다.
  • 다음으로 데이터베이스에 연결하고, 요청을 실행하고, 결과를 배열에 복사하고 xml 파일의 첫 번째 부분을 생성합니다.
  • 다음으로 XML 파일의 본문을 생성합니다. 본문은 차트 유형에 따라 다르므로 스위치를 다시 사용합니다.
  • 개월: 링크를 제외하고 모든 것이 동일합니다. 이제 다음과 같습니다: newchart-xmlurl-get-data.php; newchart - 데이터를 찾을 주소에서 새 차트인 xmlurl을 생성 중임을 나타냅니다. 다음에 나오는 모든 내용은 URL의 일부입니다. 다음은 1월에 대한 전체 링크입니다: newchart-xmlurl-get-data.php?type=hourly&Year=2010&Month=1
  • 일: 월의 경우에도 마찬가지이지만 이제 URL에는 일과 관련된 정보가 포함됩니다.
  • 시계: 다른 사람이 이 차트를 따르는 것을 원하지 않으면 URL을 설정하지 않아도 됩니다.
  • 맨 마지막에 XML을 닫습니다.

이 파일을 get-data.php로 저장합니다. 이제 브라우저를 열고 스크립트를 테스트해 보세요. 예: http://localhost/fcdemo/get-data.php?year=2010

다음과 같은 내용이 표시됩니다.

시험

이제 다이어그램 작성이 완전히 끝났습니다. 작동을 확인하려면 http://localhost/fcdemo/demo.html로 이동하세요.

모든 작업을 올바르게 수행했다면 페이지에 Column3D 다이어그램이 표시됩니다. 열 중 하나를 클릭하면 새 차트가 열립니다. 등등…

결론

이 단원을 주의 깊게 공부했다면 아마도 이미 PHP/MySQL의 연결 다이어그램에 대한 일반적인 이해를 갖고 있을 것입니다. 다음 통계에 대해 정확히 동일한 다이어그램을 만들 수 있습니다.

  • 일정 기간 동안의 판매량
  • 귀하의 웹 사이트가 몇 번이나 작동을 멈췄습니까?
  • 개별 페이지 방문자 수

다이어그램의 구조는 모든 주제에 대해 동일합니다. 일부 매개변수를 사용하여 데이터베이스에서 정보를 검색한 다음 응답을 XML로 변환하면 다이어그램이 준비됩니다!

더 많은 영감을 얻으려면 이 데모 페이지를 방문하세요. 관심을 가져주셔서 감사합니다!