2011-01-09 21 views
6

मैं पाठ से छवियों को उत्पन्न करने के लिए इस सरल स्क्रिप्ट का उपयोग किया गया है के साथ छवि रूप पाठ बनाने के लिए PHP जी.डी. का उपयोग करते हुए:अलग फोंट

<?php 
header('Content-type: image/png'); 

$color = RgbfromHex($_GET['color']); 

$text = urldecode($_GET['text']); 

$font = 'arial.ttf'; 

$im = imagecreatetruecolor(400, 30); 

$bg_color = imagecolorallocate($im, 255, 255, 255); 

$font_color = imagecolorallocate($im, $color[0], $color[1], $color[2]); 

imagefilledrectangle($im, 0, 0, 399, 29, $bg_color); 

imagettftext($im, 20, 0, 10, 20, $font_color, $font, $text); 

imagepng($im); 

imagedestroy($im); 

function RgbfromHex($hexValue) { 
    if(strlen(trim($hexValue))==6) { 
     return array(
        hexdec(substr($hexValue,0,2)), // R 
        hexdec(substr($hexValue,2,2)), // G 
        hexdec(substr($hexValue,4,2)) // B 
        ); 
    } 
    else return array(0, 0, 0); 
} 

?> 

मैं file.php पाठ = परीक्षण स्क्रिप्ट & रंग के साथ स्क्रिप्ट कॉल = 000000

अब मुझे पता है कि मैं एक ही छवि में मिश्रित सामान्य और बोल्ड फोंट के साथ पाठ कैसे उत्पन्न कर सकता है करना चाहते हैं, जैसे file.php?text=testing <b>script</b>&color=000000


धन्यवाद कुछ मुझे यह समझने में मदद करने के लिए dqhendricks करने के लिए।

यहां एक त्वरित स्क्रिप्ट मैंने लिखा है, अभी भी सुधार की बहुत जरूरत है, लेकिन बुनियादी कार्यक्षमता के लिए यह ठीक काम कर रहा है:

<?php 
header('Content-type: image/png'); 

$color = RgbfromHex($_GET['color']); 

$im = imagecreatetruecolor(400, 30); 

$white = imagecolorallocate($im, 255, 255, 255); 

imagefilledrectangle($im, 0, 0, 399, 29, $white); 

$tmp = $_GET['text']; 

$words = explode(" ", $tmp); 

$x = array(0,0,10); // DUMMY ARRAY WITH X POSITION FOR FIRST WORD 

$addSpace = 0; 

foreach($words as $word) 
{ 
    if($addSpace) $word = " ".$word; // IF WORD IS NOT THE FIRST ONE, THEN ADD SPACE 

    if(stristr($word, "<b>")) 
    { 
     $font = 'arialbd.ttf'; // BOLD FONT 
     $x = imagettftext($im, 20, 0, $x[2], 20, imagecolorallocate($im, $color[0], $color[1], $color[2]), $font, str_replace(array("<b>","</b>"), "", $word)); 
    } 
    else 
    { 
     $font = 'arial.ttf'; // NORMAL FONT 
     $x = imagettftext($im, 20, 0, $x[2], 20, imagecolorallocate($im, $color[0], $color[1], $color[2]), $font, $word); 
    } 

    $addSpace = 1; 
} 

imagepng($im); 

imagedestroy($im); 

function RgbfromHex($hexValue) { 
    if(strlen(trim($hexValue))==6) { 
     return array(
        hexdec(substr($hexValue,0,2)), // R 
        hexdec(substr($hexValue,2,2)), // G 
        hexdec(substr($hexValue,4,2)) // B 
        ); 
    } 
    else return array(0, 0, 0); 
} 

?> 

नोट: यह केवल "बोल्ड" एकल रिक्तियों से अलग शब्दों के लिए काम करेंगे और एक शब्द के बोल्डिंग के लिए नहीं।

कॉल file.php?text=testing+<b>script</b>&color=000000

+0

http://www.roseindia.net/tutorial/php/phpgd/About-boldtext.html प्रयास करें यह तुम क्या चाहते करने के लिए लगता है, यह है कि काला फ़ॉन्ट है ग्रे फ़ॉन्ट के शीर्ष पर, आप केवल ग्रे की स्थिति को बदल सकते हैं जिससे कि आप उन्हें कैसा लगा सकें। यूआरएल 'file.php? Text = test और bold = script और color = 000000' जैसा ही होगा। – Daniel

+0

यह बोल्ड जैसा नहीं दिखता है, लेकिन एक छाया की तरह, और यदि मैं इसे एक-दूसरे के सामने रखता हूं तो मुझे नहीं लगता कि वे केवल एक imagettftext() के रूप में अलग दिखाई देंगे। – Meredith

उत्तर

0

साथ स्क्रिप्ट आप एक एरियल-मोटे अक्षरों फ़ाइल को लोड, और दो अलग-अलग imagettftext करने की आवश्यकता होगी(), आप उपयोग करना चाहते प्रत्येक फ़ॉन्ट के साथ एक कहता है। स्ट्रिंग को पार्स करने के लिए कि आप कौन से हिस्सों को बोल्ड करना चाहते हैं, और जहां आपको टेक्स्ट के प्रत्येक अनुभाग को प्रिंट करना चाहिए, ऐसा लगता है जैसे यह बहुत ही जटिल कोड बन जाएगा। आप इसके लिए भी क्या उपयोग कर रहे हैं? एक ही चीज़ को पूरा करने के लिए बेहतर समाधान हो सकते हैं।

अलावा

निर्धारित करने के लिए imagettftext() फ़ंक्शन से वापसी मान का उपयोग करें जहां अगले पाठ प्रिंट शुरू कर देना चाहिए।

प्रलेखन से:

चार अंक पाठ का सीमांकन बॉक्स बनाने का प्रतिनिधित्व 8 तत्वों के साथ एक सरणी देता है। अंक का क्रम निचला बायां, निचला दायां, ऊपरी दाएं, ऊपरी बाएं है। अंक कोण के बावजूद पाठ के सापेक्ष हैं, इसलिए जब आप क्षैतिज पाठ देखते हैं तो "ऊपरी बाएं" का अर्थ शीर्ष बाएं कोने में होता है। त्रुटि पर गलत देता है।

+1

पार्सिंग कोई समस्या नहीं होगी, जो मुझे स्पष्ट नहीं है कि उदाहरण में दूसरे शब्द के लिए मुझे एक्स स्थिति कैसे मिलेगी? Text = test स्क्रिप्ट। मेरा मतलब है कि मुझे कैसे पता चलेगा कि पहला शब्द कहां समाप्त होता है, इसलिए मैं दूसरे को एक और imagettftext() और एक बोल्ड फ़ॉन्ट के साथ रख सकता हूं। – Meredith

+0

उस के उत्तर के लिए संपादन देखें। – dqhendricks

+0

बहुत अच्छा है, बहुत बहुत धन्यवाद। – Meredith

-1

प्रतिक्रिया के लिए:

पार्स एक समस्या नहीं होगी, क्या मैं स्पष्ट नहीं है कि कैसे मैं उदाहरण के लिए पाठ = परीक्षण स्क्रिप्ट में दूसरा wordr के लिए X स्थिति का पता लगाने होता है। मेरा मतलब है कि मुझे कैसे पता चलेगा कि पहला शब्द कहां समाप्त होता है, इसलिए मैं दूसरे को एक और imagettftext() और एक बोल्ड फ़ॉन्ट के साथ रख सकता हूं। - मेरेडिथ जनवरी 9 '11 पर 2:43


हास्यास्पद कैसे कोई समय कहने के लिए जब वे सिर्फ रिक्त स्थान पर स्ट्रिंग विस्फोट के लिए कहा Coulda, तो प्रत्येक शब्द "इसका जवाब के लिए संपादन देख" लिया एक सरणी में है ..

<?PHP 
$sentence = "I LOVE giving retarded answers that don't amount to jack!"; 
$sentence = explode(" ",$sentence); 

for($s=0;$s<count($sentence);$s++){ 

#THERES YOUR INDIVIDUAL WORDS! 
$word = $sentence[$s]; 

} 
?> 

आपकी एक्स स्थिति आपके तर्क के लिए केवल $ s होगी। दूसरा शब्द प्राप्त करने के लिए आप यह कर सकते हैं:

<?PHP 
$word1 = $sentence[0]; 
$word2 = $sentence[1]; 
$word3 = $sentence[2]; 
$word4 = $sentence[3]; 
?> 

हां, मैंने केवल मानसिक दृश्य प्रभाव के लिए $ शब्दों का नाम दिया।

$ वाक्य [1] शब्द होगा 2