2011-12-11 61 views

Trả lời

0

Nhìn vào trang này: (ví dụ 3) http://www.imagemagick.org/ImageMagick-7.0.0/script/conjure.php

Các tài ba gợi nhị phân cho phép bạn chạy XML dựa kịch bản viết bằng các ngôn ngữ Magick Scripting (MSL). Những người có thể sử dụng IM "truy vấn-phông chữ-số liệu" -command, mà dường như không có sẵn bởi các nhị phân khác.

0

Đây thực sự là muộn, nhưng, từ PHP.net:

Sử dụng:

Imagick :: queryFontMetrics - Trả về một mảng đại diện cho font chữ đó

như thế này:

// Set font. 
     $font = PATH/TO/YOUR/CUSTOM/FONT 
    // Get dimensions. 
    // Create a new Imagick object. 
     $imTest = new Imagick(); 

    // Create an ImagickDraw object. 
     $drawTest = new ImagickDraw(); 

    // Set the font. 
     $drawTest->setFont($font); 

    // Set the local X and Y. 
     $localX = 0; 
     $localY = 0; 

    // Dump the font metrics, autodetect multiline 
     for ($i = 0; $i < strlen($yourText); $i++) { 
     if ($yourText[$i] === ' ') { 
      $tempX += $imTest->queryFontMetrics($drawTest, $yourText[$i])['textWidth']; 
     } else { 
      $tempX += $imTest->queryFontMetrics($drawTest, $yourText[$i])['originX'] + $imTest->queryFontMetrics($drawTest, $yourText[$i])['boundingBox']['x2'] + $imTest->queryFontMetrics($drawTest, $yourText[$i])['boundingBox']['x1']; 
     }  
     } 

Địa điểm:

ký tựWidth và ký tựHeight - Chúng dường như có liên quan đến kích thước bạn đã chỉ định cho phông chữ và dường như không khác với phông chữ (với cùng kích thước). Như như vậy, chúng không đặc biệt hữu ích (với tôi, ít nhất). Chúng không phải là một chỉ số đáng tin cậy về số lượng phông chữ sẽ sử dụng cho số lượng .

ascender - Ascender là một phần của phông chữ phía trên đường cơ sở. Nó không liên quan đến nhân vật - giá trị ascender giống nhau cho mỗi ký tự trong phông chữ.

descender - Phần còn lại là một phần của phông chữ bên dưới đường cơ sở. Nó được biểu diễn như một con số tiêu cực. Thêm các giá trị tuyệt đối của mã ascender và descender cho bạn ...

textHeight - Đây là tổng chiều cao có sẵn cho phông chữ. Nó là như nhau cho mỗi nhân vật trong phông chữ không phân biệt trường hợp của nó hoặc bao nhiêu không gian nhân vật dường như chiếm. Điều này có thể được sử dụng để xác định chiều cao dòng khi xuất ra các đoạn vv

textWidth - Giá trị này thay đổi từ nhân vật để nhân vật và là chiều rộng của nhân vật. Điều này rất hữu ích nếu boundingBox không cung cấp các giá trị có thể sử dụng (xem boundingBox bên dưới). Khi định vị các ký tự một một - không sử dụng textWidth, hãy sử dụng originX (xem bên dưới).

maxHorizontalAdvance - Tôi e rằng tôi đã không tìm ra mục đích của việc này. Nó giống nhau cho mọi ký tự trong phông chữ.Đối với phông chữ Arial Italic tại kích thước 67, giá trị là 89, rộng hơn nhiều so với báo cáo trước cho chữ M hoặc chữ W có cùng kích thước.

boundingBox - Trả về mảng liên kết mô tả bốn điểm (x1, y1, x2, y2) của hình chữ nhật chứa ký tự. Các giá trị này liên quan đến nguồn gốc (nghĩa là tọa độ của nơi bạn đang vẽ ký tự trong hình ảnh). Hình chữ nhật trả về là rất chính xác và bao quanh tất cả các phần của ký tự được in hoàn toàn - nhưng boundingBox chỉ hoạt động trên các ký tự đơn. Nó sẽ không cung cấp cho số liệu chính xác cho nhiều ký tự (theo kinh nghiệm của tôi). Khi vẽ một hộp, bạn cần thêm các giá trị "x" vào nguồn gốc và TỪ các giá trị "y" từ nguồn gốc. Bạn không thể dựa vào boundingBox cho ký tự SPACE. Nó trả về một boundingBox của (0,0,0,0). textWidth (xem ở trên) có ích ở đây.

originX và originY - đây là những tiêu đề không chính xác. Các giá trị được trả lại trong originX và originY thực sự là AdvanceX và AdvanceY. Các giá trị này cung cấp cho bạn vị trí của ký tự tiếp theo tương ứng với ký tự hiện tại.

Và sau đó bạn có thể tạo ra hình ảnh với văn bản của bạn như thế này:

// Generate image. 
    $cmd = 'convert -size ' . $localX . 'x' . $maxY . ' xc:none -gravity Center -font ' . $font . ' -pointsize ' . $fontSize . ' -annotate +0+0 "' . $yourText . '" ' . FINAL/PATH/TO/YOUR/FILE.png'; 
    $r = shell_exec($cmd); 
Các vấn đề liên quan