2011-06-14 4 views
1

GD와 PHP에서 또 다른 문제가 발생했습니다.텍스트 배경색을 그립니다. PHP와 GD

이미지에 텍스트를 성공적으로 쓰고 있습니다.
그러나 직사각형 (또는 모든 모양)의 텍스트를 이미지 위에 직접 배치하는 대신 이미지를 배치 할 텍스트의 단색 배경을 만들기 위해 텍스트를 배치하는 것이 유리한 경우가 발생했습니다 텍스트를 아주 쉽게 읽을 수는 없습니다. 그 다음 오버레이를 단색 배경에 적절한 크기의 이미지에 텍스트 쓰기 텍스트

  • 를 쓰고, 같은

    1. 가 색으로 배경 채우기 :

      내 두 개의 아이디어를 우선 순위에 따라입니다 대상에 이미지는

    나는 # 1을하고 # 2 내가이를 만들 수 있도록 텍스트의 크기를 결정하는 방법을 모르는 지나치게 복잡한 것 같다하는 방법을 알아낼 수 없습니다 그것을위한 새로운 이미지 . 명확성을 위해

    , 여기에 아주 좋지 않다 출력 :

    bad

    그리고 여기에 내가 어떤 색상의 텍스트 뒤에 꽉 상자,보고 싶은 방법은 다음과 같습니다

    better

    내가 어떤 제안에 열려있어,하지만 다른 이미지 나 hackiness없이 즉석에서 색상을 그리기 분명히 내 첫번째 선택이 될 것입니다.

    업데이트 : @Dan이 `imagettftext'를 사용하여 제안 후

    , 나는 그것이 내가 내 라이브러리에 해당 함수에 대한 지원이 추가 높은 시간이라고 결정했다. 하나의 중요한 문제를 제외하고는 모든 것이 예상대로 작동합니다.

    단색 배경 (투명도 0)으로 작성된 경우에도 이미지에 쓰여진 텍스트가 여전히 투명합니다.

    여기 테스트에 쓴 스크립트는 다음과 같습니다

    <?php 
        set_include_path('backbone:global:jquery'); 
    
        require_once('Image.php'); 
    
        $scout = new Image(); 
        $scout->source = "scout.jpg"; 
    
        $result = $scout->Write->Font(25, 25, "A Fairly Long String", 12, "#FF0000", 0, "LiberationSans-Regular.ttf", 1, "#FFFF00", .4, 4); 
    
        if(!isset($_GET['dev'])) 
        { 
         header("Content-Type: " . $scout->contentType()); 
        } 
    
        if($result) 
        { 
         $scout->output(); 
        } 
    ?> 
    

    필요 내가 사용하는 파일/:
    1. scout

    3. 이미지 처리 라이브러리
    - Image
    - ImageBase
    - ImageCombine
    -ImageDraw
    - ImageManipulate
    - ImageWrite

    내가 대한 모든 파일을 사과, 정말에만 Image, ImageBase, ImageCombineImageWrite을 사용하지만 다른 로더에 의해 에드 require_once이다.여기

    위 스크립트의 출력 샘플입니다 :

    transparent text background

    그리고 여기 제로 투명도 (완전 불투명)으로 출력입니다 :

    $result = $scout->Write->Font(25, 25, "A Fairly Long String", 12, "#FF0000", 0, "LiberationSans-Regular.ttf", 1, "#FFFF00", 1, 4);

    transparent on solid background

    하나를 아이디어가 원인 일 수 있습니까? 그것은 아주 어딘가에 내 코드의 가능성이 있지만 그것은이 버그를 제외하고해야한다고 생각했던 것처럼 정확하게 작동한다는 것이 이상하게 보입니다.

  • +0

    가 어떤 기능을 당신이 당신의 이미지에 텍스트를 작성하기 위해 사용합니까 : 텍스트를 쓰는 동안, 당신은 ON 을 혼합 알파를 설정해야합니다 문자 박스 강제로 100 % 투명성이없는 배경 텍스트를 작성하려면? ttf를 옵션으로 사용하고 있습니까? – Dan

    +0

    @Dan 그것은 확실히 선택의 여지가 있지만, 그냥 뭔가를 쉽게 설정, 나는 기본 [imagestring] (http://www.php.net/manual/en/function.imagestring.php) 및 [ imagestringup] (http://www.php.net/manual/en/function.imagestringup.php). ** 편집 ** ** 그런데, 나는이 라이브러리를 사용하고있다. (https://github.com/rockerest/myframework/blob/master/backbone/ImageWrite.php). – rockerest

    답변

    2

    필자는이 문제에 대한 답변을 필사적으로 검색하면서 필자는 this SO question을 발견했는데, 이는 필연적으로 내 문제와 관련이 있으며 대답을 포함하고 있습니다.

    투명성을 원할 때 imagealphablendingfalse라고 말한 이유를 완전히 이해하지 못했기 때문에 내가 사용하고있는 코드를 올바르게 이해하지 못하면이 문제가 발생했습니다.

    어쨌든 다음 수정 코드는 하나의 테스트 케이스에서 매력처럼 작동합니다.

    imagealphablending($text->handle, true); 
    $bool = imagettftext($text->handle, $textSize, $angle, $padding, abs($size[5]) + $padding, $this->AllocateColor($rgba[0]['r'], $rgba[0]['g'], $rgba[0]['b'], $rgba[0]['alpha']), $font, $string); 
    imagealphablending($text->handle, false); 
    
    1

    아마도 ttf로 전환하면이 작업이 수행됩니다. http://php.net/manual/en/function.imagettfbbox.php

    +0

    내 질문을 업데이트했습니다. 어떤 힌트? – rockerest

    +0

    이미지 크기를 조정할 때 전에 그런 것들을 보았습니다. 크기 조정이 포함되어 있습니까? – Dan

    +0

    크기 조정이 전혀 없습니다. 그것은 기본적으로 : 1)로드 스카우트, 2) 새 이미지를 텍스트 크기로 만들기, 3) 텍스트 쓰기, 4) 스카우트 이미지에 텍스트 오버레이, 5) 결합 된 이미지 표시. 그것은 저를 조금 째깍 거리고 있습니다 : -/나는 GD가 그렇게 까다 롭지 않았 으면 좋겠다. – rockerest