>백엔드 개발 >PHP 튜토리얼 >PHP에서 이미지를 고정된 크기로 자르는 방법

PHP에서 이미지를 고정된 크기로 자르는 방법

WBOY
WBOY원래의
2016-07-25 09:13:09984검색

홈페이지 호출 이미지를 만들려면 홈페이지의 이미지 위치를 대개 디자이너가 지정하기 때문에 고정된 크기의 이미지를 얻어야 하는 경우가 있습니다. 고객이 업로드할 이미지의 비율이 어느 정도인지에 따라 이미지의 비율을 결정할 수 없는 경우가 있습니다. 프런트 엔드 페이지 작성자는 일반적으로 이미지가 넘치지 않도록 img 요소의 높이와 너비를 고정하는 방법을 사용합니다. 그러나 이미지의 비율이 요구되는 비율이 아닌 경우 호출 후 이미지가 변형될 수 있으며 이는 페이지의 아름다움에 큰 영향을 미칩니다. 크기가 조정된 이미지에는 필연적으로 공백이 생기고, 그 공백을 색상으로 채웁니다. 이렇게 하면 이미지가 변형되지는 않지만, 예를 들어 사용자가 다음과 같은 이미지를 보내는 경우 문제가 많이 발생합니다. 키는 매우 크지만 너비는 평균이며, 1:1 이미지로 압축하면 기본적으로 압축 후 이미지가 표시되지 않습니다.

해결책은 이미지를 고정된 크기로 자르는 것입니다. 그러면 이미지가 변형되지 않고, 공백이 늘어나서 채워집니다. bcastr을 사용해 본 친구들은 알아야 합니다. bcastr은 호출 시 이미지가 변형되지 않도록 보장합니다. 고정 크기 출력 이미지 프레임의 경우 소스 이미지에는 다음과 같은 상황이 있습니다. 1: 출력할 이미지의 높이와 너비가 원본 이미지의 높이와 너비보다 작으며 $new_width$src_width && $new_height>$src_width 판단으로 작성됩니다. 3: 1번과 2번 두 가지 유형, 즉 확대하면서 축소하는 상황과 동등하다고 판단하는 상황을 제외한다. 1번과 2번의 경우 함수 처리 코드가 완전히 동일하므로 하나의 처리문으로 요약할 수 있습니다

php 구현 코드

  1. /*
  2. * 설명: 이미지 변형 없이 이미지를 임의의 크기로 자르는 기능입니다
  3. * 매개변수 설명: 처리할 이미지의 파일명 입력, 새 이미지의 저장 파일명 생성, 새 이미지의 너비 생성, 새 이미지의 높이 생성
  4. * writing by smallchicken
  5. * 시간 2008-12-18
  6. */
  7. // 원하는 크기의 이미지 가져오기, 누락된 부분 늘리기, 변형 없음, 공백 없음
  8. function my_image_resize($src_file, $dst_file, $ new_width, $new_height) {
  9. if($ new_width <1 || $new_height <1) {
  10. echo "매개변수 너비 또는 높이 오류 !"
  11. exit()
  12. }
  13. if(!file_exists($src_file)) {
  14. echo $src_file . "이 존재하지 않습니다!"
  15. exit()
  16. }// 이미지 유형
  17. $type= EXIF_imagetype($src_file);
  18. $support_type= array(IMAGETYPE_JPEG , IMAGETYPE_PNG , IMAGETYPE_GIF);
  19. if(!in_array($type, $support_type,true)) {
  20. echo "이 유형의 이미지는 jpg, gif 또는 png만 지원합니다.";
  21. exit();
  22. }
  23. //이미지 로드
  24. switch($type) {
  25. case IMAGETYPE_JPEG :
  26. $src_img= imagecreatefromjpeg($src_file);
  27. break;
  28. case IMAGETYPE_PNG:
  29. $src_img=imagecreatefrompng($src_file);
  30. break;
  31. case IMAGETYPE_GIF:
  32. $src_img=imagecreatefromgif );
  33. 기본값:
  34. echo "이미지 로드 오류!"
  35. exit()
  36. $w=imagesx($src_img); h=imagesy($src_img);
  37. $ ratio_w=1.0 * $new_width / $w;
  38. $ratio_h=1.0 * $new_height / $h;
  39. $ratio=1.0; 생성된 이미지의 높이와 너비가 원본보다 작거나 모두 큰 경우 큰 비율로 확대, 큰 비율로 축소하는 것이 원칙입니다(축소 비율은 작아집니다)
  40. ( ($ratio_w < 1 && $ratio_h < 1) || ($ratio_w > 1 && $ratio_h > 1)) {
  41. if($ratio_w < $ratio_h) {
  42. $ratio = $ ratio_h ; // 사례 1, 높이 비율 기준에 따라 너비 비율이 높이 비율보다 작습니다. 자르기 또는 확대
  43. }else {
  44. $ratio = $ratio_w }
  45. / / 가로세로 비율이 목표 요구 사항을 정확히 충족하는 중간 임시 이미지를 정의합니다
  46. $inter_w= (int)($new_width / $ratio)
  47. $inter_h=(int) ($new_height / $ratio); >$inter_img=imagecreatetruecolor($inter_w , $inter_h);
  48. imagecopy($inter_img , $src_img, 0,0,0,0,$inter_w,$inter_h)
  49. // 대상 이미지의 크기 및 비율로 최대 측면 길이 $ratio
  50. // 새 이미지 정의
  51. $new_img=imagecreatetruecolor($new_width,$new_height)
  52. imagecopyresampled($new_img,$inter_img, 0,0,0,0,$new_width,$new_height,$inter_w,$inter_h);
  53. switch($type) {
  54. case IMAGETYPE_JPEG :
  55. imagejpeg($new_img, $dst_file,100); // 이미지 저장
  56. break;
  57. case IMAGETYPE_PNG :
  58. imagepng($new_img ,$dst_file,100)
  59. break;
  60. case IMAGETYPE_GIF :
  61. imagegif($new_img,$dst_file ,100);
  62. break;
  63. default:
  64. break;
  65. }
  66. } // 1인 경우 종료
  67. // 2 대상 이미지의 한쪽이 원본 이미지보다 큽니다. , 한쪽이 원본 이미지보다 작습니다. 먼저 일반 이미지를 확대한 다음 잘라냅니다.
  68. // =if( ($ratio_w < 1 && $ratio_h > 1) || ($ratio_w >1 && $ratio_h <1) )
  69. else{
  70. $ratio=$ratio_h>$ratio_w? $ratio_h : $ratio_w; / /더 큰 비율로 값을 가져옵니다
  71. // 큰 중간 이미지를 정의합니다. 높이 또는 너비가 대상 이미지와 동일하고 원본 이미지를 확대합니다
  72. $inter_w=(int)($w * $ratio )
  73. $inter_h=(int) ($h * $ratio) ;
  74. $inter_img=imagecreatetruecolor($inter_w , $inter_h);
  75. //크기 조정 후 원본 이미지 자르기
  76. imagecopyresampled ($inter_img,$src_img,0,0,0,0,$inter_w, $inter_h,$w,$h);
  77. // 새 이미지 정의
  78. $new_img=imagecreatetruecolor($new_width,$ new_height)
  79. imagecopy($new_img, $inter_img, 0,0,0 ,0,$new_width,$new_height);
  80. switch($type) {
  81. case IMAGETYPE_JPEG :
  82. imagejpeg($ new_img, $dst_file,100) // 이미지 저장
  83. break; >case IMAGETYPE_PNG :
  84. imagepng($new_img,$dst_file,100);
  85. break
  86. case IMAGETYPE_GIF :
  87. imagegif($new_img,$dst_file,100)
  88. default:
  89. break;
  90. }
  91. }// if3
  92. }// 함수 종료
  93. ? >
  94. 코드 복사
성명:
본 글의 내용은 네티즌들의 자발적인 기여로 작성되었으며, 저작권은 원저작자에게 있습니다. 본 사이트는 이에 상응하는 법적 책임을 지지 않습니다. 표절이나 침해가 의심되는 콘텐츠를 발견한 경우 admin@php.cn으로 문의하세요.