2011-11-06 4 views
31

ギターコード/タブをテキスト形式で表示するサイトがあります。ここで私は現在表示していますものです:ギターコードを表示するためにPHPで画像を作成

エム:私はGDはこのためにダイナミックなイメージを作成できることを学び

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

。しかし、私はPHPで新しく、私は何をすべきか分かりません。

PHPでイメージを表示するのは簡単ですか?例えば、和音のために(

guitar.jpg

と、このスクリプトと同じフォルダに入れて:

おかげ

+0

テキスト出力にいくつかのセマンティクスを追加すると、CSSでそれをスタイルすることもできます。しかし、私はあなたにGDを使うのをやめさせたくありません。それはいいことです。 – hakre

答えて

72

まずarialフォントをダウンロードして(guitar.jpgとして保存)この画像を取得します。 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); 

これはF#のようなものです。左上のが意味二フレット

enter image description here

**注:あなたが繰り返し同じタブを再生成する必要はありませんので、私はまた、ディスクに画像を保存しますと、 over *。

+14

それは魅力のように動作します – GuitarMaster

+0

あなたは非常に歓迎です –

5

Tony Pottierはこれを行うにはちょうど美しいクラスを書いています。 http://www.tonypottier.info/

編集:下記のような課題を解決するために:マージン右ダブル考え出しfretnumbersなし

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

が正しく表示されません。

+6

しかし、あなたが置く: 'x-13-12-11-12-x'それは空白のタブを示します – aki

+0

@aki上記の編集を参照してください –

関連する問題