4

imagettftext()을 사용하여 이미지에 동적 텍스트를 쓰고 이미지 너비에 맞춰야합니다.imagettftext() : 텍스트가 이미지의 너비에 맞는지 확인하기 위해 글꼴 크기를 계산합니다.

글자 크기로 글자 크기를 계산하려면 어떻게해야합니까?

+0

고정 폭 글꼴이 아닌 경우 텍스트 길이로 글꼴 크기를 계산할 수 없습니다. 그리고 좋은 근사치는 없습니다. 모든 W의 문자열은 모든 문자열보다 훨씬 많은 공간을 차지합니다. –

답변

11

imagettfbbox 기능을 사용하여 출력하기 전에 TTF 텍스트의 경계 상자를 계산할 수 있습니다. 불행히도 너비에 맞게 크기를 조절하는 직접적인 방법은 없으므로 직접 처리해야합니다.

기본 글꼴 크기 (예 : 20)의 텍스트를 imagettfbbox으로 전달하고 그 너비를 검색하는 방법 중 하나입니다. 를 사용하여

fontSize = 20 * scale; 

:

scale = targetWidth/bboxWidth; 

그런 다음 적당한 크기로 텍스트를 그릴 : 당신은 스케일 팩터를 계산하여 더 작거나 더 큰 텍스트를 원하는 크기에 맞게하는 방법을 계산할 수 있습니다 imagettftext 기능. 글꼴은 완벽하게 100 % 확장되지 않지만 아주 좋은 근사값을 얻을 수 있습니다.

imagettfboxhere의 설명서를 참조하십시오.

+0

잘 작동합니다! 감사! – Asaf

+0

스케일을 100 % 완벽하게 만들려면 글꼴 40을 사용하여 두 번째 패스를 수행하고 동일한 입력 문자열에 대해 20-40 글꼴 크기의 차이를 기준으로 축척을 계산할 수 있습니다. – Programista

+0

도 도움이되었습니다 .... – arun

-1
while (itsTooBigAccordingToimagettftext() && $fontSize > 0) { 
    $fontSize--; 
} 
+2

이로 인해 "치명적인 오류 : 정의되지 않은 함수 호출 itsTooBigAccordingToimagettftext()"가 발생합니다. 즉, 세미 - 코드를 사용하는 대신 답변에 대한 더 나은 설명을 해주십시오 :-) –

+1

Stackoverflow는 완전히 작동하는 코드가 아닌 지침을 얻는 곳입니다. 나에게 좋은 안내문이다. 유일한 오류는'itsTooBigAccordingToimagettfbbox()'가 아니라'itsTooBigAccordingToimagettftext()'를 읽어야한다는 것이다. – Capsule

+1

경고 : 조심하지 않을 때 *는 길게 지연 될 수있다. – starbeamrainbowlabs