>  기사  >  백엔드 개발  >  PHP 그래픽 이미지 조작

PHP 그래픽 이미지 조작

WBOY
WBOY원래의
2016-08-08 09:20:09824검색

GD 라이브러리 소개

GD는 Graphic Device를 의미하며, PHP의 GD 라이브러리는 GD 라이브러리에서 제공하는 일련의 API를 통해 그래픽을 처리하는 데 사용되는 확장 라이브러리입니다. , 이미지를 처리하거나 새 사진을 직접 생성할 수 있습니다.

PHP는 텍스트 처리 외에도 GD 라이브러리를 통해 JPG, PNG, GIF, SWF 및 기타 이미지를 처리할 수 있습니다. GD 라이브러리는 이미지 워터마킹, 인증 코드 생성 등에 일반적으로 사용됩니다.

PHP에는 기본적으로 GD 라이브러리가 통합되어 있으므로 설치 중에 활성화하기만 하면 됩니다.

<span>header("content-type: image/png"); $img=imagecreatetruecolor(100, 100); $red=imagecolorallocate($img, 0xFF, 0x00, 0x00); imagefill($img, 0, 0, $red); imagepng($img); imagedestroy($img);<span><span></span></span></span></preubuntu></divmicrosoft></p> <divmicrosoft yahei sans gb neue font-size:14px line-height:21px><p><span>선 그리기</span></p> <p><divmicrosoft yahei sans gb neue font-size:14px><p><span>선 그리기 작동하려면 먼저 새 캔버스를 만들어야 합니다. imagecreatetruecolor 기능을 통해 트루컬러 빈 그림을 만들 수 있습니다. </span></p> <preubuntu mono line-height:1.6em font-size:13px word-break:break-word><span>$img = imagecreatetruecolor(100, 100);</span><p><span> GD 라이브러리의 브러시에 사용되는 색상입니다. imagecolorallocate 함수를 통해 결정해야 하며, 매개변수를 통해 RGB 색상 값을 설정하여 브러시 색상을 결정합니다. </span></p><preubuntu mono line-height:1.6em font-size:13px word-break:break-word><span>$red = imagecolorallocate($img, 0xFF, 0x00, 0x00);</span><p><span> 그런 다음 선을 호출하여 선을 그립니다. 분할 함수 imageline, 시작점과 끝점을 지정하고 마지막으로 선을 가져옵니다. </span></p><preubuntu mono line-height:1.6em font-size:13px word-break:break-word><span>imageline($img, 0, 0, 100, 100, $red);</span><p><span>선을 그린 후 헤더와 imagepng를 통해 이미지가 출력됩니다. </span></p><preubuntu mono line-height:1.6em font-size:13px word-break:break-word><span>header("content-type: image/png"); imagepng($img);</span><p><span>마지막으로 imagedestroy를 호출하여 이미지가 차지한 메모리를 해제할 수 있습니다. </span></p><preubuntu mono line-height:1.6em font-size:13px word-break:break-word><span>imagedestroy($img);</span><p><span>위의 단계를 통해 PHP로 그래픽을 그리는 것이 매우 간단하다는 것을 알 수 있지만, 그림을 출력할 뿐만 아니라 많은 경우 imagepng 함수는 그려진 이미지를 파일 이름을 지정하여 파일로 저장합니다. </span></p><preubuntu mono line-height:1.6em font-size:13px word-break:break-word><span>imagepng($img, 'img.png');</span></preubuntu></preubuntu></preubuntu></preubuntu></preubuntu></preubuntu></divmicrosoft></p> <divmicrosoft yahei sans gb neue font-size:14px line-height:21px><p>이미지에 텍스트 그리기</p> <p><divmicrosoft yahei sans gb neue font-size:14px><p><span>GD 라이브러리는 다양한 그래픽에 대한 기본 작업을 수행할 수 있습니다. , 일반적으로 사용되는 선 그리기, 배경 채우기, 직사각형 그리기, 텍스트 그리기 등이 있습니다. </span></p> <p><span>선을 그리는 것과 마찬가지로 먼저 새 그림을 만들고 색상을 초기화해야 합니다. </span></p> <preubuntu mono line-height:1.6em font-size:13px word-break:break-word><span>$img = imagecreatetruecolor(100, 100); $red = imagecolorallocate($img, 0xFF, 0x00, 0x00);</span><p><span>그런 다음 imagestring 함수를 사용하여 텍스트를 그립니다. 이 함수에는 다음과 같은 많은 매개변수가 있습니다. imagestring(resource $image , int $font , int $x , int $y , string $ s, int $col), $font를 통해 글꼴 크기를 설정할 수 있습니다. x, y는 텍스트 표시 위치를 설정합니다. $s는 그릴 텍스트, $col은 텍스트의 색상입니다. </span></p><preubuntu mono line-height:1.6em font-size:13px word-break:break-word><span>imagestring($img, 5, 0, 0, "Hello world", $red); header("content-type: image/png"); imagepng($img); imagedestroy</span><span>($img); </span></preubuntu></preubuntu></divmicrosoft></p> <p><span>출력 이미지 파일</span></p> <p><divmicrosoft yahei sans gb neue font-size:14px><p><span>앞으로 우리는 imagepng를 통해 이미지를 브라우저에 직접 출력할 수 있다는 것을 배웠지만, 여러 번 사용할 수 있도록 처리된 이미지를 파일로 저장하고 싶을 때가 많습니다. path 매개변수를 지정하여 이미지를 파일에 저장합니다. </span></p> <preubuntu mono line-height:1.6em font-size:13px word-break:break-word><span>$filename = 'img.png'; imagepng($img, $filename);</span><p><span>이미지를 png 형식으로 저장하려면 imagepng를 사용하세요. 이미지를 jpeg로 저장하려면 imagejpeg를 사용하세요. format 및 imagegif를 사용하여 이미지를 gif 형식으로 저장합니다. imagejpeg는 이미지를 압축하므로 품질 매개변수도 설정할 수 있습니다. </span></p><preubuntu mono line-height:1.6em font-size:13px word-break:break-word><span>$filename = 'img.jpg'; ?imagejpeg($img, $filename, 80);</span></preubuntu></preubuntu></divmicrosoft></p> <p>이미지 인증코드 생성</p> <p><divmicrosoft yahei sans gb neue font-size:14px><p><span>간단한 인증코드는 실제로 사진에 몇개 출력됩니다. 이전 장에서 언급한 imagestring 함수를 통해 구현할 수 있습니다. </span></p> <p><span>그러나 처리 측면에서 인증코드를 보다 안전하게 만들고 다른 프로그램이 자동으로 인식하는 것을 방지하기 위해 인증코드에 대해 일부 간섭 처리를 수행해야 하는 경우가 종종 있습니다. 일반적으로 인증 코드를 방해하기 위해 약간의 노이즈가 그려지며, 출력 문자를 기울이거나 비틀는 등의 작업을 수행합니다. </span></p> <p><span>imagesetpixel을 사용하여 점을 그려 노이즈 간섭을 얻을 수 있지만 한 점만 그리는 것은 효과가 거의 없으므로 여기에서는 루프를 사용하여 무작위로 그리는 경우가 많습니다. </span></p> <preubuntu mono line-height:1.6em font-size:13px word-break:break-word><span>for($i=0;$i<50;$i++) { imagesetpixel($im, rand(0, 100) , rand(0, 100) , $black); imagesetpixel($im, rand(0, 100) , rand(0, 100) , $green); } </span><span></span></preubuntu></divmicrosoft></p> <br><p><br></p> <pre name="code"><?php $img = imagecreatetruecolor(100, 40); $black = imagecolorallocate($img, 0x00, 0x00, 0x00); $green = imagecolorallocate($img, 0x00, 0xFF, 0x00); $white = imagecolorallocate($img, 0xFF, 0xFF, 0xFF); imagefill($img,0,0,$white); //生成随机的验证码 $code = ''; for($i = 0; $i < 4; $i++) { $code .= rand(0, 9); } imagestring($img, 5, 10, 10, $code, $black); //加入噪点干扰 for($i=0;$i<50;$i++) { imagesetpixel($img, rand(0, 100) , rand(0, 100) , $black); imagesetpixel($img, rand(0, 100) , rand(0, 100) , $green); } //输出验证码 header("content-type: image/png"); imagepng($img); imagedestroy($img);

사진에 워터마크 추가

사진에 워터마크를 추가하는 방법은 일반적으로 두 가지가 있습니다. 하나는 사진에 문자열을 추가하는 것이고, 다른 하나는 사진에 로고나 다른 그림을 추가하는 것입니다.

기존 이미지를 다루기 때문에 기존 이미지에서 직접 캔버스를 생성할 수도 있고, imagecreatefromjpeg를 통해 이미지 파일에서 직접 이미지를 생성할 수도 있습니다.

<span>$im = imagecreatefromjpeg($filename);</span><p><span>创建图像对象以后,我们就可以通过前面的GD函数,绘制字符串到图像上。如果要加的水印是一个logo图片,那么就需要再建立一个图像对象,然后通过GD函数imagecopy将logo的图像复制到源图像中。</span></p><preubuntu mono line-height:1.6em font-size:13px word-break:break-word><span>$logo = imagecreatefrompng($filename); imagecopy($im, $logo, 15, 15, 0, 0, $width, $height);</span><p><span>当将logo图片复制到原图片上以后,将加水印后的图片输出保存就完成了加水印处理。</span></p><preubuntu mono line-height:1.6em font-size:13px word-break:break-word><span>imagejpeg(</span><span>$im, $filename); </span></preubuntu></preubuntu></preubuntu></divmicrosoft></p> <br><p></p> <pre name="code"><?php //这里仅仅是为了案例需要准备一些素材图片 $url = 'http://www.iyi8.com/uploadfile/2014/0521/20140521105216901.jpg'; $content = file_get_contents($url); $filename = 'tmp.jpg'; file_put_contents($filename, $content); $url = 'http://wiki.ubuntu.org.cn/images/3/3b/Qref_Edubuntu_Logo.png'; file_put_contents('logo.png', file_get_contents($url)); //开始添加水印操作 $im = imagecreatefromjpeg($filename); $logo = imagecreatefrompng('logo.png'); $size = getimagesize('logo.png'); imagecopy($im, $logo, 15, 15, 0, 0, $size[0], $size[1]); header("content-type: image/jpeg"); imagejpeg($im);

版权声明:本文为博主原创文章,未经博主允许不得转载。

以上就介绍了PHP图形图像操作,包括了方面的内容,希望对PHP教程有兴趣的朋友有所帮助。

성명:
본 글의 내용은 네티즌들의 자발적인 기여로 작성되었으며, 저작권은 원저작자에게 있습니다. 본 사이트는 이에 상응하는 법적 책임을 지지 않습니다. 표절이나 침해가 의심되는 콘텐츠를 발견한 경우 admin@php.cn으로 문의하세요.