2012-07-27 17 views
13

के साथ टेक्स्ट चौड़ाई की गणना करना मैं जीडी PHP के साथ उत्पन्न छवि के अलावा पाठ की एक गतिशील रेखा की चौड़ाई प्राप्त करने की कोशिश कर रहा हूं। मैं थोड़ा अनिश्चित हूँ हालांकि कैसे। मुझे पता है कि imageloadfont() का उपयोग करके फ़ॉन्ट कैसे लोड करें, लेकिन क्या मैं एक .ttf फ़ाइल का उपयोग कर सकता हूं? मैं आकार 12 एरियल फ़ॉन्ट का उपयोग कर पाठ की चौड़ाई जानना चाहता हूं। जब मैं अपनी टीटीएफ फ़ाइल का उपयोग करने की कोशिश करता हूं तो मुझे त्रुटि मिलती है "फ़ॉन्ट पढ़ने में त्रुटि, अमान्य फ़ॉन्ट हेडर।" अगर मुझे एक .gdf फ़ाइल की आवश्यकता है, तो मुझे फ़ॉन्ट आकार 12 जीडीएफ फ़ाइल कहां मिल सकती है?PHP जीडी

$newfont = imageloadfont("../fonts/arial.ttf"); 
$font_width = imagefontwidth($newfont); 
$font_height = imagefontheight($newfont); 
+2

एक ले लो [imagettfbbox] पर देखें (http://www.php.net/manual/en/function.imagettfbbox.php) और [imagettftext] (http://php.net/manual/en/function.imagettftext.php)। – Vatev

उत्तर

33

imageloadfont() उपयोगकर्ता परिभाषित बिटमैप लोड करने के लिए प्रयोग किया जाता है: यहाँ मेरी कोड है। यदि आप केवल एरियल या किसी अन्य ट्रू टाइप फ़ॉन्ट्स (.ttf) या ओपनटाइप फोंट (.otf) का उपयोग करना चाहते हैं (जीडी लिब में उत्तरार्द्ध के लिए समर्थन बग्गी है), तो आपको imagettftext() की आवश्यकता है। imagettftext() का उपयोग करने से पहले और अपनी छवि में टेक्स्ट लिखने से पहले, आपको सबसे पहले यह पता होना चाहिए कि यह फिट होगा या नहीं। इसे जानने के लिए आपको बस imagettfbbox() पर कॉल करना होगा और इसे फ़ॉन्ट आकार, टेक्स्ट का कोण (क्षैतिज पाठ के लिए 0), अपने .ttf या .otf फ़ॉन्ट फ़ाइल का पथ और टेक्स्ट की स्ट्रिंग को पास करना होगा और यह एक चार तत्वों का प्रतिनिधित्व करने वाले 8 तत्वों के साथ सरणी पाठ के बाध्यकारी बॉक्स को बनाते हैं (विशिष्टताओं के लिए PHP मैन्युअल जांचें)। फिर आप उन सरणी तत्वों का संदर्भ दे सकते हैं और चौड़ाई और ऊंचाई को जानने के लिए गणना कर सकते हैं कि टेक्स्ट की उस विशेष स्ट्रिंग को उठाया जाएगा। फिर आप उन मानों का उपयोग एक विशिष्ट चौड़ाई और ऊंचाई के साथ एक छवि बनाने के लिए कर सकते हैं जो पाठ को पूरी तरह से प्रदर्शित करने की अनुमति देगा।

यहाँ एक सरल स्क्रिप्ट पूरा करता है कि आप आपको प्राप्त करने के लिए क्या करने की कोशिश कर रहे हैं क्या है शुरू कर दिया:

<?php # Script 1 

/* 
* This page creates a simple image. 
* The image makes use of a TrueType font. 
*/ 

// Establish image factors: 
$text = 'Sample text'; 
$font_size = 12; // Font size is in pixels. 
$font_file = 'Arial.ttf'; // This is the path to your font file. 

// Retrieve bounding box: 
$type_space = imagettfbbox($font_size, 0, $font_file, $text); 

// Determine image width and height, 10 pixels are added for 5 pixels padding: 
$image_width = abs($type_space[4] - $type_space[0]) + 10; 
$image_height = abs($type_space[5] - $type_space[1]) + 10; 

// Create image: 
$image = imagecreatetruecolor($image_width, $image_height); 

// Allocate text and background colors (RGB format): 
$text_color = imagecolorallocate($image, 255, 255, 255); 
$bg_color = imagecolorallocate($image, 0, 0, 0); 

// Fill image: 
imagefill($image, 0, 0, $bg_color); 

// Fix starting x and y coordinates for the text: 
$x = 5; // Padding of 5 pixels. 
$y = $image_height - 5; // So that the text is vertically centered. 

// Add TrueType text to image: 
imagettftext($image, $font_size, 0, $x, $y, $text_color, $font_file, $text); 

// Generate and send image to browser: 
header('Content-type: image/png'); 
imagepng($image); 

// Destroy image in memory to free-up resources: 
imagedestroy($image); 

?> 

बदलें मूल्यों के हिसाब से अपनी आवश्यकताओं फिट करने के लिए। PHP मैनुअल को पढ़ने के लिए मत भूलना।

+2

ग्रेट उत्तर .. +1 –

+0

क्षमा करें, लेकिन [** यह बात काम नहीं करती **] (http://i.stack.imgur.com/54yoj.png)। यह वही है जो पाठ '666" (या कोई अन्य नंबर AFAIK) और कूरियर न्यू फ़ॉन्ट के साथ उत्पन्न करता है। यह वास्तव में अन्य फोंट के साथ काम नहीं करता है - हमेशा यहां और वहां कुछ कटौती करता है। मैं समझता हूं कि यह आपकी गलती नहीं है कि PHP के पीछे लोग अक्षम हैं, लेकिन अभी भी एक डाउनवोट है। –

+0

[एक और उदाहरण] (http://i.stack.imgur.com/tYJV7.png) जहां मैंने हाइलाइट किया कि क्या गलत है। –

1
GD2 साथ

, imagettfbbox के फ़ॉन्ट आकार पिक्सल में नहीं निम्नलिखित परिवर्तित साथ, सार्वजनिक टेलीफोन में होना चाहिए:

($ fontSizeInPixel * 3)/4

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