2011-11-06 17 views
31

Mam stronę, która pokazuje akordy gitarowe/zakładki w formacie tekstowym. Oto co mam obecnie wyświetlania:Utwórz obraz w PHP, aby wyświetlić akordy gitarowe.

Em:

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

Uczę się, że GD można utworzyć dynamiczny obraz do tego. Ale jestem nowy w PHP i nie mam pojęcia, co robić.

Czy łatwo jest stworzyć coś takiego w PHP, aby wyświetlić obraz?

Dzięki

+0

Po dodaniu semantyki do tekstu wynikowego można również nadać mu styl CSS. Ale nie chcę, żebyś przestał używać GD, to dobra rzecz. – hakre

Odpowiedz

72

najpierw pobrać czcionkę arial i dostać ten obraz (zapisać jako guitar.jpg):

guitar.jpg

i umieścić je w tym samym folderze co tego skryptu (na przykład akordów. 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); 

Spowoduje to usunięcie czegoś podobnego do F #. w lewym górnym rogu oznacza drugim progu:

enter image description here

** uwaga: Chciałbym również zapisać zdjęcie na dysku, dzięki czemu nie muszą się zregenerować taką samą kartę i ponad. *

+14

to działa jak wdzięk dzięki – GuitarMaster

+0

jesteś bardzo mile widziany –

5

Tony Pottier napisał piękną klasę, aby to zrobić. http://www.tonypottier.info/

Edycja: aby rozwiązać problem, jak wymienione poniżej:

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

Bez margin-right fretnumbers podwójnie kształtach nie będą wyświetlane prawidłowo.

+6

nieźle, ale gdy umieścisz: 'x-13-12-11-12-x' pokazuje pustą kartę – aki

+0

@aki zobacz edytuj powyżej –