2011-11-06 11 views
31

दिखाने के लिए PHP में एक छवि बनाएं मेरे पास एक साइट है जो पाठ प्रारूप में गिटार chords/टैब दिखाती है। यहाँ मैं वर्तमान में क्या प्रदर्शित कर रहा हूँ है:गिटार chords

एम:

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

मैं समझ जाते हैं कि जी.डी. इस के लिए एक गतिशील छवि बना सकते हैं। लेकिन मैं PHP में नया हूं और मुझे नहीं पता कि क्या करना है।

क्या छवि को प्रदर्शित करने के लिए PHP में ऐसी चीज बनाना आसान है?

धन्यवाद

+0

यदि आप पाठ आउटपुट में कुछ अर्थशास्त्र जोड़ते हैं तो आप इसे सीएसएस के साथ भी शैलीबद्ध कर सकते हैं। लेकिन मैं आपको जीडी का उपयोग करने के लिए नहीं रोकना चाहता, यह एक अच्छी बात है। – hakre

उत्तर

72

पहले डाउनलोड arial फ़ॉन्ट और इस छवि को मिल (guitar.jpg के रूप में बचाने के लिए):

guitar.jpg

और उन्हें इस स्क्रिप्ट (उदाहरण के chords के लिए के रूप में एक ही फ़ोल्डर में डाल दिया। 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); 

यह एफ # के लिए कुछ आउटपुट करेगा। 2 ऊपर बाईं ओर मतलब है दूसरा झल्लाहट:

enter image description here

** ध्यान दें: मैं भी तो तुम पर एक ही टैब को पुनर्जीवित करने की जरूरत नहीं है डिस्क के लिए छवि बचाने के और ओवर। *

+14

यह एक आकर्षण की तरह काम करता है धन्यवाद – GuitarMaster

+0

आप बहुत स्वागत करते हैं –

5

टोनी पॉटीयर ने ऐसा करने के लिए बस एक सुंदर वर्ग लिखा है। http://www.tonypottier.info/

संपादित करें: समस्या को हल करने का उल्लेख नीचे के रूप में:

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

मार्जिन-सही डबल figured fretnumbers बिना सही ढंग से नहीं दिखाया जाएगा।

+6

खराब नहीं है, लेकिन जब आप डालते हैं: 'x-13-12-11-12-x' यह एक खाली टैब दिखाता है – aki

+0

@aki ऊपर संपादित देखें –

संबंधित मुद्दे