본문 바로가기
php

php gd 라이브러리 image circle crop

by 빡스웹 2022. 3. 26.
반응형

정확한 응용방법은 모르지만 고객의 요청에 의해 찾아서 적용시켜 보았습니다.
해결되지 않은 부분은 이미지를 왼쪽,위를 기준으로 자르는데 가운데 기준으로 자르는 방법은 모릅니다.
이미지는 정사각형이여야 합니다.
또 등록한 이미지의 사이즈대로만 crop이 가능합니다 (200x200의 이미지면 그 사이즈대로 잘립니다.)

적용은 잘 되는걸로 확인되는데 개선사항이 있다면 댓글 또는 조언 부탁합니다.

if (!is_dir($target_path)) {
//이미지를 저장 할 폴더 생성
   //$target_path는 폴더의 경로를 적어주면 된다.
   //예: $target_path = "../folderName";
   @mkdir($target_path, G5_DIR_PERMISSION);
   @chmod($target_path, G5_DIR_PERMISSION);
}

$w = 200; // original size
$h=200; // original size
$img_path="image.jpg"; //실제 이미지
$save_path="cropCircel.png" //변경된 이미지 저장될 이름과 경로도 설정 가능 , 저장될 경로 설정을 원한다면 경로/cropCircel.png 이런식으로 작성하면 된다.

//이 아래로는 건드리지 않았다.
$src = imagecreatefromstring(file_get_contents($img_path));
$newpic = imagecreatetruecolor($w,$h);
imagealphablending($newpic,false);
$transparent = imagecolorallocatealpha($newpic, 0, 0, 0, 127);
$r=$w/2;
for($x=0;$x<$w;$x++)
   for($y=0;$y<$h;$y++){
     $c = imagecolorat($src,$x,$y);
     $_x = $x - $w/2;
     $_y = $y - $h/2;
     if((($_x*$_x) + ($_y*$_y)) < ($r*$r)){
       imagesetpixel($newpic,$x,$y,$c);
     }else{
       imagesetpixel($newpic,$x,$y,$transparent);
     }
   }
  imagesavealpha($newpic, true);
  imagepng($newpic, $save_path);
  imagedestroy($newpic);
  imagedestroy($src);

반응형

'php' 카테고리의 다른 글

php 엑셀 .xlsx 다운로드  (0) 2022.05.14
배열에서 특정 요소 삭제하기 unset()  (0) 2022.05.14
ajax 기본 / ajax Json  (0) 2022.03.26

댓글