2011-11-06 24 views
31

Tôi có một trang web hiển thị các hợp âm/tab của đàn guitar ở định dạng văn bản. Đây là những gì tôi hiện đang hiển thị:Tạo một hình ảnh bằng PHP để hiển thị hợp âm cho guitar

Em:

| | | | | | 
| | | | | | 
| 2 2 | | | 
| | | | | | 
| | | | | | 

Tôi biết rằng GD có thể tạo ra một hình ảnh năng động cho việc này. Nhưng tôi mới ở PHP và tôi không biết phải làm gì.

Tạo đơn giản trong PHP để hiển thị hình ảnh có đơn giản không?

Cảm ơn

+0

Nếu bạn thêm một số ngữ nghĩa vào đầu ra văn bản, bạn cũng có thể định kiểu nó bằng CSS. Nhưng tôi không muốn ngăn bạn sử dụng GD, đó là một điều tốt. – hakre

Trả lời

72

Đầu tiên tải font arial và nhận được hình ảnh này (save as guitar.jpg):

guitar.jpg

và đặt chúng trong thư mục tương tự như kịch bản này (ví dụ hợp âm. php):

<?php 

    function showChord($chord) { 
    $imgfile = "./guitar.jpg"; 
    $text = "."; 
    $font = './arial.ttf'; 

    $im = imagecreatefromjpeg($imgfile); 
    $x = imagesx($im); 
    $y = imagesy($im); 
    $fontsize = 100; 
    $white = imagecolorallocate($im, 0, 0, 0); 

    $chords = explode('-', $chord); 
    // chords[0] = e1 and chords[5] = e6 

    $minimum = min($chords); 
    imagettftext($im, 15, 0, 1, 32, $white, $font, $minimum); 
    $add = 0; 
    if($minimum > 0) { 
     $add = 30; 
    } 
    // chords positions 
    $interval1 = ($chords[0] != 0 ? (25 + $add + (intval($chords[0]) - $minimum) * 30) : 0); 
    $interval2 = ($chords[1] != 0 ? (25 + $add + (intval($chords[1]) - $minimum) * 30) : 0); 
    $interval3 = ($chords[2] != 0 ? (25 + $add + (intval($chords[2]) - $minimum) * 30) : 0); 
    $interval4 = ($chords[3] != 0 ? (25 + $add + (intval($chords[3]) - $minimum) * 30) : 0); 
    $interval5 = ($chords[4] != 0 ? (25 + $add + (intval($chords[4]) - $minimum) * 30) : 0); 
    $interval6 = ($chords[5] != 0 ? (25 + $add + (intval($chords[5]) - $minimum) * 30) : 0); 
    // write to the image 
    imagettftext($im, $fontsize, 0, 01, $interval1, $white, $font, $text); 
    imagettftext($im, $fontsize, 0, 18, $interval2, $white, $font, $text); 
    imagettftext($im, $fontsize, 0, 36, $interval3, $white, $font, $text); 
    imagettftext($im, $fontsize, 0, 53, $interval4, $white, $font, $text); 
    imagettftext($im, $fontsize, 0, 70, $interval5, $white, $font, $text); 
    imagettftext($im, $fontsize, 0, 86, $interval6, $white, $font, $text); 
    header("Content-type: image/jpeg"); 
    imagejpeg($im); 
    ImageDestroy($im); 
    } 

# $chord = '0-2-2-0-0-0'; //Em 
    $chord = '2-4-4-3-2-2'; //F# 
    showChord($chord); 

Điều này sẽ tạo ra một thứ gì đó tương tự như F #. Các trên cùng bên trái có nghĩa là thứ hai băn khoăn:

enter image description here

** lưu ý: Tôi cũng muốn lưu hình ảnh vào đĩa, do đó bạn không cần phải tạo lại cùng một tab trên và hơn. *

+14

nó hoạt động như một sự quyến rũ nhờ – GuitarMaster

+0

bạn rất hoan nghênh –

5

Tony Pottier đã viết một lớp đẹp chỉ để làm điều này. http://www.tonypottier.info/

Edit: để giải quyết vấn đề như đã đề cập dưới đây:

$c = new chord(array('x',13,12,11,12,'x')); 
$c->setMarginRight(20); 
$c->setStartingFret(10); 
$c->draw(); 

Nếu không có sự fretnumbers đúp figured margin-right sẽ không hiển thị một cách chính xác.

+6

không tệ nhưng khi bạn đặt: 'x-13-12-11-12-x' nó hiển thị một tab trống – aki

+0

@aki xem chỉnh sửa ở trên –

Các vấn đề liên quan