개발 꿀팁/PHP

php 그래픽(주로 php의 GD 라이브러리를 사용함) copy 그대로 사용

Jammie 2022. 7. 30. 17:10
반응형

php 그림 (php를 사용한 GD 라이브러리)

1.먼저 네가 이미 GD2함을 설치했는지 검사해 보아라.라이브러리. ---------- php.ini 보기

안 보이면 php.ini 수정하고extension=php_gd2.dll 앞의 세미콜론을 제거하면 OK입니다

//100*30 그림 만들기
        $image = imagecreatetruecolor(200,100);
        
        //배경색 설정
        $bgcolor = imagecolorallocate($image,0,0,0);
        
        //글꼴 색상 설정
        $textcolor = imagecolorallocate($image,255,255,255);
        
        //그림의 왼쪽 상단에 문자열을 쓰다
        imagestring($image,20,15,10,"Hello world!",$textcolor);
        
        //출력 이미지
        header("Content-type: image/jpeg");
        imagejpeg($image);

2.간단한 실례
그림 직접 만들기:
일반적인 절차는 다음과 같습니다.

1: 배경 그림 만들기, 이후의 모든 그림이 배경에 기반하고 있습니다.
2: 배경 그림이나 입력본.
3:최종 도형을 출력합니다.
4:모든 자원을 클리어한다

//그림을 만드는 기본 단계
        $values = array(
                                40,50,
                                20,240,
                                60,60,
                                240,20,
                                50,40,
                                10,10,
                        );                                //점 좌표를 설정하고, 육각형을 그려서 하나의 배열로 여섯 점의 좌표를 저장한다.
        //그림 만들기     250으로 길어진 정사각형 하나인데      함수 사용ImageCreateTrueColor()
        $image = imagecreatetruecolor(250,250);       
        
        //색상 설정         나중에 쓰도록 하겠습니다
        $bgcolor = imagecolorallocate($image,200,200,200);
        $blue = imagecolorallocate($image,0,0,255);
        
        //다각형 하나를 그리다       사용함수ImageFilledPolygon()  다음 괄호 안에 있는 파라미터를 믿고 보면 바로 알 수 있습니다,우리가 육각형을 그려야 한다는 거 기억해
        imagefilledpolygon($image,$values,6,$blue);
        
        //출력 이미지
        header("Content-type:image/png");   //이 함수는 HTTP 헤더 보내기^_^ 반찬은 나도 알아
        imagepng($image);                   //그림% 1개의 캡션을 편집했습니다
        imagedestroy($image);               //자원을 방출하다

3. 하나의 그림을 배경으로 그림을 그리다

$image = imagecreatefromjpeg("abc.jpg");  //마찬가지로 그림을 그림으로 사용할 수 있습니다. 배경함수명은 상당히 이해하기 쉽습니다(영어만 좋다면 ^_^)
        $values = array(
                                40,50,
                                20,240,
                                60,60,
                                240,20,
                                50,40,
                                10,10,
                        );        
        $blue = imagecolorallocate($image,0,0,255);
        imagefilledpolygon($image,$values,6,$blue);
        header("Content-type: image/jpeg");
        imagejpeg($image);
        imagedestroy($image);

이미지를 출력할 때 imagepng()을 사용했다는 것을 기억하십시오. 우리는 단지 하나의 매개 변수만 추가하면 우리의 이미지를 현재 디렉터리에 저장할 수 있습니다. 구체적인 코드는 다음과 같습니다

//파일에 그림 저장
        
        $img = imagecreatetruecolor(200,200);
        
        $white = imagecolorallocate($img,255,255,255);
        $black = imagecolorallocate($img,0,0,0);
        
        imagearc($img,100,100,150,150,0,360,$white);
        
        imagepng($img,"testpng.png");     //우리의 현재 목록 아래에서 testpng.png 사진을 볼 수 있다
        
        imagedestroy($img);

4.RGB 그림의 예:

$size = 300;
        $image = imagecreatetruecolor($size,$size);
        
        //흰색 바탕에 검은색 테두리로 사각 테두리 그리기
        $back = imagecolorallocate($image,255,255,255);
        $border = imagecolorallocate($image,0,0,0);
        
        imagefilledrectangle($image,0,0,$size,$size,$back);                //흰색 배경 그리기
        
        imagerectangle($image,0,0,$size-1,$size-1,$border);     //검은 테두리를 그리다
        
        $yellow_x = 150;
        $yellow_y = 75;
        
        $red_x = 100;
        $red_y = 160;
        
        $blue_x = 200;
        $blue_y = 160;
        $radius = 150;
        
        $yellow = imagecolorallocatealpha($image,255,255,0,75);         //이 함수는 노란색 알파 값을 75로 하면 투명도가 됩니다
        $red    = imagecolorallocatealpha($image,255,0,0,75);
        $blue   = imagecolorallocatealpha($image,0,0,255,75);
        
        //세 개가 겹쳐진 원을 그리다
        imagefilledellipse($image,$yellow_x,$yellow_y,$radius,$radius,$yellow);    //이 함수는 바로 내가 $image에 원심을 그릴 것이다($yellow_x,$yellow_y)반지름 $radius/2색상 $yellow의 원
        imagefilledellipse($image,$red_x,$red_y,$radius,$radius,$red);
        imagefilledellipse($image,$blue_x,$blue_y,$radius,$radius,$blue);
        
        //올바른 header 출력
        header("Content-type: image/png");
        
        //결과를 출력하다
        imagepng($image);
        imagedestroy($image);

픽셀 값 가져오기

//픽셀 색상 가져오기
        
        $image = imagecreatefromjpeg("abc.jpg");
        
        $rgb   = imagecolorat($image,100,100);
        
        $r        =        ($rgb>>16) & 0xFF;         
        $g        =        ($rgb>>8)  & 0xFF;
        $b        =        ($rgb)     & 0xFF;
        
        echo "红:$r 绿:$g 파랗다:$b";

5. 3D 효과의 손잡이 그림:

$image = imagecreatetruecolor(100,100);
        
        //색상을 설정한 후 백업하면 변수 이름에서 어떤 색상인지 알 수 있습니다.
        $white = imagecolorallocate($image,0xFF,0xFF,0xFF);
        $gray  = imagecolorallocate($image,0xC0,0xC0,0xC0);
        $darkgray = imagecolorallocate($image,0x90,0x90,0x90);
        $navy = imagecolorallocate($image,0x00,0x00,0x80);
        $darknavy = imagecolorallocate($image,0x00,0x00,0x50);
        $red = imagecolorallocate($image,0xFF,0x00,0x00);
        $darkred = imagecolorallocate($image,0x90,0x00,0x00);
        
        //3D 효과 만들기
        for ($i = 60;$i > 50;$i--){
                imagefilledarc($image,50,$i,100,50,0,45,$darknavy,IMG_ARC_PIE);    //저는 $image에 동그라미 쳐야 돼요(50,$i)가로 100 세로 50,0 (3시 위치) - 45도, 색상은 darknavy의 타원, 마지막 파라미터는 알 수 없습니다
                imagefilledarc($image,50,$i,100,50,45,75,$darkgray,IMG_ARC_PIE);
                imagefilledarc($image,50,$i,100,50,75,360,$darkred,IMG_ARC_PIE);
        }    //여기서 for 루프는 병상도를 높게 구현한 것으로 백분율 구현은 다음과 같다
        imagefilledarc($image,50,50,100,50,0,45,$navy,IMG_ARC_PIE);
        imagefilledarc($image,50,50,100,50,45,75,$gray,IMG_ARC_PIE);
        imagefilledarc($image,50,50,100,50,75,360,$red,IMG_ARC_PIE);
        
        //출력 이미지
        header("Content-type: image/png");
        imagepng($image);
        
        imagedestroy($image);

6. 캔버스 투명 배경색 처리

<?PHP
/*
 *$sourePic:원본 경로
 * $smallFileName:작은 그림 이름
 * $width:작은 그림 너비
 * $heigh:소도가 높다
 * 전재명기 www.hzhuti.com */
function pngthumb($sourePic,$smallFileName,$width,$heigh){
 $image=imagecreatefrompng($sourePic);//PNG
    imagesavealpha($image,true);//여기서 중요한 것은 $sourePic 이미지의 투명한 색을 잃지 말라는 뜻입니다;
    $BigWidth=imagesx($image);//큰 그림 너비
   $BigHeigh=imagesy($image);//큰 그림 높이
   $thumb = imagecreatetruecolor($width,$heigh);
   imagealphablending($thumb,false);//여기서 중요한 것은 색을 병합하지 않고 투명색을 포함한 $img 이미지 색상으로 직접 교체한다는 것이다;
   imagesavealpha($thumb,true);//$thumb 이미지의 투명한 색을 잃지 않는 것이 중요합니다;
   if(imagecopyresampled($thumb,$image,0,0,0,0,$width,$heigh,$BigWidth,$BigHeigh)){
   imagepng($thumb,$smallFileName);}
   return $smallFileName;//작은 그림 경로로 돌아가기 }
 
pngthumb("a.png", "c.png", 300, 300);//호출하다
?>

 

반응형