2012-05-14 14 views
8

का उपयोग कर फ़ॉन्ट परिवार के साथ एक फ़ॉन्ट निर्दिष्ट करना क्या ImageMagick में फ़ॉन्ट परिवार का उपयोग करके फ़ॉन्ट प्रस्तुत करना संभव है?ImageMagick

मैंने उन सभी चीजों का प्रयास किया है जिनके बारे में मैं सोच सकता हूं और कुछ भी काम नहीं करता है। मैंने बहुत सी खोज की है और मुझे ऐसा कुछ भी नहीं मिल रहा है जो इस विशिष्ट मुद्दे को संबोधित करता है।

मैं अंततः PHP का उपयोग कर रहा हूं, लेकिन मैंने बिना किसी सफलता के कमांड लाइन पर ImageMagick का उपयोग करने का भी प्रयास किया है। मैं linux पर ImageMagick 6.7.6 का उपयोग कर रहा हूँ। यहां तक ​​कि मैंने अभी तक किया है।

  • मैं फोंट कि ImageMagick identify -list font आदेश का उपयोग
  • मैं मैन्युअल
  • मैं एक बनाया है एक्सएमएल फ़ाइलें कि अपने सिस्टम पर स्थापित आया के आधार पर एक type.xml फ़ाइल बनाई है reckognizes का परीक्षण किया है imagick_type_gen
  • मैं एकाधिक फ़ॉन्ट प्रकार के साथ परीक्षण किया है:: type.xml फ़ाइल इस स्क्रिप्ट का उपयोग ttf, otf, PFB,
टीटीसी

convert -pointsize 32 -font "Honey-Script-Light" label:'Testing' testing.png 

Working

: यदि मैं पूर्ण फ़ॉन्ट का नाम सब कुछ के रूप में की उम्मीद काम करता है निर्दिष्ट

Font: DejaVu-Sans-Book 
    family: DejaVu Sans 
    style: Normal 
    stretch: Normal 
    weight: 400 
    glyphs: /usr/share/fonts/dejavu/DejaVuSans.ttf 

Font: Baskerville-Regular 
    family: Baskerville 
    style: Normal 
    stretch: Normal 
    weight: 400 
    glyphs: /usr/share/fonts/custom/Baskerville.ttc 

Font: Palatino-Roman 
    family: Palatino 
    style: Normal 
    stretch: Normal 
    weight: 400 
    glyphs: /usr/share/fonts/urw-fonts/p052003l.pfb 

Font: Honey-Script-Light 
    family: Honey Script 
    style: Normal 
    stretch: Normal 
    weight: 300 
    glyphs: /usr/share/fonts/custom/HoneyScript-Light.ttf 


:

यहाँ कुछ फोंट के लिए मैं के साथ परीक्षण किया है identify -list font से उदाहरण उत्पादन होता है
हालांकि, जब मैं फ़ॉन्ट परिवार का उपयोग करने की कोशिश करता हूं (दोनों identify -list font और सूची द्वारा सूचीबद्ध type.xml में घ) मैं डिफ़ॉल्ट सिस्टम फ़ॉन्ट मिलती है:

convert -pointsize 32 -family "Honey Script" label:'Testing' testing.png 

Not Working


मैं भी फॉन्ट के मापदंडों के सभी निर्दिष्ट करने की कोशिश की है और इसे फिर से काम नहीं करता है:

convert -pointsize 32 -stretch Normal -style Normal -weight 300 -family "Honey Script" label:'Testing' testing.png 



जब मैं PHP के माध्यम से एक समान प्रक्रिया करता हूं, तो जैसे ही मैं ड्रॉ ऑब्जेक्ट के फ़ॉन्ट परिवार को सेट करने का प्रयास करता हूं, वास्तव में यह एक त्रुटि देता है।

PHP Fatal error: Uncaught exception 'ImagickDrawException' with message 'Unable to set font family; parameter not found in the list of configured fonts 



बस कमांड लाइन विकल्प की तरह, अगर मैं पूर्ण फ़ॉन्ट का नाम निर्दिष्ट करें, छवि ठीक प्रदान की गई है:

$draw->setFontFamily('Honey Script'); 

यह त्रुटि फेंक दिया जाता है।

$draw->setFont('Honey-Script-Light'); 



सब कुछ से मैं कैसे एक फ़ॉन्ट कॉन्फ़िगर करने के बारे पाया है ImageMagick के साथ प्रयोग की जाने वाली, फोंट वास्तव में कॉन्फ़िगर किया गया है। मैं फ़ॉन्ट परिवार के आधार पर फोंट का चयन क्यों नहीं कर सकता?

क्या यह संभवतः एक अनियंत्रित बग है? क्या मैं कुछ छोड़ रहा हूं?

मुझे एहसास है कि मैं बस पूर्ण फ़ॉन्ट नाम निर्दिष्ट कर सकता हूं और इसके साथ किया जा सकता हूं, लेकिन मेरे प्रोजेक्ट के लिए एक कारण विशिष्ट है जो फ़ॉन्ट परिवार को निर्दिष्ट करने के लिए बेहतर बनाता है।

फ़ॉन्ट परिवार को निर्दिष्ट करने का विकल्प क्यों होगा यदि यह काम नहीं करता है? यह ImageMagick फ़ॉन्ट परिवार विकल्प के बारे में क्या कहते हैं:

यह सेटिंग एक फ़ॉन्ट परिवार कि ImageMagick पाठ प्रतिपादन के लिए उपयोग करने के लिए प्रयास करना चाहिए पता चलता है। अगर परिवार पाया जा सकता है तो इसका इस्तेमाल किया जाता है; यदि नहीं, तो डिफ़ॉल्ट फ़ॉन्ट (उदा।, "एरियल") या एक परिवार जैसा होना चाहिए प्रतिस्थापित किया गया है (उदाहरण के लिए, "कूरियर" का उपयोग किया जा सकता है यदि "सिस्टम" से अनुरोध किया गया है लेकिन नहीं मिला)।

किसी भी विचार का बहुत स्वागत है। मैं इस बिंदु पर काफी अटक गया हूँ।


संपादित करें:
मुख्य कारण मैं पूरी तरह से नामित फोंट के बजाय फ़ॉन्ट परिवारों का उपयोग करना चाहते इनपुट मैं प्रसंस्करण कर रहा हूँ की वजह से है। मुझे किसी तीसरे पक्ष की फाइलें मिलती हैं जिन्हें संसाधित करने की आवश्यकता होती है। तो मुझे लगता है कि जानकारी मैं फ़ॉन्ट परिवार के हर संभव संयोजन के लिए एक मानचित्रण नहीं बना और सही फ़ॉन्ट का नाम करने के लिए जिम्मेदार बताते हैं की आवश्यकता होगी के आधार पर सटीक फ़ॉन्ट का नाम निर्दिष्ट करने के लिए किया था

font-family="Honey Script" font-style="Normal" font-stretch="Normal" font-weight="300" 

: ये फ़ाइलें के रूप में फोंट निर्दिष्ट करें। यह बनाए रखना बहुत कठिन होगा क्योंकि सिस्टम में सैकड़ों फोंट जोड़े गए हैं।

ऐसा लगता है कि ऊपर सूचीबद्ध अनुसार फ़ॉन्ट के बारे में सभी उपलब्ध विवरणों के आधार पर छवि मैगिक को सटीक फ़ॉन्ट पुनर्प्राप्त करने का एक तरीका होना चाहिए।

यदि यह संभव नहीं है तो ImageMagick के पास फ़ॉन्ट परिवार निर्दिष्ट करने का विकल्प क्यों होगा?

+0

मैंने हमेशा सोचा है कि _font family_ सिर्फ परिवार के पहले फ़ॉन्ट को निर्दिष्ट करने का एक तरीका है। तो, फ़ॉन्ट "हनी स्क्रिप्ट" के लिए, चयनित वास्तविक फ़ॉन्ट पहला हनी स्क्रिप्ट फ़ॉन्ट होगा जो सूचीबद्ध होता है जब आप 'कन्वर्ट सूची' के साथ फ़ॉन्ट सूची करते हैं। उस ने कहा, मुझे लगता है कि मैं कुछ एसवीजी फाइलों को देखता हूं जिनके साथ मैं इंकस्केप से काम कर रहा हूं, वास्तव में केवल टेक्स्ट तत्वों में निर्दिष्ट परिवार है। इंकस्केप उस परिवार से एक समझदार फ़ॉन्ट का चयन करने लगता है, तो यह कुछ शोध करने के लायक हो सकता है कि इसके प्रस्तुतकर्ता (पेंगो) कैसे करता है? – halfer

+0

मुझे परिवार में पहला फ़ॉन्ट भी नहीं मिला है। मैंने फ़ॉन्ट्स का भी प्रयास किया है जहां परिवार में केवल एक ही फ़ॉन्ट है। मैं देख सकता हूं कि अन्य कार्यक्रम कैसे करते हैं, लेकिन यह अभी भी यह नहीं समझाता है कि ImageMagick क्यों नहीं करता है। मैं इमेजिक पीईसीएल एक्सटेंशन का उपयोग करके ImageMagick के लिए कॉन्फ़िगरेशन नहीं ढूंढ पा रहा हूं जो मुझे अपवाद फेंकने के बिना किसी भी फ़ॉन्ट परिवार को निर्दिष्ट करने देता है। – chawkinsuf

+0

यह बहुत निश्चित लगता है कि यह काम नहीं करता है। निजी तौर पर, मैं एक रूपांतरण दिनचर्या लिखूंगा जो परिवार, शैली, वजन इत्यादि लेता है और आवश्यक फ़ॉन्ट को स्वत: निर्धारित करने का प्रयास करता है। अपवादों की एक छोटी सूची अजीब मामलों से निपट सकती है, और जहां कोई डिफ़ॉल्ट सूचीबद्ध नहीं है, सूची में पहला चुना जाना चाहिए। मुझे संदेह है कि यह उन चीजों में से एक है जिसे देखने के लिए प्रयास किया जाना चाहिए कि यह उचित होगा - लेकिन लिखने में बहुत लंबा समय नहीं लेना चाहिए। – halfer

उत्तर

2

यह फ़ॉन्ट परिवारों के काम के तरीके के कारण है; उदाहरण के लिए, "एरियल" फ़ॉन्ट परिवार में बोल्ड, इटैलिक, अंडरलाइन इत्यादि के लिए विशिष्ट फ़ॉन्ट परिभाषाएं शामिल हैं। आपकी छवियों में उपयोग करने के लिए फ़ॉन्ट चुनते समय आपको विशिष्ट होना चाहिए।

मेरा अनुमान है कि यदि आप वास्तव में चाहते थे, आप निम्न कर सकता है:

  1. , फ़ॉन्ट परिवार का नाम ले लो डैश से रिक्त स्थान की जगह
  2. अगर वह काम करता है, महान!
  3. यदि नहीं, अंत करने के लिए -Regular संलग्न करें और फिर

कोशिश लेकिन आप कुछ भी फ़ॉन्ट परिवार के साथ कार्यक्रम संबंधी ऐसा नहीं करना चाहिए जब तक आप ;-)

ज्यादातर Imagick ज्ञान का मेरे स्रोत के लिए मजबूर कर रहे हैं इस आदमी से आता है: http://valokuva.org/?cat=1

+0

लेकिन अगर मैं फ़ॉन्ट परिवार के साथ सटीक शैली, खिंचाव और वजन निर्दिष्ट करता हूं, तो ImageMagick यह निर्धारित करने में सक्षम नहीं होना चाहिए कि किस फ़ॉन्ट का उपयोग करना है? – chawkinsuf

+0

शायद क्योंकि खिंचाव, शैली और वजन किसी भी फ़ॉन्ट पर लागू किया जा सकता है; यह अभी भी एक विशिष्ट फ़ॉन्ट की आवश्यकता है। –

+0

दुर्भाग्यवश यह कई फ़ॉन्ट्स के लिए इतना आसान नहीं है। फ़ॉन्ट्स वजन, शैली और खिंचाव नामकरण के लिए विभिन्न शब्दावली और सम्मेलनों का उपयोग करते हैं। कुछ को रिक्त स्थान को डैश के साथ प्रतिस्थापित करने की आवश्यकता होती है और कुछ रिक्त स्थान को हटा दिया जाता है। यहां फोंट के कुछ अन्य उदाहरण दिए गए हैं जो अच्छी तरह से मानचित्र नहीं करते हैं, यंग्लोव ईएस -> यंग-लव-ईएस-रेग्युलर, जेनऑस्टन -> जेनऑस्टन-नोसेक्रेट, फुटलाइट माइटइट -> फुटलाइट-एमटी-लाइट-रेगुलर, ट्रेबचेथ -> TrebuchetMS, स्क्रिप्टिना - वैकल्पिक -> ScriptinaAlternates, Retsyn -> RetsynDilated। मुझे यकीन है कि ऐसे बहुत सारे लोग हैं जिनमें गैर-मानक मैपिंग हैं। – chawkinsuf

2

यहाँ विधि है कि छवि (ब्राउज़र में) के रूप में आउटपुट सभी उपलब्ध Imagick फोंट

public function test_fonts(){ 
    //load background 
    $im = new Imagick(); 
    $im->newimage(800, 10000, 'lightgray'); 
    $y = 10; 
    $i = 1; 
    foreach($im->queryFonts() as $font){ 
     $insert_image = new Imagick(); 
     $insert_image->newImage(600, 30, 'whitesmoke'); 
     $insert_image->setImageFormat("png"); 
     $draw = new ImagickDraw(); 
     $draw->setFont($font); 
     $draw->setFontSize(25); 
     $draw->setFillColor(new ImagickPixel('black')); 
     $draw->setgravity(imagick::GRAVITY_NORTH); 
     $insert_image->annotateImage($draw, 0, 0, 0, $i . '.' . $font); 
     $im->compositeImage($insert_image, $insert_image->getImageCompose(),100, $y); 
     $y += 30; 
     $i++; 
    } 
    $im->setImageFormat('jpg'); 
    header('Content-Type: image/jpg'); 
    echo $im; 

} 

आपको ऐसा कुछ देखना चाहिए: enter image description here

+0

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

+0

सबसे अच्छा तरीका। !! चीयर्स !! – JayKandari